关于STM32串口空闲中断IDEL的问题

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 个字节,那

相关文档
最新文档