专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
STM8L152C6使用TIM2的Update事件无法唤醒CPU
2019-07-14 15:20
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
10852
8
1477
使用STM8L152C6的disovery
开发板
,想要在Low power下,使用
ti
M2的Update事件唤醒CPU。我初始化了TIM2,只更改了官方工程中的LPR_Ram函数,但是不能够唤醒
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
butterflydw
1楼-- · 2019-07-14 22:12
定时器2初始化部分:
void ext_TIM2_Config(uint8_t mode)
{
CLK->PCKENR1 |= 0x1; // tim2
TIM2->CR1 = 0x00;
if(mode == 0)
{
//CLK:8MHz 1Hz
TIM2->PSCR = 0x7;
TIM2->CNTRH = 0;
TIM2->CNTRL = 0;
TIM2->ARRH = 62500u >> 8;
TIM2->ARRL = 62500u & 0xFF;
TIM2->IER |= 0x1; //允许中断
}
else
{
//CLK:38K 1Hz
TIM2->PSCR = 0x0;
TIM2->CNTRH = 0;
TIM2->CNTRL = 0;
TIM2->ARRH = 38000u >> 8;
TIM2->ARRL = 38000u & 0xFF;
TIM2->IER &= ~0x1; //不允许中断
//TIM2->IER |= 0x1;
}
#ifdef _COSMIC_
#pragma section (LPRUN)
void LPR_Ram(void)
#endif
#ifdef _RAISONANCE_
void LPR_Ram(void) inram
#endif
#ifdef _IAR_
#pragma location="MY_RAM_FUNC"
void LPR_Ram(void)
#endif
{
#if 0
uint8_t i = 0;
/* To reduce consumption to minimal
Swith off the Flash */
FLASH->CR1 = 0x08;
while(((CLK->REGCSR)&0x80)==0x80);
/* Swith off the Regulator*/
CLK->REGCSR = 0x02;
while(((CLK->REGCSR)&0x01)==0x01);
/* Set trigger on GPIOE pin6*/
WFE->CR2 = 0x04;
GPIOE->CR2 = 0x44;
for (i=0; i<100; i++);
/* To start counter on falling edge*/
GPIO_LOW(CTN_GPIO_PORT,CTN_CNTEN_GPIO_PIN);
/*Wait for end of counter */
wfe();
GPIOC->ODR ^= 0x80;
EXTI->SR1 |= 0x40;
WFE->CR2 = 0x00;
//Switch on the regulator
CLK->REGCSR = 0x00;
while(((CLK->REGCSR)&0x1) != 0x1);
#else
uint8_t i;
FLASH->CR1 = 0x08;
while(((CLK->REGCSR)&0x80)==0x80);
CLK->REGCSR = 0x02;
while(((CLK->REGCSR)&0x01)==0x01);
// -------------------------------------------------------
WFE->CR1 = 0x01; // tim2 wakeup update
CLK->PCKENR1 |= 0x1;
TIM2->CR1 |= 0x1;
//使能唤醒
//for(i = 0;i < 100;i++);
wfe();
GPIOC->ODR ^= 0x80;
//禁止唤醒
TIM2->SR1 &= ~0x1;
WFE->CR1 = 0x00;
//---------------------------------------------------------
//Switch on the regulator
CLK->REGCSR = 0x00;
while(((CLK->REGCSR)&0x1) != 0x1);
#endif
}
加载中...
nvhyfwe
2楼-- · 2019-07-15 04:05
精彩回答 2 元偷偷看……
加载中...
zhangminmin
3楼-- · 2019-07-15 10:03
将CPU从从WFE模式唤醒有两个途径:中断或者wakeup事件。
加载中...
jenny042
4楼-- · 2019-07-15 11:48
RM0031中描述,由中断唤醒,中断执行完毕后会回到WFE模式。
加载中...
c1441424
5楼-- · 2019-07-15 15:55
即使使用事件唤醒,也要执行TIM2->IER |= 0x1; //允许中断
加载中...
kszdj113
6楼-- · 2019-07-15 18:11
到事件后,无需再判断FLASH是否准备好,无需再执行while(((CLK->REGCSR)&0x80) != 0x80);
加载中...
1
2
下一页
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
STM32开发板免费用活动
7 个回答
stm32 处理 DHT11占用太多时间,大家程序是怎么设计的
8 个回答
分享一个STM32单片机做的离线编程器代码
9 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
void ext_TIM2_Config(uint8_t mode)
{
CLK->PCKENR1 |= 0x1; // tim2
TIM2->CR1 = 0x00;
if(mode == 0)
{
//CLK:8MHz 1Hz
TIM2->PSCR = 0x7;
TIM2->CNTRH = 0;
TIM2->CNTRL = 0;
TIM2->ARRH = 62500u >> 8;
TIM2->ARRL = 62500u & 0xFF;
TIM2->IER |= 0x1; //允许中断
}
else
{
//CLK:38K 1Hz
TIM2->PSCR = 0x0;
TIM2->CNTRH = 0;
TIM2->CNTRL = 0;
TIM2->ARRH = 38000u >> 8;
TIM2->ARRL = 38000u & 0xFF;
TIM2->IER &= ~0x1; //不允许中断
//TIM2->IER |= 0x1;
}
#ifdef _COSMIC_
#pragma section (LPRUN)
void LPR_Ram(void)
#endif
#ifdef _RAISONANCE_
void LPR_Ram(void) inram
#endif
#ifdef _IAR_
#pragma location="MY_RAM_FUNC"
void LPR_Ram(void)
#endif
{
#if 0
uint8_t i = 0;
/* To reduce consumption to minimal
Swith off the Flash */
FLASH->CR1 = 0x08;
while(((CLK->REGCSR)&0x80)==0x80);
/* Swith off the Regulator*/
CLK->REGCSR = 0x02;
while(((CLK->REGCSR)&0x01)==0x01);
/* Set trigger on GPIOE pin6*/
WFE->CR2 = 0x04;
GPIOE->CR2 = 0x44;
for (i=0; i<100; i++);
/* To start counter on falling edge*/
GPIO_LOW(CTN_GPIO_PORT,CTN_CNTEN_GPIO_PIN);
/*Wait for end of counter */
wfe();
GPIOC->ODR ^= 0x80;
EXTI->SR1 |= 0x40;
WFE->CR2 = 0x00;
//Switch on the regulator
CLK->REGCSR = 0x00;
while(((CLK->REGCSR)&0x1) != 0x1);
#else
uint8_t i;
FLASH->CR1 = 0x08;
while(((CLK->REGCSR)&0x80)==0x80);
CLK->REGCSR = 0x02;
while(((CLK->REGCSR)&0x01)==0x01);
// -------------------------------------------------------
WFE->CR1 = 0x01; // tim2 wakeup update
CLK->PCKENR1 |= 0x1;
TIM2->CR1 |= 0x1;
//使能唤醒
//for(i = 0;i < 100;i++);
wfe();
GPIOC->ODR ^= 0x80;
//禁止唤醒
TIM2->SR1 &= ~0x1;
WFE->CR1 = 0x00;
//---------------------------------------------------------
//Switch on the regulator
CLK->REGCSR = 0x00;
while(((CLK->REGCSR)&0x1) != 0x1);
#endif
}
一周热门 更多>