关于STM32串口空闲中断IDEL的问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关于STM32串口空闲中断IDEL的问题
1.空闲中断是接受数据后出现一个byte 的高电平(空闲)状态,就会触发空闲
中断.并不是空闲就会一直中断,准确的说应该是上升沿(停止位)后一个byte,如果一直是低电平是不会触发空闲中断的(会触发break 中断)。
2.关于第二点有要铺垫的三个情况,datasheet 中”当一空闲帧被检测到时,其处
理步骤和接收到普通数据帧一样,但如果IDLEIE 位被设置将产生一个中断”“空
闲符号被视为完全由'1'组成的一个完整的数据帧,后面跟着包含了数
据的下一帧的开始位'1'的位数也包括了停止位的位数”空闲符号的
配图后面跟这一个低电平.有人理解为只有收到下一个数据的起始位才会触发中断,这样理解是不对的,应该是数据后有空闲了一帧就会触发.
3.清中断的方式感觉奇怪,使用函数USART_ClearITPendingBit( USART1,
USART_IT_IDLE )清除不了中断的.我用的是3.5 的库,查看函数说明,里面的
@param 参数并没有IDLE,后面的@note 中,这样说:”PE(Parity error),FE(Framing
error),NE(Noise error),ORE(OverRun error) and IDLE(Idle line detected) pending
bits are cleared by software sequence: a read operation to USART_SR register
(USART_GetITStatus()) followed by a read operation to USART_DR register
(USART_ReceiveData()).”我是通过语句”USART1->DR;”来清除IDLE 中断的.
现在有很多数据处理都要用到不定长数据,而单片机串口的RXNE 中断一次
只能接收一个字节的数据,没有缓冲区,无法接收一帧多个数据,现提供两种利用串口IDLE 空闲中断的方式接收一帧数据,方法如下:
方法1:实现思路:采用STM32F103 的串口1,并配置成空闲中断IDLE 模
式且使能DMA 接收,并同时设置接收缓冲区和初始化DMA。那么初始化完成
之后,当外部给单片机发送数据的时候,假设这帧数据长度是200 个字节,那