STM32连续进中断问题+

发布者:cloudsousou6最新更新时间:2018-06-09 来源: eefocus关键字:STM32  中断问题 手机看文章 扫描二维码
随时随地手机看文章

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


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


void Usart_Init(void)  

{  

  

  

    GPIO_InitTypeDef GPIO_InitStructure;  

    NVIC_InitTypeDef NVIC_InitStructure;  

    USART_InitTypeDef USART_InitStructure;  

      

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

      

    GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_1);  

    GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_1);  

      

    GPIO_InitStructure.GPIO_Pin     = GPIO_Pin_9 | GPIO_Pin_10;  

    GPIO_InitStructure.GPIO_Speed   = GPIO_Speed_50MHz;  

    GPIO_InitStructure.GPIO_Mode    = GPIO_Mode_AF;  

    GPIO_InitStructure.GPIO_OType   = GPIO_OType_PP;  

    GPIO_InitStructure.GPIO_PuPd    = GPIO_PuPd_UP;  

    GPIO_Init(GPIOA,&GPIO_InitStructure);  

          

  

      

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

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

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

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

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

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

  

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

  

      

    USART_Cmd(USART1,ENABLE);     

  

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

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

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

  

    NVIC_Init(&NVIC_InitStructure);  

      

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

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

  

  

}  


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


void USART1_IRQHandler(void)  

{  

    u8 dat;  

  

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

    {  

        USART_ClearITPendingBit(USART1,USART_IT_ORE);      

        USART_ReceiveData( USART1 );  

  

    }  

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

    {  

        USART_ClearITPendingBit(USART1,USART_IT_RXNE);  

        dat = USART_ReceiveData( USART1 );  

        uart_rec_buf[uart_len++]=dat;  

        RX_TIM=UART_INIT_TIM;  

          

    }     

  

}  


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


关键字:STM32  中断问题 引用地址:STM32连续进中断问题+

上一篇:串口接收中断和连续发送的矛盾!
下一篇:关于STM32发送中断的一些问题

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

STM32的Systick系统滴答定时器
Systick :系统心跳定时器,提供系统节拍 裸机程序中可作为独立的延时定时器 用途: 1.产生操作系统的时钟节拍 2.便于不同处理器之间程序移植 SysTick定时器被捆绑在NVIC中,异常号15 3.作为一个闹铃测量时间用于测量时间, 但当处理器在调试期间被喊停(halt)时,则SysTick定时器亦将暂停运作 它有四个寄存器 STK_CSR, 0xE000E010 -- 控制寄存器 STK_LOAD, 0xE000E014 -- 重载寄存器 STK_VAL, 0xE000E018 -- 当前值寄存器 STK_CALRB, 0xE000E01C -- 校准值寄存器 stm32的时钟源 选择外部时钟源时
[单片机]
<font color='red'>STM32</font>的Systick系统滴答定时器
stm32 中断服务函数是如何进入的
今天在看stm32的中断,一时间不理解stm32主函数是如何进入中断函数的,按C编程的理解,会有个特定的入口之类的,但是看demo过程中没有发现入口。 以串口中断服务函数void USART1_IRQHandler(void) 为例,首先用到串口中断,需要先设定串口中断初始化以及串口初始化,另外void USART1_IRQHandler(void) 中断服务函数也应该写好。 发现在stm32的启动文件startup_stm32f10x_md.s中写到 DCD USART1_IRQHandler 其中DCD是一条数据定义伪指令,用于分配一片连续的字存储单元并用指定的数据初始化。 库里定义 #define USART1 ((
[单片机]
STM32 串行通讯(part1)
1.说在前面 1.今天和几个朋友一起讨论了一下32的知识,有一群朋友一起努力,真好! 2.由于在51上面学习过串口通讯的知识,所以在32上复习并且深入吧 2.两种通信方式的介绍 1.并行通信 1-1.原理:数据各位之间同时传输 1-2优点:速度快 1-3.缺点:占用引脚资源多 2.串行通信 2-1.原理:数据按照位来传输 2-2.优点:占用引脚资源少 2-3.缺点:速度相对较慢 3.工作模式介绍 1.单工模式:在一个方向上进行运输 2.半双工模式:允许数据在两个方向上进行运输,但是同时间只能在一个方向上运输 3.双工模式:允许在两个方向上进行传输,发送方和接受方有着独立的
[单片机]
<font color='red'>STM32</font> 串行通讯(part1)
STM32嵌入式入门必看之文章
为什么要写这篇文章呢?这是一篇关于嵌入式入门的文章,因为我在进入嵌入式这个领域之前,也是遇到过非常多非常多的困难,所以呢,希望写下这篇文章,让大家看看少走弯路。 首先,我打算先列举一下大家问得最多的几个问题,然后我们一起由问题切入进行一些讨论。 问题1:我是学单片机好还是直接学STM32好??? 问题2:STM32如何才能快速入门? 问题3:为什么是STM32呢?为什么不是ARM9,ARM11呢? 下面我将逐个答复 首先问题1:我是单片机好还是直接学STM32好呢? 答:首先我们谈下目的,你学习的最终目的是能够开发产品或者成为项目经理;而目前市场上的单片机都基本用C语言了,用汇编进行开发的项目已经非常少了 在硬件接
[单片机]
STM32—RTC
什么是RTC ? RTC:实时时钟(Real-Time Clock),利用RTC可以实现产品的精确计时,比如平时用的笔记本电脑、电子日历等都有RTC模块,当主电源断电时,RTC的模块用电池来供电,继续进行计时。STM32中的RTC和定时器有点类似,有一个32位的计数器,可以计数2的32次方,大约可以计时136年。 RTC的结构框图 RTC的时钟源(STM32L1系列,其它系列的芯片时钟源会略有不同,但都是这三类): (1) LSE 32.768kHz (2)HSE,最大1Mhz (3)LSI,内部低速时钟,L1系列是37k,F2系列是32K,F4系列是40K,频率不一样,预分频值的设定也不一样。 RT
[单片机]
<font color='red'>STM32</font>—RTC
STM32学习之:GPIO最简单操作步骤
需用到的 .c 库函数为 stm32f10x_gpio.c 和stm32f10x_rcc.c 1. 启动相应Port x的RCC(复位始终控制) RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx, ENABLE); x可以是A到G , GPIO都由APB2(高速外设)时钟控制 2. GPIO初始结构中的三个参数赋值(该结构名需程序前定义: GPIO_InitTypeDef GPIO_InitStructure; ) 三个参数分别为 引脚:GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin
[单片机]
STM32通用定时器(TIM2-5)基本用法
STM32的定时器是个强大的模块,定时器使用的频率也是很高的,定时器可以做一些基本的定时,还可以做PWM输出或者输入捕获功能。从系统框架图下看,名为TIMx的有八个,其中TIM1和TIM8挂在APB2总线上,而TIM2-TIM7则挂在APB1总线上。其中TIM1&TIM8称为高级控制定时器(advanced control timer).他们所在的APB2总线也比APB1总线要好。APB2可以工作在72MHz下,而APB1最大是36MHz。 由上图可知,当APB1 的预分频系数为1 时,这个倍频器不起作用,定时器的时钟频率等于APB1 的频率;当APB1的预分频系数为其它数值(即预分频系数为2、4、8 或16)时,这个
[单片机]
<font color='red'>STM32</font>通用定时器(TIM2-5)基本用法
STM32 RTC实时时钟(二)
上次实验完成了对实时时钟的基本功能——计时的实验,这次在计时的基础上对RTC的可编程闹钟的功能进行测试。 RTC 单元提供两个可编程闹钟,即闹钟 A 和闹钟 B。 可通过将 RTC_CR 寄存器中的 ALRAE 和 ALRBE 位置 1 来使能可编程闹钟功能。如果日历亚秒、秒、分钟、小时、日期或日分别与闹钟寄存器RTC_ALRMASSR/RTC_ALRMAR 和RTC_ALRMBSSR/RTC_ALRMBR 中编程的值相匹配,则 ALRAF 和 ALRBF 标志会被置为1。可通过 RTC_ALRMAR 和 RTC_ALRMBR 寄存器的 MSKx 位以及 RTC_ALRMASSR 和RTC_ALRMBSSR 寄
[单片机]
<font color='red'>STM32</font> RTC实时时钟(二)
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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