nanorobot 3 24 марта, 2017 Опубликовано 24 марта, 2017 (изменено) · Жалоба Занимаюсь разработкой дивайса на STM32F051C8T6. Используется DAC в режиме DMA. "Родным" каналом для DAC в данном камне является 3 канал. Но он у меня занят под обмен по интерфейсу SPI c другой платой дивайса, которая является SPI мастером. Пришлось использовать для DAC TIMER15 и канал DMA номер 5("родной" для TIMER15). В регистре DAC_CR взвел биты триггера для TIMER15. Вроде все работает, но в момент запуска DAC в режиме DMA теряется связь с мастером(входящий от слейва к мастеру поток искажается, CRC не совпадает). Мучился несколько дней, пробовал заводить DAC на другой свободный канал и с другим таймером. Все без толку. Потом, без всякой связи с проблемой, сообразил, что в режиме DMA установка битов триггера под соответствующий таймер не требуется. закомментил соответствующую строчку, загрузил, все работает как часы, в том числе и связь. Просто, несколько неожиданно для меня. Може сгодится кому... Изменено 22 ноября, 2022 пользователем haker_fox Уточнил название темы, добавил теги, переместил в нужный раздел. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 182 24 марта, 2017 Опубликовано 24 марта, 2017 · Жалоба Занимаюсь разработкой дивайса на STM32F051C8T6. Используется DAC в режиме DMA. "Родным" каналом для DAC в данном камне является 3 канал. Но он у меня занят под обмен по интерфейсу SPI c другой платой дивайса, которая является SPI мастером. Как вариант: Завести SCLK SPI на вход таймера, поделить частоту на размер слова SPI, таймером генерить запросы к DMA-каналу этого таймера и этим DMA обслуживать уже SPI. Не знаю - возможно-ли такое на данном STM, но я такое делал когда-то давно на LPC17xx (или даже LPC23xx ещё?) на его SPI, который самостоятельно не работал с DMA. А так получилось заставить работать. Пришлось использовать для DAC TIMER15 и канал DMA номер 5("родной" для TIMER15). В регистре DAC_CR взвел биты триггера для TIMER15. Вроде все работает, но в момент запуска DAC в режиме DMA теряется связь с мастером(входящий от слейва к мастеру поток искажается, CRC не совпадает). Ну естественно - DAC ведь отправляет запросы на DMA к своему каналу. Это вроде как бы очевидно. А Вы чего хотели? Естественно DMA-биты в ЦАП в таком случае нельзя взводить. Потом, без всякой связи с проблемой, сообразил, что в режиме DMA установка битов триггера под соответствующий таймер не требуется. закомментил соответствующую строчку, загрузил, все работает как часы, в том числе и связь. Просто, несколько неожиданно для меня. Може сгодится кому... Скоро буду делать работу DAC+DMA на F429. Но там вроде как я понял из даташита, если не использовать запуск от внешнего триггера (таймера например), то просто записью в регистр данных ЦАП преобразование не запустить. Надо ещё отдельную запись в другой регистр сделать (программный триггер). Наверное в вашем STM по-другому. Да и не нужно это - я заранее предусмотрел чтобы не занимать DMA-канал ЦАП-а. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться