stm32 串口串口如果没有接受结束判断会怎样,会有什么请款

stm32 串口的串口采用DMA方式接收数据测試

本文博客链接:,作者:jdh,转载请注明.

串口可以配置成用DMA的方式接收数据,不过DMA需要定长才能产生接收中断,如何接收可变长度的数据呢?

1.将RX脚与一路時钟外部引脚相连,当串口一帧发完,即可利用此定时器产生超时中断.这个实时性较高,可以做到1个字节实时监测.

2.不改变硬件,开启一个定时器监控DMA接收,如果超时则产生中断.这个实时性不高,因为超时时间必须要大于需要接收帧的时间,精度不好控制.

3.stm32 串口单片机有的串口可以监测总线是否处于空闲,如果空闲则产生中断.可以用它来监测DMA接收是否完毕.这种方式实时性很高.

本文采用第3种方式.在波特率576000下大数据包冲击证明可行.



测試:单片机每次收到此包,一个IO作电平跳转,然后处理返回一包.

单个字符发送大部分操作无反饋,少部分操作有正确反馈;

1.修改串口波特率为9600
有所改善但并未解决问题

2.修改串口中断优先级为抢占有限级 1 子优先级 3

3.停止使用串口中断,使用查询标志位方式完成接收

当发送正常结束后就会产生接收溢出 中断 (ORE中断),而且正常情况下应该收到8个数据的但是只产生一次接收溢出 中断 (ORE中断) ,


实在是没办法了求解,

我要回帖

更多关于 stm32 串口 的文章

 

随机推荐