Jump to content

    
Sign in to follow this  
Метценгерштейн

DMA STM32

Recommended Posts

Допустим, хочу передать данные из МК в UART через DMA.

 

Я просто настраиваю DMA, UART, запускаю работу DMA по прерываниям.

Делаю обычную инициализацию UART.

Дальше- оно само в UART все передаст, или нужны подобные ф-ии

//Функция передачи символа
void Usart1_Send_symbol(uint8_t data)
{
  while(!(USART1->SR & USART_SR_TC)); //Проверяем установку флага TC - завершения предыдущей передачи 
  USART1->DR = data; //Записываем значение в регистр данных - передаем символ
}

Share this post


Link to post
Share on other sites

в общем случае не нужны. В том и фиша, что оено само буфер выпулит в UART по указанной длине. Можно ещё в конце прерывание получить или флаг, что всё готово.

Share this post


Link to post
Share on other sites

спасибо. А еще вопрос- я все настроил, а где команда старта, что данные пора в DMA выгрузить? Допустим, у меня массив, а как сказать, что там в массиве новые данные и снова их бы отправить надо?

 

Этим?

USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);

Активируем передачу в последовательный порт по запросу DMA

Share this post


Link to post
Share on other sites

ЭТО надо забыть и внимательно изучить reference manual.

Там английским языком сказано, что после того, как DMA передаст запрограммированное количество байт, оно останавливается.

Потом снова надо записать требуемое количество в регистры и снова запустить передачу.

 

Термин "выгрузить в DMA" некорректный.

Share this post


Link to post
Share on other sites

вроде так корректно каждый раз инициализировать передачу снова

DMA_Cmd (DMA1_Channel4, ENABLE); // однократно передаем данные по DMA

 

Share this post


Link to post
Share on other sites
вроде так корректно каждый раз инициализировать передачу снова

DMA_Cmd (DMA1_Channel4, ENABLE); // однократно передаем данные по DMA

Одной командой второй запуск не активировать, необходимо заново провести процедуру переинициализации dma. Самый простой способ вызывать тот же алгоритм, который уже вызвался в программе.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this