如何使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问题的主要内容,如果未能解决你的问题,请参考以下文章