你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
stm8s低功耗
[复制链接]
leaf198310
提问时间:2011-2-21 22:43 /
本人想用stm8s103做一款低功耗产品,外部中断唤醒来解红外编码,有谁能提供我一个思路或给个进入stm8s低功耗设置的例子,我刚学stm8s,非常感谢
赞
0
收藏
0
评论
11
分享
发布时间:2011-2-21 22:43
举报
请先
登录
后回复
11个回答
废鱼
回答时间:2011-2-22 09:37:50
a0a.1 0b0c
RE:stm8s低功耗
给你一个建议:
红外模块开启中断功能,连接MCU的外部中断,通过外部中断来唤醒去读取数据。休眠功能,我稍后上传一个例程给你。
赞
0
评论
回复
支持
反对
leaf198310
回答时间:2011-2-26 01:54:22
a0a.1 0b0c
回复:stm8s低功耗
回复第 2 楼 安 于2011-02-22 01:37:50发表:
给你一个建议:
红外模块开启中断功能,连接MCU的外部中断,通过外部中断来唤醒去读取数据。休眠功能,我稍后上传一个例程给你。
托大家指点,程序已经完成,中断加定时做的,去掉程序注释部分,运行很正常,但是一进入Halt模式(加入注释部分程序),运行就不正常了,请求各位给指教下,非常感谢!型号stm8s103f2,起用Hsi,复位电路用的是内部,nrst脚就加了个电容.
while ( 1 )
{
if(!(Ir_Flag&0x08))
{
if(Ir_Flag&0x10){Ir_fenxi();}
if(Ir_Flag&0x01){Power_manage();} }
else{
TIM2_CR1&=~(0x01); // 停止TIM2计数
CLK_PCKENR1=0x00; //关闭外设时钟
CLK_PCKENR2=0X00; //关闭外设时钟
_asm("halt"); //停机模式
CLK_PCKENR1|=0X20; //打开TIM2时钟
TIM2_CR1|=0X01; //启动TIM2计时
Ir_Flag=0; //初始化
}
}
}
另外,安老大,您上传的例程我没看到啊,还请帮忙看看,急啊
赞
0
评论
回复
支持
反对
leaf198310
回答时间:2011-2-27 11:51:42
a0a.1 0b0c
RE:stm8s低功耗
我现在郁闷的就是不加halt功能,程序运行很正常啊,为什么一加这个halt,功能就不正常呢,而且时钟切换还正常,因为我设置断点的时候,显示切换正常
赞
0
评论
回复
支持
反对
leaf198310
回答时间:2011-2-27 11:53:37
a0a.1 0b0c
RE:stm8s低功耗
CLK_SWR = 0xD2; /* Select HSE */
注释错误,应该是LSI
赞
0
评论
回复
支持
反对
leaf198310
回答时间:2011-2-27 12:38:04
a0a.1 0b0c
RE:stm8s低功耗
if (CLK_CMSR != 0xE1) //等待切换完毕
while(1); //等待切换完毕
CLK_PCKENR1|=0X20; //只打开TIM2 clock
TIM2_CR1|=0X01; //起用TIM2计数
Ir_Flag=0;
上段有个错误,Ir_Flag=0;应该去掉,但是还是不正常,在线等各位指教
赞
0
评论
回复
支持
反对
leaf198310
回答时间:2011-2-27 13:33:52
a0a.1 0b0c
RE:stm8s低功耗
已解决,谢谢安老大
赞
0
评论
回复
支持
反对
leaf198310
回答时间:2011-2-27 16:16:12
a0a.1 0b0c
RE:stm8s低功耗
又有个问题是电流问题,目前有用到2个i/o口,一个做输入,外部中断有上拉电阻;一个输出接一个led灯和一个电阻到vdd,我在进入halt模式时,输出高电平的,应该是正确的;有用一个timer2,我也是在halt时将其关掉了,其他不用的时钟也都关了;即使这样也仍然有1.2mA的电流,以下是我的设置:
void GPIO_Init(void)
{
PB_DDR |= 0x20; /* PB5 Output 其他输入. */
PB_CR1 |= 0x20; /* PB5推挽输 其他悬空输入 */
PB_CR2 = 0x00; /* Output speed up to 2MHz. */
PB_ODR=0X20;
PD_DDR=0X00;
PD_CR1=0X08;
PD_CR2=0x08; /* PD3允许中断 其他禁止中断 */
EXTI_CR1 = 0x80; /*仅下降沿触发*/
EXTI_CR2 = 0x00;
}
void CLK_Init(void)
{
/* Configure HSI prescaler*/
CLK_CKDIVR &= ~0x10; /*fMASTER频率 01: fHSI= fHSI RC output/2. */
CLK_CKDIVR |= 0x01; /* 001: fCPU=fMASTER/2. */
CLK_PCKENR1=0x20;
CLK_PCKENR2=0X00;
}
void TIM_Init(void)
{
TIM2_PSCR =0x03; // 8分频 TIM2时基为1us
TIM2_ARRH =0x00; //
TIM2_ARRL =0x96; //
TIM2_IER =0x01; //使能TIM2中断
TIM2_CR1 =0x81; // 使能TIM2计数
}
进入halt时的设置:
TIM2_CR1&=~(0x01); // 停止TIM2计数
CLK_PCKENR1&=~(0x20);
CLK_SWCR |= 0x02; /* Enable switch */
CLK_SWR = 0xD2; /* Select LSI */
while (!(CLK_SWCR & 0x08)); /* Wait for switch done */
if (CLK_CMSR != 0xD2) //等待切换完毕
while(1); //等待切换完毕
_asm("nop");
_asm("halt");
CLK_SWCR |= 0x02; /* Enable switch */
CLK_SWR = 0xE1; //切换到HSI
while (!(CLK_SWCR & 0x08)); /* Wait for switch done */
if (CLK_CMSR != 0xE1) //等待切换完毕
while(1); //等待切换完毕
CLK_PCKENR1|=0X20; //只打开TIM2 clock
TIM2_CR1|=0X01; //起用TIM2计数
难道是中断上拉口消耗电流,还是在切到LSI时要把HSI关掉?这个1.2mA正常吗
赞
0
评论
回复
支持
反对
leaf198310
回答时间:2011-2-27 19:29:12
a0a.1 0b0c
RE:stm8s低功耗
怎么发不了图片?
电路是NRST =>0.01UF电容到地
PD3=>接红外接收头,由于外部没上拉电阻,我只能将PD3设为内部输入上拉
PB5=>LED+电阻接到vdd
其他的什么都没接,用的HSI.当然vdd与vss之间是有电容的.
赞
0
评论
回复
支持
反对
wxc806605298
回答时间:2013-12-3 14:44:11
a0a.1 0b0c
回复:stm8s低功耗
我也遇到IO端口功耗大的问题,不知道怎么解决!
赞
0
评论
回复
支持
反对
llll2013
回答时间:2015-8-6 17:18:38
a0a.1 0b0c
求教,我也遇到这个问题了
赞
0
评论
回复
支持
反对
pandyele
回答时间:2015-10-28 23:24:03
a0a.1 0b0c
学习了
顶起
赞
0
评论
回复
支持
反对
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
RE:stm8s低功耗
红外模块开启中断功能,连接MCU的外部中断,通过外部中断来唤醒去读取数据。休眠功能,我稍后上传一个例程给你。
回复:stm8s低功耗
给你一个建议:
红外模块开启中断功能,连接MCU的外部中断,通过外部中断来唤醒去读取数据。休眠功能,我稍后上传一个例程给你。
托大家指点,程序已经完成,中断加定时做的,去掉程序注释部分,运行很正常,但是一进入Halt模式(加入注释部分程序),运行就不正常了,请求各位给指教下,非常感谢!型号stm8s103f2,起用Hsi,复位电路用的是内部,nrst脚就加了个电容.
while ( 1 )
{
if(!(Ir_Flag&0x08))
{
if(Ir_Flag&0x10){Ir_fenxi();}
if(Ir_Flag&0x01){Power_manage();} }
else{
TIM2_CR1&=~(0x01); // 停止TIM2计数
CLK_PCKENR1=0x00; //关闭外设时钟
CLK_PCKENR2=0X00; //关闭外设时钟
_asm("halt"); //停机模式
CLK_PCKENR1|=0X20; //打开TIM2时钟
TIM2_CR1|=0X01; //启动TIM2计时
Ir_Flag=0; //初始化
}
}
}
另外,安老大,您上传的例程我没看到啊,还请帮忙看看,急啊
RE:stm8s低功耗
RE:stm8s低功耗
注释错误,应该是LSI
RE:stm8s低功耗
while(1); //等待切换完毕
CLK_PCKENR1|=0X20; //只打开TIM2 clock
TIM2_CR1|=0X01; //起用TIM2计数
Ir_Flag=0;
上段有个错误,Ir_Flag=0;应该去掉,但是还是不正常,在线等各位指教
RE:stm8s低功耗
RE:stm8s低功耗
void GPIO_Init(void)
{
PB_DDR |= 0x20; /* PB5 Output 其他输入. */
PB_CR1 |= 0x20; /* PB5推挽输 其他悬空输入 */
PB_CR2 = 0x00; /* Output speed up to 2MHz. */
PB_ODR=0X20;
PD_DDR=0X00;
PD_CR1=0X08;
PD_CR2=0x08; /* PD3允许中断 其他禁止中断 */
EXTI_CR1 = 0x80; /*仅下降沿触发*/
EXTI_CR2 = 0x00;
}
void CLK_Init(void)
{
/* Configure HSI prescaler*/
CLK_CKDIVR &= ~0x10; /*fMASTER频率 01: fHSI= fHSI RC output/2. */
CLK_CKDIVR |= 0x01; /* 001: fCPU=fMASTER/2. */
CLK_PCKENR1=0x20;
CLK_PCKENR2=0X00;
}
void TIM_Init(void)
{
TIM2_PSCR =0x03; // 8分频 TIM2时基为1us
TIM2_ARRH =0x00; //
TIM2_ARRL =0x96; //
TIM2_IER =0x01; //使能TIM2中断
TIM2_CR1 =0x81; // 使能TIM2计数
}
进入halt时的设置:
TIM2_CR1&=~(0x01); // 停止TIM2计数
CLK_PCKENR1&=~(0x20);
CLK_SWCR |= 0x02; /* Enable switch */
CLK_SWR = 0xD2; /* Select LSI */
while (!(CLK_SWCR & 0x08)); /* Wait for switch done */
if (CLK_CMSR != 0xD2) //等待切换完毕
while(1); //等待切换完毕
_asm("nop");
_asm("halt");
CLK_SWCR |= 0x02; /* Enable switch */
CLK_SWR = 0xE1; //切换到HSI
while (!(CLK_SWCR & 0x08)); /* Wait for switch done */
if (CLK_CMSR != 0xE1) //等待切换完毕
while(1); //等待切换完毕
CLK_PCKENR1|=0X20; //只打开TIM2 clock
TIM2_CR1|=0X01; //起用TIM2计数
难道是中断上拉口消耗电流,还是在切到LSI时要把HSI关掉?这个1.2mA正常吗
RE:stm8s低功耗
电路是NRST =>0.01UF电容到地
PD3=>接红外接收头,由于外部没上拉电阻,我只能将PD3设为内部输入上拉
PB5=>LED+电阻接到vdd
其他的什么都没接,用的HSI.当然vdd与vss之间是有电容的.
回复:stm8s低功耗