历史上的今天
返回首页

历史上的今天

今天是:2025年02月22日(星期六)

2021年02月22日 | 关于STM8S的halt状态及唤醒

2021-02-22 来源:eefocus

简介:有个项目用了STM8S103F3,因是电池供电,需要进入halt状态并使用GPIO外部唤醒,因是初次使用STM8S,走了不少弯路,将过程记录下来,好让和我一样的初次接触STM8S的人有个启发。


现象:进不了HALT状态


硬件环境:使用PA1、PA2、PD2、PD5作为外部中断输入,来唤醒MCU。使用PD4作为输出,使用PD3作为AD转换口。


编程思路:


1、初始化系统(时钟、gpio)部分代码如下:


void JG_GPIO_Init(void)


{


PA_DDR = 0xf9;


PA_CR1 = 0x00;


PA_CR2 = 0x06; //pa1、pa2中断


PB_DDR = 0xff; //PB浮空输入


PB_CR1 = 0x00;


PB_CR2 = 0x00;


PC_DDR = 0x00; //


PC_CR1 = 0x00;


PC_CR2 = 0x00;


PD_DDR = 0xdb; //1101 1011


PD_CR1 = 0xdb; //1101 1011


PD_CR2 = 0x24; //0010 0100 //PD2PD5中断


PD_ODR_ODR4 = 0;


EXTI_CR1_PDIS = 3; //PD口中断上下降沿触发


EXTI_CR1_PAIS = 3; //PA口中断上下降沿触发


}


2、开中断


asm("rim");


3、进入halt


asm("halt");


4、在PA口和PD口外部中断服务函数中处理问题


#pragma vector = 5


__interrupt void PA_Intrsvr(void)


{


...


}


#pragma vector = 8


__interrupt void PD_Intrsvr(void)


{


...


}


结果发现根本不进入halt模式,百思不得其解。


问题分析过程:


首先怀疑端口被误触发,使得进入了HALT模式的mcu被唤醒了。用示波器查看PA1、PA2、PD2、PD5波形,均为高电平,没有触发的条件。


接着怀疑电源干扰,加大了电路的滤波电容,故障依旧。


开始从代码入手查问题,修改代码如下:


#define led PD_ODR_ODR4


void main(void)


{


PD_DDR_DDR4 = 1;


PD_CR1_C14 = 1;


PD_CR2_C24 = 0;


led = 1;


PA_DDR_DDR1 = 0;


PA_CR1_C11 = 0;


PA_CR2_C21 = 1;


EXTI_CR1_PAIS = 3;


asm("rim");


asm("halt");


led = 0;


while(1);


}


在PD4上经1k电阻接了一个LED到电源正极,这样,当PD4为0时,led被点亮。配置PD4为推挽输出,配置PA1为带中断浮空输入,然后开中断,进入halt状态,接着在halt语句之后拉低PD4,以点亮led。如果mcu正常进入halt状态,led不亮。


在IAR下编译、下载并调试,程序无编译错误,正常下载到MCU,全速运行,led没有被点亮。哦噢,成功了...慢着,stop debuging,让程序在MCU上跑一下看看,...led亮了!!发克!


这个什么状况


看PDF、看STM8S参考手册,没有找到明显的提示,晕!问度娘,度娘给了我一些不相干的东西,晕菜,在q群里吼吼,高手们都很忙,没空理我。


怎么办?


自己琢磨,瞎琢磨,这个问题折磨我好多天了,领导天天过来问我,搞定了没有。下午的时候老大过来问我好了没有,我说有点问题,老大说,听老二(二老板)说这个项目很简单的。。。言下之意,是不是我的水平问题,没办法,气也没用。


随手把代码改成下面的样子:


#define led PD_ODR_ODR4


void main(void)


{


PD_DDR_DDR4 = 1;


PD_CR1_C14 = 1;


PD_CR2_C24 = 0;


led = 1;


PA_DDR_DDR2 = 0;


PA_CR1_C12 = 0;


PA_CR2_C22 = 1;


EXTI_CR1_PAIS = 3;


asm("rim");


asm("halt");


led = 0;


while(1);


}


有什么不同?换了一个口,用PA2口来触发唤醒,编译、下载并调试,全速没问题,led没亮。点一下stop debuging,让MCU跑,led没亮!!!哦哦哦,貌似ok了?!拉低一下PA2,led点亮了,成功了!


赶紧看产品手册,PA1口是外部晶振的输入口,手册上有这么一句话:


关于STM8S的halt状态及唤醒


不知道是不是这个原因引起的,有待考证。请知道的高手指点我一下。


并且在问度娘的时候,知道了另外一件事,就是在进入halt的时候,MCU会自动asm("rim");也就是说,如果要进入halt状态,则可以省掉asm("rim");语句。对于偷懒的我,这个很受用。


推荐阅读

史海拾趣

Digitron公司的发展小趣事

为了进一步扩大市场份额,Digitron公司积极寻求与行业内外的企业建立战略合作关系。XXXX年,Digitron公司与一家全球知名的物流公司达成合作协议,为其提供定制化的温度监控解决方案。这一合作不仅为Digitron公司带来了可观的收入,还提高了其在物流行业的知名度。此外,Digitron公司还积极参加国际展会和论坛,与全球客户建立联系,拓展国际市场。

Advanced Monolythic Ceramics公司的发展小趣事

为了进一步扩大市场份额,Digitron公司积极寻求与行业内外的企业建立战略合作关系。XXXX年,Digitron公司与一家全球知名的物流公司达成合作协议,为其提供定制化的温度监控解决方案。这一合作不仅为Digitron公司带来了可观的收入,还提高了其在物流行业的知名度。此外,Digitron公司还积极参加国际展会和论坛,与全球客户建立联系,拓展国际市场。

AF International公司的发展小趣事

作为一家具有社会责任感的企业,AF International始终关注社会公益事业的发展。公司积极参与扶贫、教育等公益活动,捐资助学、扶贫济困,为社会做出积极贡献。此外,AF International还注重环保和可持续发展,采用环保材料和节能技术,降低生产过程中的能耗和排放。这些举措不仅体现了公司的社会责任感,也为公司的可持续发展奠定了坚实基础。

这五个故事分别从不同角度展现了AF International在电子行业中的发展历程和取得的成就,体现了公司的创新精神、国际化视野、社会责任感等优秀品质。

风华邦科(FH-BK)公司的发展小趣事

在电子科技领域,FlyWin集团不断投入研发资源,致力于新技术的开发与应用。公司成立了专门的研发团队,专注于人工智能、物联网等前沿技术的探索。通过不断的技术创新,FlyWin成功推出了一系列具有自主知识产权的电子产品,如智能传感器、物联网解决方案等。这些产品不仅提升了公司的市场竞争力,也为公司的长远发展提供了强大的技术支撑。

依必安派特(ebmpapst)公司的发展小趣事

为了进一步满足中国市场的本地化需求,依必安派特在2005年成立了依必安派特电机(上海)有限公司,开始了国产化进程。这一举措不仅提高了产品的性价比,还缩短了交货周期,使得依必安派特在中国市场的竞争力得到了显著提升。随着国产化产品的快速增长,依必安派特在中国的前十年市场业绩突飞猛进,为后续的飞跃发展打下了坚实基础。

Gigabit Logic Inc公司的发展小趣事
通过控制脉冲信号的频率或占空比,可以实现更精细的调速范围。

问答坊 | AI 解惑

关于共射放大电路的失真问题

问一下各位,放大电路产生不对称失真是什么原因啊,即输出波形的正负半波幅值,时间不对称。…

查看全部问答>

小心别上当!曝光“电子驱蚊灭鼠器”_applevista

作者:applevista 前两天,父亲在庙会上买了两个黑猫神牌电子驱蚊灭鼠器,5块一个。 前两年,见过这样东西,样子不一样,也提醒父亲这是骗人的,还是被骗了。 要是一块一个倒也不错,它其实就是一个简单的彩灯。 这个与卫星增台器、节电器一样 ...…

查看全部问答>

cadence问题3求助!!

请教各位高手 我在画原理图时(orcad) 有下列两个疑问: 1、请问处理器(在page1上)上的一个引脚如A1需要连接两个外围芯片x,y    可是芯片X我是用层次法(层次图上层在page1上)画的,与芯片y的连接是用平坦式画法     ...…

查看全部问答>

Quartus II中管脚上拉电阻(弱上拉)的设置方法

在使用Altera的FPGA时候,由于系统需求,需要在管脚的内部加上上拉电阻。Quartus II软件中在Assignment Editor中可以设置。具体过程如下:1. 在菜单Assignments中选择Assignment Editor. 2. 在弹出的界面里选择I/O Features.找到Node. 3. 选择Node ...…

查看全部问答>

YOU_LINK电路图,请帮忙看看!

网上找来的,可能有好多错误。 相关链接:https://bbs.eeworld.com.cn/upfiles/img/20076/2007626163328342.pdf…

查看全部问答>

nios ide 编译出错

nios ide 软件编译出现make:***[system_project]Error2 错误 这是什么原因?…

查看全部问答>

每天复习一些ARM指令及汇编

ARM处理器寻址方式 寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式,ARM 处理器有9种基本寻址方式。 寄存器寻址 操作数的值在寄存器中,指令中的地址码字段指出的是寄存器编号,指令执行时直 接取出寄存器值操作。 ...…

查看全部问答>

全波整流电路

全波整流器通常用于从交流输入获得直流电平。这通常用 于测量交流信号的幅度。全波整流器是一种均值检波器。 需要与均方根检波器或峰值检波器区分开来。 …

查看全部问答>

有没有用过炜盛的MQ系列的气体传感器的呢?

最近想用氨气和硫化氢传感器,国内便宜的就炜盛的MQ系列的,100出头,再上去就要500~600了 他们文档只提供了这个曲线图 有几个问题想请教下用过的前辈 1:这个系列能不能用来做定量测量,还是只能用来定性 2:输出的模拟电压怎么转换成浓度 3 ...…

查看全部问答>