官方给的例程当中,使用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 探索套件 学习笔记 低功耗模式
引用地址:
STM8L探索套件学习笔记-低功耗模式(十二)
推荐阅读最新更新时间:2024-03-16 14:40
STM8L IAP升级过程记录
STM8L IAP升级 芯片:STM8LXXX 通讯方式:SPI IDE: IAR for STM8 工作需求,需要实现基于SPI通信的IAP升级,百度了一些资料,爬过了一些坑,现在测试升级ok,因此写篇笔记记录一下整个过程,以下便是整个过程,纯属个人记录,难免有不到的地方,如有错误,麻烦指出。 一、介绍 1) IAP简介 所谓的IAP即应用程序中编程(In-application programming),即可以在产品出厂后,更新程序。既然可以更新程序,那么就要有程序负责这部分功能,这个程序就叫做BootLoader,而被更新的程序就叫做Application. 2)官方BooLoader 如果只是想使用这个功能,而不用自己编写
[单片机]
51单片机学习笔记———10.中断机制
中断 单片机的中断系统是最基础也是最重要的部分,博主在学习这个的时候踩到了很多的坑,于是写下这篇笔记来整理一下自己的思路。 中断涉及的内容: 中断源: C51单片机有5个中断源,C52单片机有6个中断源: 由于多出来的那个中断源不常用,所以我们在这里只介绍C51单片机的中断系统: 8051有3个内部中断源T0,T1,串行口,2个外部中断源INT0,INT1 中断整体结构: 与中断有关的寄存器:
[单片机]
stm32学习笔记(一)点亮LED
#include stm32f10x.h #include delay.h void Delay(u32 count) { u32 i=0; for(;i count;i++); } int main(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能PA delay_init(); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //LED0-- PA.8 端口配置 GPIO_Ini
[单片机]
TQ2440 学习笔记—— 31、移植U-Boot【U-Boot 的启动过程第二阶段源码分析】
二、U-Boot第二阶段代码分析 U-Boot 第二阶段流程图 移植U-Boot 的主要工作在于对硬件的初始化、驱动,所以下面的重点放在硬件的操作上。 (1)初始化本阶段要使用到的硬件设备 最主要的是设置系统时钟、初始化串口,只要这两个设置好了就可以从串口看到打印信息。 board_init 函数设置MPLL、改变系统时钟,它是开发板相关的函数,在board/EmbedSky/EmbedSky.c 中实现。 board_init 函数还保存了机器类型ID,这将在调用内核时传给内核代码如下: 串口的初始化函数主要是 serial_init,它设置 UART 控制器,是CPU 相关的函数,在cpuarm92
[单片机]
STM32学习笔记(四)---RCC
RCC: Reset Clock Control 复位和时钟控制器 RCC时钟框图—时钟树 系统时钟 对应的是图中黄色部分,下面的数字标号对应上面的红色标号1-6 1.HSE高速外部时钟信号 HSE是高速的外部时钟信号,可由有源晶振或无源晶振提供。 当使用有源晶振时,时钟从OSC_IN引脚进入,OSC_OUT引脚悬空。 当使用无源晶振时,时钟从OSC_IN和OSC_OUT进入,并且要配谐振电容。 注意:当HSE故障时候,不仅HSE会被关闭,PLL也会被关闭,此时高速的内部时钟信号HSI会作为备用的系统时钟,直到HSE回复正常,HSI=16M。 2.锁相环PLL PLL的主要作用是对时钟进行倍频,然后把时钟输
[单片机]
STM8学习笔记(一) 建立第一个工程
按照所学教程(青风电子)建立第一STM8工程,出现如下错误。 出现:Fatal Error : cannot open source file stm8s_gpio.h D:stm8testdriverled.h 16 找不到头文件。 解决:修改头文件路径。原路径为: 原路径为: $PROJ_DIR$..libinc $PROJ_DIR$..libsrc $PROJ_DIR$..user $PROJ_DIR$..\driver 修改为:$PROJ_DIR$..libinc $PROJ_DIR$libsrc $PROJ_DIR$user $PROJ_DIR$driver 因为我将工程文件建立在整个工程文件
[单片机]
学习笔记——FreeRTOS任务的创建(动态方法)
学习了任务的相关知识后,在MDK5中以STM32F407为开发板尝试任务的创建和删除。 任务创建有两种方式分别为动态创建和静态创建,分别通过调用vTaskcreat()和vTaskcreat_static()来创建。其区别是动态创建任务的堆栈由系统分配,而静态创建任务的堆栈由用户自己传递。 动态创建任务的原型 其中各个参数:pxTaskCode 任务函数(由用户自己编写的函数,一般为一个无限循环) pcName 任务名(用于追踪和调试,最大长度不超过configMAX_TASK_NAME_LE
[单片机]
cortex M3S811学习笔记-GPIO-INT
首先是通用IO口,不管学什么单片机,IO口都是最重要和最好学的。重要是因为他是单片机与处围器件的接口,同样也是我们通常所说的人机接口,好学是因为它的控制容易,无非就是使能端口,设方向,然后就是写数据或是读数据了(根据你设的方向而定),这款超强的arm核的32位的小东西的IO口也有不同之处,毕竟是ARM核,IO的寄存器也丰富了不少。下面就来看看与IO口有关的函数。 1.按顺序来,先使能IO口。只有使能了他才能用,所以当然是第一步了。 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA) 这就是使能A端口函数,即A端口可以用了,他的大门向你敞开了 。 A端口不是在物理特征上有6个脚吗?GPIOA就
[单片机]