标签: stm8

STM8 ASM安全地执行WFE

我在低功耗运行模式下从RAM 运行了 c代码(因此中断没有处理).此模式由代码序列启用:

  • 跳到RAM
  • SIM卡
  • 关闭内部闪光灯和电源调节器,切换到低速时钟源(LSE)
  • 在WFE模式下工作(低功耗等待模式)
  • 打开电源调节器和闪光灯,恢复时钟源
  • 轮缘
  • 跳到闪光灯

所以在勘误表中描述的WFE指令没有问题.这种结构的问题,可能是永远低功耗等待模式下 CPU锁定的原因:

while nbit(TIM1_SR1,CC3IF) asm("wfe");
Run Code Online (Sandbox Code Playgroud)

这是拆卸为:

000035    720252B602     BTJT      TIM1_SR1, #1, 0xB6
00003A    728F           WFE
Run Code Online (Sandbox Code Playgroud)

来自定时器的事件具有概率性质,并且此代码不保证在WFE指令执行后它将发生:

  • BTJT指令在2个周期内完成,长度为5;
  • 从RAM执行的代码可能不连续,因为"fetch"状态会在几个周期内暂停执行

我使用手册PM0044,在第26页它内容漂亮的表:

RAM中的示例代码执行

有两种情况,代码执行在3个周期停止.所以我不确定在BTJT和WFE指令之间不会发生异步唤醒事件.

有没有办法确保严格的逻辑顺序(检查条件> wfe>唤醒事件)?

c embedded assembly stm8

4
推荐指数
1
解决办法
684
查看次数

像STM8一样编程STM32(寄存器级GPIO)

我像这样编写STM8 GPIO,PD_ODR_ODR4 = 1;但stm32f10x.h没有此功能,是否有任何.h文件定义了位。

抱歉,我不知道如何更好地解释这个问题。

我尝试了多个GPIO库。

强文本

c stm32 iar stm8

2
推荐指数
2
解决办法
1388
查看次数

标签 统计

c ×2

stm8 ×2

assembly ×1

embedded ×1

iar ×1

stm32 ×1