金牌会员
 
- 积分
- 1574
- 金钱
- 1574
- 注册时间
- 2017-7-17
- 在线时间
- 308 小时
|
发表于 2018-4-14 18:19:35
|
显示全部楼层
本帖最后由 candylife9 于 2018-4-14 18:27 编辑
就是一个DMA发送+接收的功能啊,很简单。DMA发送很简单,数据写到DMA发送缓冲区,启动发送就可以了。接收要复杂点:1)单字节RXNE中断检测方式,需要做个超时定时器来检测数据包的结束。2)利用串口的IDLE中断检测数据包的结束。 第一个方法呢,会频繁中断,而且要在接收中断里面处理数据接收队列,还有在定时器的更新中断里面做一些接收下一个数据包的逻辑,但是比较灵活。
第二个方法呢,一个数据包中断一次,然后直接保存DMA接收缓冲区里面的数据就可以了。
咋一看,第二个方法绝对完美。。。但是现实没有百分百完美,有时候你的外设(这里指你的串口调试助手)发送一个数据包的时候,会因为串口速率或程序执行的问题而导致拆分成两个间隔几个毫秒的数据包。。。所以用哪个方法还是要取决于你用的外设。当然串口调试助手我还没有遇到过这种尴尬的情况,但是我在别的项目中遇到过。。。。所以,你是可以用第二种方法做DMA接收的。
|
|