等待(Wait)模式: 停机(Halt)模式: 活跃停机(Active Halt)模式: 本文章仅讲述活跃停机模式配置与通过AWU中断的唤醒。 AWU的时间间隔取决于AWU_TBR寄存器的AWUTB[3:0]位的值与AWU_PAR寄存器的APR[5:0]位的值。 进入活跃停机模式,首先需要配置AWU。 在活跃停机模式中触发AWU中断,AWU_CSR的AWUF将会置1。 注意:
STM8S提供的可编程的电源管理
0、文章简介
1、AWU的时间间隔介绍
AWUTB
Time interval range
Interval range(fLS=128kHz)
APRDIV
0b0001
2/fLS – 64/fLS
0.015625 ms – 0.5 ms
2 to 64
0b0010
2×32/fLS – 2×64/fLS
0.5ms – 1.0 ms
32 to 64
0b0011
2×2×32/fLS – 22×64/fLS
1 ms – 2 ms
32 to 64
0b0100
22×2×32/fLS – 23×64/fLS
2 ms – 4 ms
32 to 64
0b0101
23×2×32/fLS – 24×64/fLS
4 ms – 8 ms
32 to 64
0b0110
24×2×32/fLS – 25×64/fLS
8 ms – 16 ms
32 to 64
0b0111
25×2×32/fLS – 26×64/fLS
16 ms – 32 ms
32 to 64
0b1000
26×2×32/fLS – 27×64/fLS
32 ms – 64 ms
32 to 64
0b1001
27×2×32/fLS – 28×64/fLS
64 ms – 128 ms
32 to 64
0b1010
28×2×32/fLS – 29×64/fLS
128 ms – 256 ms
32 to 64
0b1011
29×2×32/fLS – 210×64/fLS
256 ms – 512 ms
32 to 64
0b1100
210×2×32/fLS – 211×64/fLS
512 ms – 1024 ms
32 to 64
0b1101
211×2×32/fLS – 212×64/fLS
1.024 s – 2.048 s
32 to 64
0b1110
211×130/fLS – 211×320/fLS
2.080 s – 5.120 s
26 to 64
0b1111
211×330/fLS – 212×960/fLS
5.280 s – 30.720 s
11 to 64
APR
APRDIV
APR
APRDIV
APR
APRDIV
APR
APRDIV
00h
2
01h
3
02h
4
03h
5
04h
6
05h
7
06h
8
07h
9
08h
10
09h
11
0Ah
12
0Bh
13
0Ch
14
0Dh
15
0Eh
16
0Fh
17
10h
18
11h
19
12h
20
13h
21
14h
22
15h
23
16h
24
17h
25
18h
26
19h
27
1Ah
28
1Bh
29
1Ch
30
1Dh
31
1Eh
32
1Fh
33
20h
34
21h
35
22h
36
23h
37
24h
38
25h
39
26h
40
27h
41
28h
42
29h
43
2Ah
44
2Bh
45
2Ch
46
2Dh
47
2Eh
48
2Fh
49
30h
50
31h
51
32h
52
33h
53
34h
54
35h
55
36h
56
37h
57
38h
58
39h
59
3Ah
60
3Bh
61
3Ch
62
3Dh
63
3Eh
64
假设此时fLS=128kHz,需要的时间间隔为175ms,选择时间范围应为128 ms – 256 ms
则AWUTB[3:0]的值为0b1010。
APRDIV = 175 ms × 128kHz / 2AWUTB[3:0] – 1
= 0.175 s × 128000Hz / 29
= 43.75 ≈ 44
则APR[5:0]的值为2Ah。
2、AWU的配置
/** * @brief AWU Initialization Function * @param None * @retval None */ void _AWU_Init(void) { /* Initialization of AWU */ /* The delay corresponds to the time we will stay in Halt mode */ AWU_Init(AWU_TIMEBASE_30S); // 官方库共提供16档预设的唤醒中断触发时长与1档无唤醒中断,作为AWU_Init()的参数,它们分别是: // AWU_TIMEBASE_NO_IT:无自动唤醒中断 // AWU_TIMEBASE_250US,AWU_TIMEBASE_500US,AWU_TIMEBASE_1MS,AWU_TIMEBASE_2MS // AWU_TIMEBASE_4MS,AWU_TIMEBASE_8MS,AWU_TIMEBASE_16MS,AWU_TIMEBASE_32MS // AWU_TIMEBASE_64MS, AWU_TIMEBASE_128MS,AWU_TIMEBASE_256MS,AWU_TIMEBASE_512MS // AWU_TIMEBASE_1S,AWU_TIMEBASE_2S,AWU_TIMEBASE_12S,AWU_TIMEBASE_30S }
/** * @brief AWU Initialization Function * @param None * @retval None */ void _AWU_Init(void) { /* Initialization of AWU */ /* Set the TimeBase */ AWU->TBR &= (uint8_t)(~0x0F); AWU->TBR |= 0x0A; /* Set the APR divider */ AWU->APR &= (uint8_t)(~0x3F); AWU->APR |= 0x2A; /* Enable the AWU peripheral */ AWU->CSR |= 0x10; }
3、配置软件中断
AWU_CSR的AWUF置1,将进入INTERRUPT_HANDLER(AWU_IRQHandler, 1)中断函数中,通过读取AWU->CSR寄存器清除该标志位。/** * @brief Auto Wake Up Interrupt routine. * @param None * @retval None */ INTERRUPT_HANDLER(AWU_IRQHandler, 1) { /* In order to detect unexpected events during development, it is recommended to set a breakpoint on the following instruction. */ /* Clear AWU peripheral pending bit */ AWU_GetFlagStatus(); // AWU->CSR; }
4、低功耗可选项
主电压调试器关闭后,功耗将进一步降低。此时仅LSI时钟可用,且CPU唤醒时长增加。// 通过官方库"stm8s_clk"提供的函数关闭主电压调试器 /* Enable Slow Active Halt Wake Up Moed*/ CLK_SlowActiveHaltWakeUpCmd(ENABLE); /* Disable Slow Active Halt Wake Up Moed*/ // CLK_SlowActiveHaltWakeUpCmd(DISABLE); // 通过寄存器关闭主电压调试器 /* Enable Slow Active Halt Wake Up Moed*/ /* Set S_ACTHALT bit */ CLK->ICKR |= 0x20; /* Reset S_ACTHALT bit */ // CLK->ICKR &= (uint8_t)(~0x20);
活跃停机模式的默认FLASH低功耗模式为开启。此时功耗将降低,但FLASH唤醒时长增加。// 通过官方库"stm8s_flash"提供的函数控制FLASH低功耗模式 /* Set Flash Low Power Mode To Power Down */ FLASH_SetLowPowerMode(FLASH_LPMODE_POWERDOWN); /* Set Flash Low Power Mode To STANDBY */ //FLASH_SetLowPowerMode(FLASH_LPMODE_STANDBY); // 通过寄存器控制FLASH低功耗模式 /* Set Flash Low Power Mode */ /* Set Flash Low Power Mode To Power Down */ FLASH->CR1 &= (uint8_t)(~0x04); /* Set Flash Low Power Mode To STANDBY */ // FLASH->CR1 |= (uint8_t)(~0x04);
5、例程
void main(void) { /* 系统时钟配置; 外设配置; …… */ /* AWU configuration ---------------------------------------- */ _AWU_Init(); /* 低功耗可选项; */ /* enable interrupts ----------------------------------------- */ enableInterrupts(); while (1) { /* 业务代码; */ if(/* 进入低功耗条件成立 */) { FlagStatus flag_HaltHold = TRUE; } while (flag_HaltHold) { halt(); if(/* 唤醒条件成立 */) { flag_HaltHold = FALSE; } } } }
6、AWU寄存器简介
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算