STM32缺陷之一:串口中断标志位缺陷

发布者:SparklingStar22最新更新时间:2018-06-09 来源: eefocus关键字:STM32  串口中断  标志位 手机看文章 扫描二维码
随时随地手机看文章

    根据小道消息,M3内核是有缺陷的,但是这种缺陷不会在大会上想广大群众透露的。我用的是M3内核的stm32,我来寻找一些缺陷。


    今天找到的是串口中断标志位缺陷。


    我是做四轴飞行器的,没有买遥控器,而是用的无线串口,一开始的想法是stm32接收到串口来的数据后,进入串口中断服务函数,再比对发来的数据进行接下来的动作。


    一开始的程序是没有问题的,简单点吧,串口接收到数据后,让LED转换状态。   


void USART2_IRQHandler(void)  

{  

  

    if(USART_GetITStatus(USART2, USART_IT_RXNE) ==SET)     

    {   

        USART_ClearFlag (USART2,USART_FLAG_RXNE);        

        LED0=!LED0;  

    }     

}  

    但是串口中断函数和定时器函数优先级不好弄,所以我决定用串口中断查询法,在循环中查询相应的中断标志位。我直接在刚才的程序里更改,结果是错误的。


while(1)  

  

   if(USART_GetITStatus(USART2, USART_IT_RXNE) ==SET)     

{   

    USART_ClearFlag (USART2,USART_FLAG_RXNE);       

    LED0=!LED0;  

}     

纠结了两天,总算查出原因了,如果只用查询法,就不能配置nvic,或者把NVIC_IRQChannelCmd配制成DISABLE。


void U2NVIC_Configuration(void)  

{  

        NVIC_InitTypeDef NVIC_InitStructure;   

        NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;  

        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;  

        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  

        NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE;  

        NVIC_Init(&NVIC_InitStructure);  

}  

    这个缺陷确实有点。。。其实也无所谓,谁用查询法,还会去配置nvic?可能是我想多了,不过我确实要吐吐槽!


关键字:STM32  串口中断  标志位 引用地址:STM32缺陷之一:串口中断标志位缺陷

上一篇:STM32 串口中断总结
下一篇:stm32 USART中断标志位什么时候清除

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

基于STM32的多种printf用法
在调试代码的时候,最常用的就是使用printf函数来输出一些打印信息,提示自己代码的执行情况。 如果你的UART串口不够用,还要用printf,此时该怎么办? 解决方法:使用SWO/SWV。 SWO:Serial Wire Output,串行线输出 SWD:Serial Wire Viewer,串行线查看器 一、常见printf输出 1.UART打印 2.Keil MDK-ARM Viewer输出 3.IAR EWARM终端输出 4.ST-LINK Utility SWV输出 二、UART映射printf 使用硬件UART串口映射,实现printf打印输出。 #include stdio.h int fp
[单片机]
【note】stm32 keilMDK出现warning: function XX declared implicitly
warning: #223-D: function CLR_TX_DATA declared implicitly 解决方法。 以上面错误提示为例: 1 找到定义函数 CLR_TX_DATA() 的源文件 ,这里假设在 a.c 中; 2 在 a.h 中最后声明一下 CLR_TX_DATA(),即添加(假设此函数无返回值无参数) void CLR_TX_DATA(void); 3 再次编译 刚才的 warning 即可消失。 参考自 KEIl编译STM32的时候,出现了一点问题!! 程序编译的时候通过了!!但是显示警告: test.c(45): warning: #22
[单片机]
stm32 stm8 I2C相关总结
一、I2C协议简介 I2C是两线式串行总线,用于连接微控制器及其外围设备。两根信号线分别是: 时钟信号线SCL和数据信号线SDA。 二、I2C总线传输时序 2.1 I2C传输协议的三种信号 I2C在数据传输过程中有三种信号类型,分别是:起始信号、结束信号和应答信号。 ①起始信号:在时钟信号SCL为高电平时,数据线SDA由高电平跳变为低电平,开始传输数据; ②结束信号:在时钟信号SCL为高电平时,数据线SDA由低电平跳变为高电平,数据传输结束; ③应答信号:接收数据的IC在接收8位(一个字节)数据后,向发送数据的IC发出特定的低电平信号,表示已经收到数据。准确的说法是:发送设备在时钟信号SCL的8个脉冲的驱动下发送了8个bit,即一
[单片机]
<font color='red'>stm32</font> stm8 I2C相关总结
STM32 USB设计--硬件篇
STM32芯片内部集成了USB外设,大大减轻了USB电路的设计负担,只需设计USB接口电路,就可以实现基于STM32芯片的电路板的USB通信设计。(本文将具体讲述基于STM32F103RBT6芯片的USB设计)本文为硬件篇。 首先,我们来认识一下STM32F103RBT6芯片。 其中USB相关引脚为PA11(D-),PA12(D+)引脚。就是通过这两个引脚实现STM32F103RBT6的USB通讯。 图1 STM32F103RBT6芯片引脚图 其次,我们简单来认识一下USB的构造(以A型公口、B型母口为例) 图2 USB A型公口 图3 USB B型母口 表1 USB接口引脚说明 1 VCC(+
[单片机]
<font color='red'>STM32</font> USB设计--硬件篇
STM32 通用定时器 介绍
STM32的定时器是个强大的模块,定时器使用的频率也是很高的,定时器可以做一些基本的定时,还可以做PWM输出或者输入捕获功能。 时钟源问题: 名为TIMx的有八个,其中TIM1和TIM8挂在APB2总线上,而TIM2-TIM7则挂在 APB1总线上。其中TIM1&TIM8称为高级控制定时器(advanced control timer).他们所在的APB2总线也比APB1总线要好。APB2可以工作在72MHz下,而APB1最大是36MHz。 定时器的时钟不是直接来自APB1或APB2,而是来自于输入为APB1或APB2的一个倍频器。 下面以定时器2~7的时钟说明这个倍频器的作用:当APB1的预分频系数为1时,这个
[单片机]
<font color='red'>STM32</font> 通用定时器 介绍
解决STM32开启定时器时立即进入一次中断程序问题
配置STM32定时器时,定时器中断使能、定时器使能、清除更新中断标志位,三者不同顺序程序执行时有不同效果,具体如下: TIM_ClearITPendingBit(TIM1, TIM_IT_Update); //清除更新中断请求位 TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE); //使能定时器1更新中断 TIM_Cmd(TIM1, ENABLE); //启动定时器 (1)。。。。。。不会立即进入更新中断程序。 TIM_ClearITPendingBit(TIM1, TIM_IT_Update);//清除更新中断请求位 TIM_Cmd(TI
[单片机]
stm32 串口9位数据
STM32可以一次发送9位数据,在此做一下简单说明。 一般不带奇偶校验位的串口数据:起始位(1)+数据位(8)+停止位(1) 带奇偶校验位的串口数据:起始位(1)+数据位(8)+校验位(1)+停止位(1) 如果数据位为9位,即:起始位(1)+数据位(9)+停止位(1) 9位数据STM8串口的配置:UART1_DeInit();//波特率9位1位停止位无奇偶校验同步时钟关发送接收使能 UART1_Init((u32)1000000,UART1_WORDLENGTH_9D,UART1_STOPBITS_1,UART1_PARITY_NO,UART1_SYNCMODE_CLOCK_DISABLE,UART1_MODE_TXRX_ENAB
[单片机]
STM32 12864串行驱动
有些12864没有以下全部功能: DDRAM:(Data Display Ram),数据显示RAM,往里面写啥,屏幕就会显示啥。 CGROM:(Character Generation ROM),字符发生ROM。里面存储了中文汉字的字模,也称作中文字库,编码方式有GB2312(中文简体)和BIG5(中文繁体)。 CGRAM:(Character Generation RAM),字符发生RAM,,12864内部提供了64×2B的CGRAM,可用于用户自定义4个16×16字符,每个字符占用32个字节。 GDRAM:(Graphic Display RAM):图形显示RAM,用于绘图,往里面写啥,屏幕就会显示啥,往GDRAM中写的数据是
[单片机]
<font color='red'>STM32</font> 12864串行驱动
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

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

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

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