你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
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低功耗