代码如下:
void USART1_IRQHandler(void)
{
u8 res;
#ifdef OS_CRITICAL_METHOD //如果OS_CRITICAL_METHOD定义了,说明使用ucosII了.
OSIntEnter();
#endif
if(USART1->SR&(1<<5))//接收到数据
{
res=USART1->DR;
if((USART_RX_STA&0x8000)==0)//接收未完成
{
if(USART_RX_STA&0x4000)//接收到了0x0d
{
if(res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
else USART_RX_STA|=0x8000; //接收完成了
}
else //还没收到0X0D
{
if(res==0x0d)
USART_RX_STA|=0x4000;
else
{
USART_RX_BUF[USART_RX_STA&0X3FFF]=res;
USART_RX_STA++;
if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收
}
}
}
}
#ifdef OS_CRITICAL_METHOD //如果OS_CRITICAL_METHOD定义了,说明使用ucosII了.
OSIntExit();
#endif
}
USART_RX_STA是状态标记变量,从0开始,串口中断接收到一个数据(一个字节)就自增1。当数据读取全部OK时候(回车和换行符号来的时候),那么 USART_RX_STA的最高位置1,表示串口数据接收全部完毕了,然后main函数里面可以处理数据了。
当接收到从电脑发过来的数据,把接收到的数据保存在USART_RX_BUF 中,同时在接收状态寄存器(USART_RX_STA)中计数接收到的有效数据个数,当收到回车(0X0D,0X0A)的第一个字节0X0D 时,计数器将不再增加,等待0X0A 的到来,而如果0X0A 没有来到,则认为这次接收失败,重新开始下一次接收。如果顺利接收到0X0A,则标记USART_RX_STA的第七位,这样完成一次接收,并等待该位被其他程序清除,从而开始下一次的接收,而如果迟迟没有收到0X0D,那么在接收数据超过64 个了,则会丢弃前面的数据,重新接收。
关键字:Stm32 USART_RX_STA
引用地址:
Stm32中的USART_RX_STA
推荐阅读最新更新时间:2024-11-09 11:25
STM32学习之路-LCD驱动(1)<基础知识>
T T 为了项目,直接就来研究LCD了,一开始很蒙,连一些基础的知识都不懂.记录下这天查资料的一些成果吧 TFT屏的接口模式主要有MCU模式、RGB模式、SPI模式 这是IC ILI9341的内部结构: RGB和MCU的区别: 这次的项目要求是用MCU模式,也就是并行模式驱动. 并行模式又分为8080和6800,两者就时序有区别. 为什么要用I80接口(MCU 8080),因为它操作简单,读写速度快,但是消耗GRAM(显存),一般只用在较小的屏
[单片机]
STM32 HRTIM Burst输出模式应用演示
有人使用STM32G474芯片的片上高精度定时器HRTIM,他想使用其输出功能的Burst Mode。但不知如何使用,想找找参考例程。我这里就使用STM32G474芯片做下应用演示。 我们知道,STM32家族中有多个系列或子系列芯片内置HRTIM定时器。这里以STM32G474芯片为蓝本简单介绍下HRTIM时基单元中输出功能的BURST MODE原理及实现过程。HRTIM时基单元中输出模块【或通道】可以有三种工作状态,即运行态、空闲态、出错异常态【RUN、IDLE和FAULT】。 【注 :上面截图来自STM32G4系列参考手册】 此处所要讲的Burst模式其实就是运行态和空闲态交替地实现输出的模式,即输出通道一会工作在运行状态
[单片机]
玩转STM32(3)使用模板工程
前面学习了安装什么样的软件,这时就已经具备开发嵌入式软件的基本条件。只要把前面的开发板电源使用USB的电源线插入5V的电源,然后把JLink的USB插头插入到开发的电脑,硬件就已经连接好了。如下图这样连接起来: 在这里一定要注意使用电源供电,而不能使用JLink的供电,因为CPU和外围元件的电压会不稳定,导致调试时,CPU可以下载和运行代码,但外围元件工作不正常的现象。这里都是使用USB接头,电源的USB接头可以插入到手机充电器,现在的手机充电器都能提供比较大的功率。同时手机充电器也随处可见,随时可以买得到,使用这样的电源是最方便的。 当你把硬件按这样接好之后,就可以进入软件开发了。但是这时候,你就感觉到迷茫了,到底怎么样
[单片机]
STM32 ADC基础内容
ADC,Analog-to-Digital Converter(模数转换器),其应用非常广泛,比如温度、湿度、压力、声音等传感器领域。 ADC的类型很多,STM32内部集成的ADC为逐次逼近型。STM32虽然是通用MCU芯片,但它内部集成的ADC也非常出色,不比一些专用ADC芯片差。 1 STM32 ADC 基础内容 STM32内部集成的ADC与型号有关,有16位、12位ADC,内部集成ADC多达4个,通道数多达40个,甚至更多。 1. ADC分辨率 分辨率决定了ADC的转换精度,按理说分辨率越高越好,但价格更贵。 STM32内部集成的ADC最高16位,2的16次方,即65536的分辨率。只有少数STM32才集成16位分辨
[单片机]
SPI(STM32)
SPI 是英语S erial Peripheral interface的缩写,是串行外围设备接口。是Motorola(摩托罗拉)首先在其MC68HCXX系列处理器上定义的。 SPI是一种高速的,全双工,同步的通信总线 Standard SPI, Dual SPI, Quad SPI Standard SPI: 标准SPI通常就称SPI,它是一种串行外设接口规范 CLK, /CS, DI, DO, /WP, /Hold 全双工模式,输入和输出可以同时进行(mosi,miso分别对应的是DI和DO) Dual SPI: CLK, /CS, IO0, IO1, /WP, /Hold 半双工模式,mosi和miso对应
[单片机]
Robomaster-stm32-PWM学习笔记(stm32控制pwm输出)
学习笔记: 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。 将通用 定时器 分为四个部分: 1-选择 时钟 2-时基电路 3-输入捕获 4-输出比较 实践1-pwm- led 闪烁 要求产生周期为200ms,占空比为50%的PWM 信号 来控制led灯。 1.cubemax配置 由原理图可知,led引脚复用为 ti m5 周期为200ms,占空比为50%,Tim5挂在APB1总线上,CLK =
[单片机]
如何用STM32让相对编码器说话?
▍编码器的由来和原理 若要对伺服系统中的电机进行高精度控制,需要准确的转子角度位置,这时候自然会想到,如果能张江转子每一圈进行细分,这样每次转多少角度便能精确知道。在这样的背景下,相对编码器就诞生了。 在网上找到下文这个图,很形象的表征了相对编码器的原理。 如图所示,在码盘上平均开出很多个等间距的槽,一段是LED灯发出信号,另一端是接收器接收信号。如果信号能穿过码盘,则接收信号为高电平,反之则为低电平。这样当转子转起来以后,就不断的处高低电平。这就是编码器基本原理。 可以看到这里有三个信号,A/B/Z,这时候就要想为什么要3个信号呢?如果仅仅对一圈做细分,命名一个信号就可以了。这就涉及到下面两个问题。 (1)如果是1个信号
[单片机]
stm32最小系统原理及结构组成
本文为大家带来stm32最小系统原理及结构组成的介绍。 stm32最小系统原理及结构组成----结构组成 1.晶振,至于大小由你单片机时钟周期要求而决定(用于计时,与两个电容并联使用,电容大小由你的晶振决定,一般用22pF) 2.复位电路(用于复位) 3.电源(用于供电,一般用电脑的USB口供电) 4.烧制程序的口(swim或者是jtag都可以,用于调试烧写仿真程序) STM32F103微控制器外部结构 STM32F103总线和存储器结构 stm32最小系统原理及结构组成----原理图
[单片机]