stm8l051 halt之后外部中断唤醒问题

发布者:水云间梦最新更新时间:2019-12-05 来源: elecfans关键字:stm8l051  halt  外部中断  唤醒问题 手机看文章 扫描二维码
随时随地手机看文章

最近用到stm8l051 halt,在halt之后开启了外部中断,有时灵,有时不灵,设置下降沿触发,但是按键(低有效)放开了才会从HALT退出,最后发现在进去外部中断的时候一直在外部中断里面不退出。


在外部中断程序里面把端口的外部中断和端口使能的外部中断功能关闭,问题解决,可以在下降沿从halt退出。


1、开启halt,其他代码省略,只贴halt部分:  


  /* 禁止TIM3 */

    TIM3->SR1 = (uint8_t)(~(uint8_t)TIM3_IT_Update);

    CLK_PeripheralClockConfig(CLK_Peripheral_TIM3, DISABLE);    

 TIM3_ITConfig(TIM3_IT_Update, DISABLE);  

 TIM3_Cmd(DISABLE);

 

 if(Halt.wakeupFlag == 0)

 {

  

  POWER433MOFF;

  halt();

 }

 Halt.wakeupFlag = 0; 

 Si4432PortReset();

 MCUTXLEDOFF; 

 POWER433MON;

 //唤醒  

 EXTI->SR1 = 0Xff;

 EXTI->SR2 = 0Xff; 

 GPIOA->CR2  = 0x00;     

 GPIOB->CR2  = 0x00;  

 GPIOD->CR2  = 0x00;  

 GPIOE->CR2  = 0x00;  

 Set_X_InputPullHigh(); 


2、stm8l15x_it.c里面:


/**

  * @brief External IT PIN6 Interrupt routine.

  * @param  None

  * @retval None

  */

INTERRUPT_HANDLER(EXTI6_IRQHandler,14)

{

    /* In order to detect unexpected events during development,

       it is recommended to set a breakpoint on the following instruction.

    */

 Halt.wakeupFlag = 1;                 //halt唤醒标志

 EXTI_ClearITPendingBit(EXTI_IT_Pin6);             //清外部中断6

 EXTI->SR1 = 0Xff;                                               //清端口的外部中断标志

 EXTI->SR2 = 0Xff; 

 GPIOA->CR2  = 0x00;                                        //清端口的外部中断功能

 GPIOB->CR2  = 0x00;  

 GPIOD->CR2  = 0x00;  

 GPIOE->CR2  = 0x00; 

}

关键字:stm8l051  halt  外部中断  唤醒问题 引用地址:stm8l051 halt之后外部中断唤醒问题

上一篇:STM8L052低功耗模式
下一篇:STM8S存储器的读写操作

推荐阅读最新更新时间:2024-11-09 14:55

MSP432笔记——按键中断
GPIO按键外部中断 所用板卡 MSP432P401R LaunchPad 按键电路图 按键连接GPIO P1.1 P1.4 按键按下时,对应IO变化为低电平,按键必须使用上拉电阻 程序编写 使用库函数 driverLib main中需要的步骤 { 设置IO输入/输出方向,带上拉电阻的输入模式 清除中断标识位,在配置时就需要清除标志位 设置中断触发边沿,上升沿/下降沿 使能GPIO中断 使能总中断(3个中断函数) } main源码 int main(void) { /* Stop Watchdog */ MAP_WDT_A_holdTimer(); //GPIO Interrupt test
[单片机]
MSP432笔记——按键中断
STM32库函数详解----(外部中断/事件控制器 EXTI
1.void EXTI_DeInit (void) 函数解释:将EXTI外设寄存器重置为默注释。RCC_APB2PeriphResetCmd参数中没有EXTI外设的的宏,该外设重置采取的是直接向寄存器赋默认值的操作。 例子:EXTI_DeInit ( ); 2.void EXTI_Init (EXTI_InitTypeDef*EXTI_InitStruct) 函数解释:根据EXTI_InitStruct结构体中所配置的参数来初始化外设EXTI寄存器。结构体中模式成员设置了被使能线路是事件请求还是中断请求。 例子:EXTI_Init (&EXTI_InitStruct); EXTI_Line: EXTI_
[单片机]
STM32F103C8T6使用外部中断法和输入捕获法进行编码器测速
01 前言 如果我们想对 电机 进行速度或者转角的精确控制,需要使用到很多 算法 ,比如非常经典的 PI D控制算法,或者一些只能算法,但这些算法都需要 传感器 来提供转速或转角的反馈值,对于电机来说, 编码器 是非常流行并且实用的电机配套传感器,本文使用 STM32 F103C8T6+L298N+MG513P30电机进行直流电机的编码器测速。 02 编码器原理 1.分类 光电 式编码器的精准度比霍尔式要高,但是由于它需要 红外 线发生器和 接收器 ,相对来说造价要贵一些。现在我们比较常用的是霍尔式增量编码器,有很多电机都会自带编码器。 2.测速方法分类 (1)M法测速 编码器输出的脉冲个数代表了位置,那么单位时间里的
[单片机]
STM32F103C8T6使用<font color='red'>外部中断</font>法和输入捕获法进行编码器测速
stm32 EXTI对应的中断函数
EXTI0_IRQChannel 表示的是外部中断线EXTI0对应的中断函数。 以STM32F103VB系列为例,100pin, 一般我们通常使用的IO对应外部中断线如下: PA0,PB0,PC0,PD0,PE0 对应的是EXTI0中断线; 以此类推 到PA15,PB15,PC15,PD15,PE15对应EXTI5中断线。 EXTI0对应的中断函数为EXTI0_IRQChannel; EXTI1对应的中断函数为EXTI1_IRQChannel; EXTI2对应的中断函数为EXTI2_IRQChannel; EXTI3对应的中断函数为EXTI3_IRQChannel; EXTI4对应的中断函数为EXTI4_IRQChannel; E
[单片机]
STM32中断过程详解
对于 STM32 讲(还是以Timer2例),外部中断通道位置 28(35 号优先级)是给外部设备 TIME2 的,但 TIME2本身能够引起中断的中断源或事件有好多个,比如更新事件(上溢/下溢) 、输入捕获、输出匹配、DMA 申请等。所有TIME2 的中断事件都是通过一个 TIME2 的中断通道向 STM32 内核提出中断申请,那么 STM32 中如何处理和控制 TIME2 和它众多的、不同的、中断申请呢? 1.因为cortex_m3 内核对于每一个外部中断通道都有相应的控制字和控制位,用于单独的和总的控制该中断通道。它们包括有: 中断优先级控制字:PRI_n(前面有提到过) 中断允许设置位:在 ISER 寄存器中 中断允许
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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