历史上的今天
今天是:2025年08月09日(星期六)
2021年08月09日 | STM32 | 串口空闲中断接收不定长数据(DMA方式)
2021-08-09 来源:eefocus
在使用STM32的串口接收数据的时候,我们常常会使用接收中断的方式来接收数据,常用的是RXNE。这里分享另一种接收数据的方式——IDLE中断(PS:本文的例子运行在STM32F103ZET6上)。
一、IDLE中断什么时候发生?
IDLE就是串口收到一帧数据后,发生的中断。什么是一帧数据呢?比如说给单片机一次发来1个字节,或者一次发来8个字节,这些一次发来的数据,就称为一帧数据,也可以叫做一包数据。
二、RXNE中断和IDLE中断的区别?
当接收到1个字节,就会产生RXNE中断,当接收到一帧数据,就会产生IDLE中断。比如给单片机一次性发送了8个字节,就会产生8次RXNE中断,1次IDLE中断。
三、IDLE中断如何配置?
IDLE中断由USART_CR1 寄存器进行配置:

对于STM32F103ZET6来说,配置USART_CR1寄存器bit5为1则打开RXNE中断,配置USART_CR1寄存器bit4为1则打开IDLE中断。

这是状态寄存器,当串口接收到数据时,bit5就会自动变成1,当接收完一帧数据后,bit4就会变成1.
需要注意的是,在中断函数里面,需要把对应的位清0,否则会影响下一次数据的接收。

对于RXNE中断,对USART_DR的读操作可以将该位清零。

对于IDLE中断,由软件序列清除该位(先读USART_SR,然后读USART_DR)。
四、USART+DMA+IDLE接收不定长数据例程
1、USART初始化

2、中断服务函数

3、主函数

4、运行结果

五、最后
1、参考资料:
(1)http://www.armbbs.cn/forum.php?mod=viewthread&tid=94751&extra=page%3D1
(2)http://www.51hei.com/bbs/dpj-39885-1.html
2、源码获取
链接:https://pan.baidu.com/s/1Wr4OXm3jigtzPuIVI8N03w
提取码:0vpj
史海拾趣
|
在Windows下我们已经对系统的电源管理非常熟悉了,我们可以通过主板的高级电源管理模块实现STR、STD等功能。对于笔记本电脑用户使用高级电源管理方式,让笔记本电脑处于休眠状态,节省电池就更加重要。 上面说的这些功能在Windows平台下 ...… 查看全部问答> |
|
心律Twitter:Akiduki Pulse可以把你的心律发布到Twitter上,号称是硬件、软件都开源的,我只找到了心律采集部分的原理图(从本站下载),其他部分电路没有看到,也没有找到软件部分的代码,因为网站是日语的,而我不懂日语。 胎儿Twitter:Core ...… 查看全部问答> |
|
有个问题,希望有经验的朋友帮忙解决一下~ 做了一个asp.net页面调用数据库里的一段HTML代码,并且在手机上用webBrowser显示出来 但是我有个功能是要将其打印出来,并且在手机上webBrowser1.DocumentText这个属性也和电脑上不一样,虽然微软提供了这 ...… 查看全部问答> |
|
今天烧录了一个程序,想让他运行,怎么才能开始运行,是一接通电源就运行,还是要怎么搞他才开始运行,我烧录的程序是1602LCD简单时钟显示实验C语言!… 查看全部问答> |
|
我在做项目开发时,需要编译一个阿拉伯版的win ce操作系统,我用PB可以编译出中文,英文,法文都可以,但是阿拉伯文不支持啊,将default language设为阿拉伯(埃及),下载到开发板运行,桌面语言仍然是英文,相同方法,法文、中文都可以,请问对于 ...… 查看全部问答> |
|
DM9161,怎么才能得到他的物理地址,即5bit的PHY地址 请问一下 我板子上有一个DM9161,怎么才能得到他的物理地址,即5bit的PHY地址? 我的程序源码中用的地址是0x100。 看了看手册,但是没看见。是通过引脚配置吗? 知道的大哥给教一下 谢谢了 … 查看全部问答> |




