stm32 USART_IT_IDLE

发布者:知者如渊最新更新时间:2016-10-07 来源: eefocus关键字:stm32  USART_IT_IDLE 手机看文章 扫描二维码
随时随地手机看文章
请注意IDLE中断是只检测到空闲帧时产生的中断。

而空闲帧的定义是:被视为完全由“1"组成的一个完整的数据帧,后面跟着包含?数据的下一帧的开始位。

关键是后面半句话,要求有下一帧的开始位,而你的情况恰巧没有下一帧的开始位(传输已经结束),当然不会有中断了。


举例:
如果连续发送一串字符串“123”会发生空闲中断吗?
不会,因为没有下一帧的开始位。
如果进了空闲中断不手动清零,会一直进入空闲中断。

所以用这个IDLEIE来结束DMA方式的接收,是合适的。唯一一个不合适的地方是:如果你发送一个字符串后,将DMA设置好接收传输方式,然后:对方没响应,你一个字符也收不到,这时候,IDLEIE是不会来的,必须有个总超时检测来结束DMA接收方式:因为IDLEIE中断必须要有字符串收到,然后有一个字符的时间没收下一个字符的起始位,才会发生。

另外,1个字符间隔的空闲就结束接收:是默认任何对方发送字节的间隔不大于1个字符间隔,是不符合Modbus-RTU协议的,RTU协议是3.5个字符时间,如果收到"a"后,停了2个字符时间,又收到"b",Modbus-RTU还是认为ab是同一帧的连续字符。
关键字:stm32  USART_IT_IDLE 引用地址:stm32 USART_IT_IDLE

上一篇:STM32 之 LED
下一篇:STM32 APB1总线时钟配置问题

推荐阅读最新更新时间:2024-03-16 15:13

stm32单片机红外遥控超声波避障小车
和同学一起在学校参加院电子设计大赛做的项目,看起来时间很长,但实际上我们拢共做的时间差不多是3天的样子。 板子是正点的,所以很多地方我们就直接扒的正点的例程,比如红外遥控的部分完整拿过来了,能直接用。 我们在完成学校的要求后又多加了测距显示和差速调节(让小车可以从完全停止到最高速度),后面我会分块尽量详细叙述小车的功能原理及代码介绍。 视频演示 https://www.bilibili.com/video/av85501350/ 电源 我们采用的是三节18650供电,三节电池就有12v,用来驱动小车绰绰有余,为了获得更稳定符合小车需求的电压,我们又采用了一个LM2596S降压模块,把12V的电压给降到3v给单片
[单片机]
STC12C5A60S2使用NRF24L01和stm32通信
/******************************************/ // // 该程序工作的主频是12MHz,单片机使用STC12C5A60S2 // /******************************************/ #include STC12C5A60S2.H #define uchar unsigned char #define uint unsigned int /********** NRF24L01寄存器操作命令 ***********/ #define READ_REG 0x00 //读配置寄存器,低5位为寄存器地址 #define WRITE_REG
[单片机]
STM32启动文件简单分析
STM32启动文件简单分析(STM32F10x.s适用范围)定时器, 型号, 名字在 STM32不完全手册里面 ,我们所有的例程都采用了一个叫STM32F10x.s的启动文件,里面定义了STM32的堆栈大小以及各种中断的名字及入口函数名称,还有启动相关的汇编代码。STM32F10x.s是MDK提供的启动代码,从其里面的内容看来,它只定义了3个串口,4个定时器。实际上STM32的系列产品有5个串口的型号,也只有有2个串口的型号,定时器也是,做多的有8个定时器。比如,如果你用的STM32F103ZET6,而启动文件用的是STM32F10x.s的话,你可以正常使用串口1~3的中断,而串口4和5的中断,则无**常使用。又比如,你TIM1~
[单片机]
Keil环境,在调试STM32中犯过的错
1、貌似的变量冲突 程序中有一个全局变量赋值gUI = 0x0A;可是发现gUI并没有获得这个值,而是另一个位于RAM区首地址0x2000 0000的全局变量获得了这个值,感觉奇怪,堆栈溢出? 后来检查发现,在程序的前一个子函数中有语句: char ID ; sprintf(ID, %02X%02X%02X%02X , Card_Id , Card_Id , Card_Id , Card_Id ); OLED_8x16StrP(0,2,(u8 *)ID); //液晶显示ID号 上面代码中ID 缺少了字符串结束符,而OLED_8x16StrP()函数是以字符串结束符,也就是某个字节为0值判断显示结束的,于是不知道这个函数
[单片机]
stm32,ov7670识别二值化并识别黑色物体,串口返回坐标值
自己网上找的代码,根据要求修改可二值化,识别黑色物体,用红色框框框起来,串口返回坐标值 单片机源程序如下: #include led.h #include delay.h #include key.h #include sys.h #include lcd.h #include usart.h #include string.h #include ov7670.h #include tpad.h #include timer.h #include exti.h #include usmart.h #include EasyTracered.h const u8*LMODE_TBL ={
[单片机]
STM32之FSMC的液晶使用
经过这两天的学习液晶,对STM32的FSMC有了初步的了解。虽然遇到了一些问题,但经过不懈的努力,都一一的解决了,接下来我就使用FSMC可能遇到的问题进行说明。希望能对大家的学习有所帮助。 一、端口配置 1、 由于FSMC写NOR时序与8080接口的时序十分相识,因此我们采用模拟8080时序, 2、 STM32的引脚图如图所示。 3、根据上图我们可以得出,FSMC的数据端口D 如下 4、我们使用的是 FSMC 的信号线 NE1 作为控制 8080 的 CSX 片选信号,所以我们把本成配置为 FSMC_Bank1_NORSRAM1 (NE1 片选BANK1)。由上图得FSMC-NE1 ==PD7
[单片机]
STM32之CAN ---CAN ID过滤器分析
1 前言 在CAN协议里,报文的标识符不代表节点的地址,而是跟报文的内容相关的。因此,发送者以广播的形式把报文发送给所有的接收者。节点在接收报文时,根据标识符(CAN ID)的值决定软件是否需要该报文;如果需要,就拷贝到SRAM里;如果不需要,报文就被丢弃且无需软件的干预。 为满足这一需求,bxCAN为应用程序提供了14个位宽可变的、可配置的过滤器组(13~0),以便只接收那些软件需要的报文。硬件过滤的做法节省了CPU开销,否则就必须由软件过滤从而占用一定的CPU开销。每个过滤器组x由2个32位寄存器,CAN_FxR0和CAN_FxR1组成。 为了让大家了解STM32的bxCAN的接收过滤机制,首先大
[单片机]
<font color='red'>STM32</font>之CAN ---CAN ID过滤器分析
STM32输入捕获模式设置并用DMA接收数据
环境: 主机:WIN7 开发环境:MDK4.72 MCU:STM32F103 说明: 项目中需要进行红外学习,于是采用输入捕获取得电平变化时间.并将数据放在DMA中.这样可以避免频繁中断消耗CPU资源. 采用的是PB1脚,对应TIM3的通道4. 源代码: /********************************************************************* * 接口函数:初始化红外学习模块 **********************************************************************/ voi
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved