打印
[STM8]

STM8L101F3P6,halt唤醒后停留在halt下一条的语句

[复制链接]
6211|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sy_lixiang|  楼主 | 2012-7-30 15:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 sy_lixiang 于 2012-7-30 15:54 编辑

最在因工作的原因,在测试STM8LF3P6这款单片机的低功耗的情况,但使用中发现如下问题:

目的:上电后时入halt模式,外部中断第1次唤醒,使PC3口置高电平,再进入halt;第2次唤醒,使PC3为低电平。
1、时钟为默认时钟8分频,2Mhz。
2、配置使用PB7用作外部中断唤醒引腿,其它IO口固定输出低电平。
3、PB7下降沿中断唤醒

经测试,进入halt模式后,电流约为0.4uA,与手册描述相符。但给PB7一个下降沿后,程序停留在halt后的下一条语句处,只能唤醒halt一次,halt以后的语句不再执行。不知为什么?

程序如下:

主程序main.c
#include "stm8l10x.h"
#include "stm8l10x_clk.h"
#include "stm8l10x_gpio.h"
#include "stm8l10x_conf.h"
#include "stm8l10x_it.h"

#define RXD_IN (GPIO_Pin_7)//模拟RXD,暂未使用
#define TXD_OUT (GPIO_Pin_4)//模拟TXD,暂未使用

void CLK_Init(void)
{
CLK_DeInit();
CLK_MasterPrescalerConfig(CLK_MasterPrescaler_HSIDiv8);
}

void IOInit(void)
{
GPIO_Init(GPIOA, GPIO_Pin_0 | GPIO_Pin_2 | GPIO_Pin_3, GPIO_Mode_Out_PP_Low_Slow );

GPIO_Init(GPIOB, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 , GPIO_Mode_Out_PP_Low_Slow );

GPIO_Init(GPIOB, TXD_OUT, GPIO_Mode_Out_PP_High_Slow);

GPIO_Init(GPIOB, RXD_IN, GPIO_Mode_In_PU_IT);

GPIO_Init(GPIOC, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 , GPIO_Mode_Out_PP_Low_Slow );

GPIO_Init(GPIOD, GPIO_Pin_0, GPIO_Mode_Out_PP_Low_Slow );
}

void main(void)
{
CLK_Init();
IOInit();

EXTI_SetPinSensitivity(EXTI_Pin_7, EXTI_Trigger_Falling);//PB7下降沿触发
enableInterrupts();//使能中断

halt();//进入halt低功耗模式

GPIO_Init(GPIOC, GPIO_Pin_3, GPIO_Mode_Out_PP_High_Slow );//外部中断唤醒后,停留在此,不再向下执行,

halt();

GPIO_Init(GPIOC, GPIO_Pin_3, GPIO_Mode_Out_PP_Low_Slow );
}
中断服务程序:
stm8l10x_it.c

#ifdef _COSMIC_
@far @interrupt void EXTIB_IRQHandler(void)
#else /* _RAISONANCE_ */
void EXTIB_IRQHandler(void) interrupt 6
#endif /* _COSMIC_ */
{
EXTI_ClearITPendingBit(EXTI_IT_PortB);  
}
#ifdef _COSMIC_
@far @interrupt void EXTI7_IRQHandler(void)
#else /* _RAISONANCE_ */
void EXTI7_IRQHandler(void) interrupt 15
#endif /* _COSMIC_ */
{
    GPIO_Init(GPIOB, GPIO_Pin_7, GPIO_Mode_In_PU_No_IT); // RXD  
    EXTI_ClearITPendingBit(EXTI_IT_Pin7);   
}
沙发
sy_lixiang|  楼主 | 2012-8-2 08:44 | 只看该作者
看样子是不会有人回复了。。。

结贴了。。。

使用特权

评论回复
板凳
枫叶gbwz| | 2013-1-20 23:13 | 只看该作者
halt文件唤醒之后是去中断吧,至于中断运行完之后是否回来原来的主程序好像是要设定的。我只是依稀记得看有人的帖子这么说过。在Global configuration register (CFG_GCR)里头

使用特权

评论回复
地板
zykzyk| | 2013-4-4 10:17 | 只看该作者
本帖最后由 zykzyk 于 2013-4-6 21:03 编辑

搞定

使用特权

评论回复
5
cjhk| | 2013-4-4 18:38 | 只看该作者
不是很了解  楼主   我帮你顶一个   呵呵   问题没有涉及过   呵呵

使用特权

评论回复
6
zykzyk| | 2013-4-6 21:04 | 只看该作者
问题在GPIO_Init(GPIOB, GPIO_Pin_7, GPIO_Mode_In_PU_No_IT); // RXD 上面。应该为GPIO_Mode_In_PU_IT。

使用特权

评论回复
7
giant0113| | 2013-11-26 13:16 | 只看该作者

使用特权

评论回复
8
xiaox314| | 2014-3-4 10:06 | 只看该作者
好东西

使用特权

评论回复
9
aichixiaobaicai| | 2014-8-22 16:07 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

48

帖子

1

粉丝