如何使stm32用dma进行串口发送,设置DMA_Mode中的Circular和normal问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使stm32用dma进行串口发送,设置DMA_Mode中的Circular和normal问题相关的知识,希望对你有一定的参考价值。

大侠,初学stm32,想用dma的方式用串口给pc发送定长的数据,但是我想要按照我的时间发送。假设sendbuff[20],是我要发送的数据,我都设置好了,在DMA_Mode中用的是DMA_Mode_Normal,之后我想在发送时,重新对dma设置,使能,但是没有执行发送的代码,只是第一次发送成功,这是为什么呢,有没有这种问题的完美解决方案,谢谢大侠。

如果没开中断就用查询的方式,下面是DMA1 Channel5的,其他通道类似
/* 等待DMA传输完成 */
while (!DMA_GetFlagStatus(DMA1_FLAG_TC5));
/* 清除DMA完成标志 */
DMA_ClearFlag(DMA1_FLAG_TC5);
/* 关闭DMA传输 */
DMA_Cmd(DMA1_Channel5, DISABLE);

执行完上面后就可以接着下一次发送了,中断方式类似,只是要在中断里执行后两个操作,不需要等待
参考技术A http://blog.csdn.net/xiaoxiaopengbo/article/details/77472093 可以看下这个,这个里面有 参考技术B 引发DMA的中断应该是一直都有的

stm32dma填入的内容怎么修改

STM32DMA可以使用STM32CubeMX软件进行参数设置,从而修改填入的内容。同时,也可以使用Base初始化函数库来改变DMA的参数,如使能DMA控制器、修改传输参数、设置DMA去中断请求等。 参考技术A STM32DMA填入的内容可以通过将STM32DMA驱动程序中的具体参数更改来修改,也可以通过调用特定的函数来更改参数。

以上是关于如何使stm32用dma进行串口发送,设置DMA_Mode中的Circular和normal问题的主要内容,如果未能解决你的问题,请参考以下文章

STM32——DMA接收和发送的实现

stm32_DMA采集一个AD数据_并通过DMA向串口发送

stm32 串口发送数组 cpu可以工作吗

[STM32F103]DMA原理

STM32的HAL库中的DMA_FLAG_TCIF3_7等几个宏定义的含义

stm32 高效串口收发