最近用到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;
}
上一篇:STM8L052低功耗模式
下一篇:STM8S存储器的读写操作
推荐阅读最新更新时间:2024-11-09 14:55
设计资源 培训 开发板 精华推荐
- 机智云Gokit3免费测评试用!用熟悉的方式,快速实现每一个想法!
- 下载有礼:2017年泰克亚太专家大讲堂第一期:大数据与云存储环境下的高速总线技术演进
- 直播已结束|TI Zigbee 3.0及多协议解决方案
- 文晔科技有奖直播:C2000在电机控制中的应用 等你来看!
- 如何用3个关键步骤,来确保下一代设计安全性,深入解读嵌入式设备DeepCover加密控制器,看视频答题赢好礼!
- 泰克直播:带您了解您所不知道的示波器使用技巧
- 有奖征集:推荐你用过或了解的好用的电源芯片
- 【有奖分享】MPS带您快速探究电源设计秘密
- 有奖直播:安世半导体先进 SiC MOSFET 助力提升 EV-Charger 和 OBC 应用能效