STM32 不断进入串口中断问题 解决方法

发布者:自在逍遥最新更新时间:2018-06-08 来源: eefocus关键字:STM32  串口中断 手机看文章 扫描二维码
随时随地手机看文章

STM32 有时候会不断进入中断,解决方法如下

1.串口初始化配置时,需要打开ORE 溢出中断,如下红色代码所示

  1. void Usart_Init(void)  

  2. {  

  3.   

  4.   

  5.     GPIO_InitTypeDef GPIO_InitStructure;  

  6.     NVIC_InitTypeDef NVIC_InitStructure;  

  7.     USART_InitTypeDef USART_InitStructure;  

  8.       

  9.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);                          // 开启串口时钟  

  10.       

  11.     GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_1);  

  12.     GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_1);  

  13.       

  14.     GPIO_InitStructure.GPIO_Pin     = GPIO_Pin_9 | GPIO_Pin_10;  

  15.     GPIO_InitStructure.GPIO_Speed   = GPIO_Speed_50MHz;  

  16.     GPIO_InitStructure.GPIO_Mode    = GPIO_Mode_AF;  

  17.     GPIO_InitStructure.GPIO_OType   = GPIO_OType_PP;  

  18.     GPIO_InitStructure.GPIO_PuPd    = GPIO_PuPd_UP;  

  19.     GPIO_Init(GPIOA,&GPIO_InitStructure);  

  20.           

  21.   

  22.       

  23.     USART_InitStructure.USART_BaudRate = 57600;                     // 配置波特率为115200  

  24.     USART_InitStructure.USART_StopBits = USART_WordLength_8b;       // 配置数据长度为8  

  25.     USART_InitStructure.USART_StopBits = USART_StopBits_1;          //设置停止位  

  26.     USART_InitStructure.USART_Parity    = USART_Parity_No;          // 配置奇偶校验为NONE  

  27.     USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // 配置硬件流为NONE     

  28.     USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; // 打开Rx接收和Tx发送功能  

  29.   

  30.     USART_Init(USART1,&USART_InitStructure);                        // 配置  

  31.   

  32.       

  33.     USART_Cmd(USART1,ENABLE);     

  34.   

  35.     NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;               // 选择中断通道  

  36.     NVIC_InitStructure.NVIC_IRQChannelPriority = 2;                 // 抢断优先1  

  37.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                 // 使能中断  

  38.   

  39.     NVIC_Init(&NVIC_InitStructure);  

  40.       

  41.  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);                  // 打开中断  

  42.     USART_ITConfig(USART1, USART_IT_ORE, ENABLE);                  // 打开中断  

  43.   

  44.   

  45. }  


2.在中断中,检测溢出中断并作处理,代码如下所示


  1. void USART1_IRQHandler(void)  

  2. {  

  3.     u8 dat;  

  4.   

  5.  if (USART_GetITStatus(USART1, USART_IT_ORE) == SET)  

  6.     {  

  7.         USART_ClearITPendingBit(USART1,USART_IT_ORE);      

  8.         USART_ReceiveData( USART1 );  

  9.   

  10.     }  

  11.     if( USART_GetITStatus(USART1,USART_IT_RXNE) != RESET )              // 等价于if( !RI ) 检查串口数据是否已就位  

  12.     {  

  13.         USART_ClearITPendingBit(USART1,USART_IT_RXNE);  

  14.         dat = USART_ReceiveData( USART1 );  

  15.         uart_rec_buf[uart_len++]=dat;  

  16.         RX_TIM=UART_INIT_TIM;  

  17.           

  18.     }     

  19.   

  20. }  


这样就可以解决,串口不断进入中断的问题


关键字:STM32  串口中断 引用地址:STM32 不断进入串口中断问题 解决方法

上一篇:STM32F207Cube库函数USART中断接收
下一篇:STM32串口中断接收和中断发送

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

STM32单片机PS2遥控小车
电路原理图如下: STM32单片机源程序如下: #include led.h #include delay.h #include sys.h #include usart.h #include pstwo.h /********************************************************* 功能:通过PS2控制小车运动 作者:大海电子 时间:180531 硬件平台:STM32F103C8T6 时钟:8Mhz 硬件引脚分配: //手柄接口 DI=PB12; DO=PB13 ; CS=PB14; CLK=PB15; //L298N 电机驱动控制引脚 IN1=PA0;
[单片机]
<font color='red'>STM32</font>单片机PS2遥控小车
STM32调试步骤
调试前,首先跳线J9的2-3脚短接,跳线J4的右边两个脚短接,跳线J5短接,J8短接,J2的1-2短接,3-4短接。 将Jlink与学习板,USB延长线与学习板,串口延长线与学习板(或者USB转串口线与学习板)连接起来, 这时LED灯LED5,LED6都应该点亮,如果不亮,说明板子有问题。 打开串口助手,按照如下设置: 1、从桌面打开J-Flash ARM V4.02如图所示。 也可以按照如下顺序打开J-Flash ARM 。 “开始à程序àSEGGERàJ-Link ARM V4.02àJ-Flash ARM”,如下图所示。 2、打开J-Flash ARM后,先进行芯片选项设置,打开OptionsàProje
[单片机]
<font color='red'>STM32</font>调试步骤
STM32---按键学习
#include stm32f10x.h GPIO_InitTypeDef GPIO_InitStructure;//声明GPIO_InitStructure void LED_Init() { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//开GPIOA时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //
[单片机]
STM32之SPI的思考
选择了与硬件打交道,就得戒骄戒躁,踏踏实实,一步一步的走下去。可能因为一个非常小的问题,就导致你失败。失败不可怕,可怕的是不能静下心来去思考。我在公司第一次调试硬件,spi的通信,是stm32的硬件既有的通信接口。之前用51的io口模拟过i2c的,感觉spi相对来说更简单些,结果调试spi的读写花费了我3天的时间。stm32f0与网上关于stm32f1大量的例程还不一样,刚刚上市半年多,应该是,并且有几项设置是stm32f1没有的,这也正是关键的地方。你直接把他们的程序拿过来用,可能就卡死了,为什么?因为f0多了个fifo设置,fifo不设置,默认应该是half of 32 bits,当你只接收到8个bit时,rxne不会置位,程
[单片机]
基于ZigBee和STM32的室内智能照明系统的设计
随着生活水平的不断提高,人们对日常生活的无线化、网络化、智能化、节能化的需求越来越强烈,传统的照明控制系统已经无法满足人们对日常生活品质的需求。基于上述原因提出了一种基于ZigBee和STM32的室内智能照明系统的设计。 更多资讯,敬请关注大比特资讯http://www.big-bit.com/ 更多技术方案和互动,请访问大比特论坛http://bbs.big-bit.com 在人们的传统意识中,照明系统仅以照明为目的。传统的照明系统中主要的控制方式有手动控制方式和自动控制方式。其中手动控制方式简单、有效,但是过于依赖人工操作,并且控制相对分散,不能有效管理;自动控制方式主要是由时钟元件、光电元件或两者组合的方式来实现对照明设备的
[单片机]
基于ZigBee和<font color='red'>STM32</font>的室内智能照明系统的设计
STM32代码存储位置与MCUISP下载注意事项
最近做一个项目,在stm32内部一部分用来存储自己的代码,开辟出一段空间来用来存储FPGA代码。每次开机实现stm32往FPGA写入代码的功能。 向stm32某段空间写入代码的方法: (1)ST_LINK Utility软件 通过JTAG,连接后。载入FPGA的bin文件,改写Start address就可以将代码写入固定的区域。 当然可以用ST-LINK写入任意代码。 (2)用STMFlashDemo软件。 这个官方的串口下载软件,通过系统存储器进行下载。在之前的日志中提到过,不详说。 利用MCUISP下载的时候,会擦出整个芯片。 所以如果将一部分内容存到FLASH中比如(0x0807000~0x0807100),再
[单片机]
<font color='red'>STM32</font>代码存储位置与MCUISP下载注意事项
基于STM32的内部Flash读写操作
本文主要介绍STM32多种的内部Flash读写方式和读写长文件的功能函数怎样编写。阅读完本文可以使你能够正常的完成Flash读写操作。 介绍 STM32 FLASH 不同型号的 STM32,其 FLASH 容量也有所不同,最小的只有 16K 字节,最大的则达到了1024K 字节。本次实验选用的STM32 开发板是F103ZET6,其 FLASH 容量为 512K 字节,属于大容量产品(另外还有中容量和小容量产品),大容量产品的闪存模块组织如图 所示: STM32 的闪存模块由:主存储器、信息块和闪存存储器接口寄存器等 3 部分组成。 主存储器,该部分用来存放代码和数据常数(如 const 类型的数据)。对于大容量产品
[单片机]
基于<font color='red'>STM32</font>的内部Flash读写操作
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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