DMA_SxCR Включить бит не может быть записан на stm32f412 - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь начать передачу DMA на моем stm32f412, и у меня все настроено так, что я устанавливаю управляющие регистры на каналах / потоках DMA для TX и RX. Я могу установить разрешение (Бит 0) на TX, но не на RX.

Таблица данных имеет 3 варианта очистки бита аппаратным способом: 1.) В конце передачи DMA (поток готов к настройке) 2.) Если на главных шинах AHB возникает ошибка передачи 3. ) Когда порог FIFO для порта AHB памяти несовместим с размером пакета.

Не думаю, что это может быть первый или третий, поскольку передача DMA еще даже не началась, и пакет не настроен, это просто одна передача. Я не совсем уверен, что означает второе, но в регистрах ошибок не отмечены ошибки передачи.

Буду признателен за любые возможности для изучения

Редактировать: Тьфу, я был глядя на неправильные регистры, чтобы найти DMA_LISR и _HISR. Произошла ошибка передачи на моем канале RX.

1 Ответ

0 голосов
/ 18 февраля 2020

Из описания бита DMA_SxCR_EN в справочном руководстве:

Примечание. Перед установкой бита EN на «1» для начала новой передачи флаги событий, соответствующие потоку в DMA_LISR или DMA_HISR регистр должен быть очищен.

По моему опыту, эти флаги событий включают в себя не только флаги ошибок, но и обычные флаги событий, такие как Transfer Complete или Half Transfer . В некоторых случаях я также очищал флаг ошибки FIFO, хотя не могу вспомнить причину этого.

Эта проблема проявляется как «DMA работает только один раз» . В вашем случае это не сработает ни разу, поэтому могут возникнуть другие проблемы. Тем не менее, я думаю, что стоит попытаться очистить все флаги состояния перед включением потока.

...