今天完善了USART串口接收数据函数以及程序,在每个USART外设上都添加了串口空闲中断函数。其步骤如下:
添加总线空闲中断功能的优点:
a) 可以准确地判断出串口数据是否接收完毕,不需要额外添加定时器作数据接收完毕超时检测,不仅可以减少了TIM定时器外设 的使用,提高系统性能,而且可以增强程序的可读性(因为使用TIM定时器做超时检测时,需要在TIM定时器中断函数中添加一个 USART_RX_Over的标识符,影响了程序的可读性);
添加总线空闲中断功能的需要注意的地方:
a) 在使用串口空闲中断时需要添加读DR位(数据寄存器)空闲中断变量,因为每次触发串口空闲中断时,需要读取对应USART的DR位(数据寄存器)才能清除IDLE(串口空闲空闲标志位)标志位,保证下次执行时不出错,如图下:
b) 当触发串口空闲中断时(证明串口接收数据完毕),可以添加USART_RX_Over全局变量,利于在工程文件外部判断串口数据是否接收完毕;
c) 当接收到多个数据时,需要添加记录接收数据个数USART_RX_Count变量,在进入串口空闲中断(证明串口接收数据完毕),清零该变量,避免该变量在工程文件外部清零,有效地预防忘记在文件外部将USART_RX_Count清零导致bug出现;
关键字:STM32 串口 空闲中断
引用地址:
STM32串口空闲中断的使用
推荐阅读最新更新时间:2024-11-13 09:55
GD32和STM32有何区别?GD32如何替换STM32呢?
GD32和STM32是两种不同的微控制器系列,一般被用于嵌入式系统开发。GD32是中国华大基因(Gigadevice)公司开发的微控制器,而STM32是瑞士意法半导体(STMicroelectronics)公司开发的微控制器。 首先,我们来看一下GD32和STM32在技术规格上的区别。GD32系列采用了中国自主研发的ARM Cortex-M3和Cortex-M4内核,而STM32系列则采用了瑞士意法半导体公司的ARM Cortex-M系列处理器。从处理器性能和架构上来看,两者基本上是相似的。然而,由于GD32系列是后来者,它在一些方面对原有的STM32系列做了一些改进和增强,例如增加了更多的外设和功能模块。 其次,GD32和STM
[单片机]
STM32读写保护功能及设置
STM32读写保护功能及设置 功能:: 读保护设置后将不能读出flash的内容;当解除读保护的时候stm32会自动擦出整篇flash; 设置: 读保护设置: 在程序的开头加入“读保护”代码,即实现了读保护功能;(每次程序运行先 开保护) 解除读保护:解除读保护可以设置在按键里面,方便实现解锁,也不可不设; (1)设置读保护: if(FLASH_GetReadOutProtectionStatus()!=SET) { FLASH_Unlock(); //不解锁FALSH也可设置读保护 FLASH_ReadOutProtection(ENABLE); FLASH_Lock();//上锁 } (2)解
[单片机]
STM32单片机串口通信波特率计算方法
1. 什么是波特率 不管是什么单片机,在使用串口通信的时候,有一个非常重要的参数:波特率。什么是波特率:波特率就是每秒传送的字节数。双方在传输数据的过程中,波特率一致,这是通讯成功的基本保障。下面以STM32单片机为例,讲解一下串口波特率的计算方法。 2. STM32波特率相关的寄存器 STM32单片机设置波特率的寄存器只有一个:USART_BRR寄存器,如下图所示。 该寄存器的有效位数为16位,前4位用于存放小数部分,后12位用于存放整数部分。将波特率算出来后,数值填入这个波特率就可以了。下面介绍如何计算。 3. 波特率计算方法 STM32的数据手册给出了计算方法,有一个公式,如下图所示: 在这个公式上,共有三
[单片机]
STM32 407 iar fpu 加入浮点
之前想玩一下FPU 可惜那个DSP库看不懂 也找不到教程 我研究了2个晚上总算会用那个FFT了.... 我的环境是 IAR 6.2 板子是STM32F4DISCOVERY 第一 首先下载官方的 STM32F4xx_DSP_StdPeriph_Lib_V1.0.0 没有的同学请自己去官网下一个 DSP库在 STM32F4xx_DSP_StdPeriph_Lib_V1.0.0LibrariesCMSIS 然后我们使用IAR建立工作空间 这个教程到处都有 我就不说了 在编译器里面加入 $PROJ_DIR$......LibrariesCMSISDSP_LibSource ARM_MATH_CM4 ARM_MATH_MATRIX_CH
[单片机]
stm32 NVIC的配置
一、NVIC是中断向量表的统称。因为stm32的中断源非常多,在使用时有些中断必须要具有较高的优先级,那么nvic就诞生了,它就是用来配置中断顺序的。 二、打开misc.c文件,可以看到以下列表。 @arg NVIC_PriorityGroup_0: 0 bits for pre-emption priority * 4 bits for subpriority * @arg NVIC_PriorityGroup_1: 1 bits for pre-emption priority * 3 bits for subpriority * @arg NVIC
[单片机]
STM32开发笔记68: keil中使用ST-Link不能成功下载的真实原因
单片机型号:STM32F091RCT6 在STM32开发笔记67: 在keil中使用ST-Link不能成功下载的解决方法提到解决keil中使用ST-Link不能成功下载的一种方法,经仔细分析其实原因还在于程序上。 不能成功下载的程序中,包含如下程序,: CInit::CInit(uint8_t mode) { //底层初始化 HAL_Init(); //GPIO时钟使能 __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENAB
[单片机]
STM32的中断优先级和库函数的 开、关总中断
一,中断优先级: STM32(Cortex-M3)中的优先级概念 STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。 当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决
[单片机]
GPRS无线终端测试系统电路设计
基于高性能单片机STM32($20.3400)和GPRS无线通信方案实现了对测试点CMMB网络覆盖情况的实时监测,并利用GPS接收器将测试终端的地理位子信息上传到服务器端,完成了对监测终端的精准定位。终端板卡供电方式采用太阳能供电系统,保障其在无电源和人员看守的情况下长期稳定的工作。最后通过综合测试,能实现所有要求的功能,完全满足本次设计的要求。 系统分为测试终端和服务器端,服务器端只需要一台性能良好的个人计算机,而测试终端主要由以下几个模块构成:射频前端模块模块、功率测量与存储模块、GPS接收器、太阳能供电模块、处理器模块及GPRS无线通信模块。各个模块主要是通过STM32($20.3400)微处理器的GPIO口连接与通信。
[单片机]