OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4852|回复: 2

串口什么时候应该配置为中断模式orDMA中断模式?

[复制链接]

52

主题

142

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
441
金钱
441
注册时间
2013-10-17
在线时间
23 小时
发表于 2016-3-26 18:44:29 | 显示全部楼层 |阅读模式
5金钱
STM32的串口可以写成中断服务函数接收, 也能写成DMA中断, 我看两者都有人用.
一般我们更推荐哪一种呢? 是否可以结合具体应用场合说说~~~~~

最佳答案

查看完整内容[请看2#楼]

如果对时间上有限制, 比如,主CPU除了处理串口外,还需要处理其它的事情, 但串口发送的数据又多, 因为CPU直接写串口,需要主CPU等在哪里一个字节一个字节的发送出去, 由于串口传输的速度限制, 当数据很多时, CPU要等在哪里很长时间做不了别的事情, 这时, 用DMA,就帮上大忙了, 将需要发数的数据写入发送缓存区,使能DMA传输,余下的发送工作就是DMA的事了, CPU就可以做别的事情,如果需要发送完成处理一些情情,只需要使能DMA传输完成中断 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

507

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3340
金钱
3340
注册时间
2013-4-10
在线时间
333 小时
发表于 2016-3-26 18:44:30 | 显示全部楼层
本帖最后由 likunxue 于 2016-3-26 21:28 编辑

如果对时间上有限制, 比如,主CPU除了处理串口外,还需要处理其它的事情, 但串口发送的数据又多, 因为CPU直接写串口,需要主CPU等在哪里一个字节一个字节的发送出去, 由于串口传输的速度限制, 当数据很多时, CPU要等在哪里很长时间做不了别的事情, 这时, 用DMA,就帮上大忙了, 将需要发数的数据写入发送缓存区,使能DMA传输,余下的发送工作就是DMA的事了, CPU就可以做别的事情,如果需要发送完成处理一些情情,只需要使能DMA传输完成中断然后在DMA传输完成发生中断后,再回来处理一下就行了.
当然, 如果你一次只发一两个字节,我到是觉得直接用CPU发送要快得多因为, 如果只发送一个字节以内, 只需果判断 串口发送寄存器是不是空的, 如果需要等一下, 不是空的,把数据写入发送寄存器就结束, 这种情况还需要用 DMA 就有点多余了.因为不管串口多慢, 当前重新调用串口发送函数,前面串口的发送工作基本已搞完,一般很少从前一次发送再到你第二次发送数据之前,串口还没有发送前面数据的情况所以
  while((USART2->SR & 0x80)==0);       //等待发送区空  
  USART2->DR = K;       //发送数据   
前面哪句基本是不会等在哪里!!!!!!!!!!!!!

另外,用DMA传输完成中断,在中断里需要注意一下, 串口是否真的传完, 因为,一般情况,DMA将最后一个字节写入串口发送寄存器后,就会发生中断,这时真正的最后一个字节还在串口的移位寄存器中没有全部移完,
如果你使用485总线来发送与接收数据, 我之前的做法是在DMA发送完成中断里拉低发送控制口, 如果不查询串口是否发送结束,往往会使最后一个字节发送出不去.
所以 在DMA中断里需加如下语句.
BIT_ADM(DMA1->IFCR,25) = 1;            //清除中断完成标志  
while((USART2->SR & 0x40)==0);         //等待发送结束               
SR485_FASONGSHINENG = 0;              //禁止发送,使能接收



回复

使用道具 举报

8

主题

74

帖子

0

精华

初级会员

Rank: 2

积分
176
金钱
176
注册时间
2016-6-29
在线时间
34 小时
发表于 2016-8-11 09:03:10 | 显示全部楼层
likunxue 发表于 2016-3-26 18:44
如果对时间上有限制, 比如,主CPU除了处理串口外,还需要处理其它的事情, 但串口发送的数据又多, 因为CPU直接 ...

赞一个,如果我用485通讯,不想用DMA中断判断DMA是否发送完成,而在main函数查询DMA的, DMA_GetFlagStatus发送中断标志位可以吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 08:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表