如何使stm32用dma进行串口发送,设置DMA_Mode中的Circular和normal问题 5
大侠,初学stm32,想用dma的方式用串口给pc发送定长的数据,但是我想要按照我的时间发送。假设sendbuff[20],是我要发送的数据,我都设置好了,在DMA_Mo...
大侠,初学stm32,想用dma的方式用串口给pc发送定长的数据,但是我想要按照我的时间发送。假设sendbuff[20],是我要发送的数据,我都设置好了,在DMA_Mode中用的是DMA_Mode_Normal,之后我想在发送时,重新对dma设置,使能,但是没有执行发送的代码,只是第一次发送成功,这是为什么呢,有没有这种问题的完美解决方案,谢谢大侠。
展开
3个回答
展开全部
如果没开中断就用查询的方式,下面是DMA1 Channel5的,其他通道类似
/* 等待DMA传输完成 */
while (!DMA_GetFlagStatus(DMA1_FLAG_TC5));
/* 清除DMA完成标志 */
DMA_ClearFlag(DMA1_FLAG_TC5);
/* 关闭DMA传输 */
DMA_Cmd(DMA1_Channel5, DISABLE);
执行完上面后就可以接着下一次发送了,中断方式类似,只是要在中断里执行后两个操作,不需要等待
/* 等待DMA传输完成 */
while (!DMA_GetFlagStatus(DMA1_FLAG_TC5));
/* 清除DMA完成标志 */
DMA_ClearFlag(DMA1_FLAG_TC5);
/* 关闭DMA传输 */
DMA_Cmd(DMA1_Channel5, DISABLE);
执行完上面后就可以接着下一次发送了,中断方式类似,只是要在中断里执行后两个操作,不需要等待
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
引发DMA的中断应该是一直都有的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询