STM8L探索套件学习笔记-低功耗模式(十二)
时间:11-24
来源:互联网
点击:
官方给的例程当中,使用PE6作为IDD_WAKUP,将系统从低功耗中唤醒,
STM8L有5种低功耗模式,降低功耗的方法还可以将系统时钟降低或者关闭没有使用的外设。
今天我们就使用U3这个14阶脉动进位计数器M74HC4060进行HALT模式唤醒,从原理图可以看到Q14脚输出的反向连接到T2模拟开关,控制PE6端口。因为经过两个反向器,使用Q14的逻辑等于PE6的逻辑。U3的时钟频率为30KHZ,Q14的脉冲周期为2的14次方除以30KHZ,约等于0.5s,也就是说Q14输出的脉冲是周期大约为1秒,占空比为1:1的方波。所以PE6的电平变化也是周期大约为1秒,占空比为1:1的方波。代码设计如下:
void main(void)
{
GPIO_Init(LED3_PORT,LED3_PIN,GPIO_Mode_Out_PP_High_Fast);
//输出低电平-高速10M
GPIO_Init(LED4_PORT,LED4_PIN,GPIO_Mode_Out_PP_High_Fast);
//输出低电平-高速10M
GPIO_Init(CNT_EN_PORT,CNT_EN_PIN,GPIO_Mode_Out_PP_High_Fast);
GPIO_Init(WAKEUP_PORT,WAKEUP_PIN,GPIO_Mode_In_FL_IT);//PE6
LCD_GLASS_Init();
LCD_GLASS_DisplayString("M74HC");
/* Enable Rising edge port PE6 for wake up conter */
//EXTI->CR2 = 0x10;
//上升沿或者下载沿都可以
EXTI_SetPinSensitivity(EXTI_Pin_6, EXTI_Trigger_Rising);
/* Enable Interrupts */
enableInterrupts();
GPIO_ResetBits(GPIOC,GPIO_Pin_4);//使能U3计数器
/* Infinite loop */
while (1)
{
GPIO_ToggleBits(LED3_PORT,LED3_PIN);
halt();//进入HALT模式,外部中断能够唤醒
}
}
程序开始初始化板上的LED3/LED4,LCD显示测试M74HC计数器的功能。PE6为上升沿触发。进入while后,进入HALT模式,CPU关闭,将不会执行。只有当外部中断发生后才能执行。
中断函数:
INTERRUPT_HANDLER(EXTI6_IRQHandler, 14)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
sim()
GPIO_ToggleBits(GPIOC,GPIO_Pin_7);
/* Clear Interrupt pending bit */
EXTI_ClearITPendingBit(EXTI_IT_Pin6);
rim()
}
现象是板上的LED3和4交替,周期1s闪烁,说明CPU在HALT模式和工作模式交替进行。
STM8L有5种低功耗模式,降低功耗的方法还可以将系统时钟降低或者关闭没有使用的外设。
今天我们就使用U3这个14阶脉动进位计数器M74HC4060进行HALT模式唤醒,从原理图可以看到Q14脚输出的反向连接到T2模拟开关,控制PE6端口。因为经过两个反向器,使用Q14的逻辑等于PE6的逻辑。U3的时钟频率为30KHZ,Q14的脉冲周期为2的14次方除以30KHZ,约等于0.5s,也就是说Q14输出的脉冲是周期大约为1秒,占空比为1:1的方波。所以PE6的电平变化也是周期大约为1秒,占空比为1:1的方波。代码设计如下:
void main(void)
{
GPIO_Init(LED3_PORT,LED3_PIN,GPIO_Mode_Out_PP_High_Fast);
//输出低电平-高速10M
GPIO_Init(LED4_PORT,LED4_PIN,GPIO_Mode_Out_PP_High_Fast);
//输出低电平-高速10M
GPIO_Init(CNT_EN_PORT,CNT_EN_PIN,GPIO_Mode_Out_PP_High_Fast);
GPIO_Init(WAKEUP_PORT,WAKEUP_PIN,GPIO_Mode_In_FL_IT);//PE6
LCD_GLASS_Init();
LCD_GLASS_DisplayString("M74HC");
/* Enable Rising edge port PE6 for wake up conter */
//EXTI->CR2 = 0x10;
//上升沿或者下载沿都可以
EXTI_SetPinSensitivity(EXTI_Pin_6, EXTI_Trigger_Rising);
/* Enable Interrupts */
enableInterrupts();
GPIO_ResetBits(GPIOC,GPIO_Pin_4);//使能U3计数器
/* Infinite loop */
while (1)
{
GPIO_ToggleBits(LED3_PORT,LED3_PIN);
halt();//进入HALT模式,外部中断能够唤醒
}
}
程序开始初始化板上的LED3/LED4,LCD显示测试M74HC计数器的功能。PE6为上升沿触发。进入while后,进入HALT模式,CPU关闭,将不会执行。只有当外部中断发生后才能执行。
中断函数:
INTERRUPT_HANDLER(EXTI6_IRQHandler, 14)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
sim()
GPIO_ToggleBits(GPIOC,GPIO_Pin_7);
/* Clear Interrupt pending bit */
EXTI_ClearITPendingBit(EXTI_IT_Pin6);
rim()
}
现象是板上的LED3和4交替,周期1s闪烁,说明CPU在HALT模式和工作模式交替进行。
STM8L探索套件学习笔记低功耗模 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)