问题标签 [stm8]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
918 浏览

c - STM8 ASM 安全执行 WFE

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

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

因此,勘误表中描述的 WFE 指令没有问题。这种结构的问题,它可能是导致 CPU永远处于低功耗等待模式的原因:

即反汇编为:

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

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

我使用手册 PM0044,在第 26 页它包含漂亮的表格:

从 RAM 执行示例代码

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

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

0 投票
0 回答
121 浏览

can-bus - 如何让Vector CANOE识别通过接口连接的STM8板?

我尝试对 STM8 板进行编程以发送 CAN 消息,这些消息可以在 Vector CANoe 的帮助下查看。但是消息处于待处理状态,我无法让 Vector CANoe 识别通过硬件接口连接的 stm8 板。如何在 CANoe 跟踪窗口中查看微控制器板发送的消息?谢谢。

0 投票
1 回答
623 浏览

c - 使用math.h时是否需要将float类型转换为double?

我将 Cosmic C 编译器用于 STM8 微控制器并使用浮点变量。对于当前使用的平台,编译器不提供双精度类型。无论如何,当一个人使用双打时,它们被视为浮点数。

我想知道在使用 fabs() 时是否需要将浮点类型转换为加倍?它被声明为double fabs(double x);

我在编译器文档中没有找到任何关于此的内容。

但即使没有类型转换,它也可以在没有警告的情况下编译。顺便说一句,当我将 double 与 float 混合时,GCC 也会在没有警告的情况下编译。

0 投票
1 回答
1251 浏览

c - STM8 微控制器的 STVD IDE 中的汇编指令

我正在编程STM8微控制器STVD。我碰巧在代码中间使用了汇编指令。如此处所示
我使用了如下指令

但我面临以下错误

谁能帮我解决这个问题?

0 投票
2 回答
4148 浏览

iar - IAR 嵌入式工作台。__iar_program_start 在哪里?

在 STM8 应用程序的代码中有一行

现在我已经搜索过了,这个功能无处可寻。这是什么,在哪里??

谢谢

0 投票
1 回答
1414 浏览

debugging - IAR Embedded Workshop调试中的问题

我收到了一些我必须维护的代码。为此,我将使用 IAR 嵌入式工作台。因为这是我第一次看一些教程,比如 IAR Embedded Workbench 入门

现在,如果您查看 4.32 分钟,您可以看到有两条绿线。一个在代码区,一个在反汇编区。你可以在一个和另一个之间

就我而言,只有一个!绿线(在反汇编区),无论你做什么你都不能去代码区。您也不能设置断点(当然可以,但是当您运行程序时,它们会被停用)

我不认为这可以在入门指南中找到,所以我寻求 IAR 经验丰富的人的帮助

为什么会发生这种情况,我该如何调试我的程序?

感谢您的任何评论帮助或想法

0 投票
1 回答
262 浏览

eclipse - 将旧的 GDB 4.17 与实际的 Eclipse CDT (9.0) 或至少与 Eclipse Juno 一起使用

这是这种情况:

我想用 Eclipse 调试 ST 的 STM8 微控制器。对于编译,我使用 IAR Kickstart 和他们自己的 Eclipse 插件。这工作得很好。

不幸的是,他们没有提供任何方式将他们的 C-Spy 调试器集成到 Eclipse 中。

ST 有自己的环境,因此称为 ST Visual Develop 或短期 STVD。包中包含一个旧的但可以工作的 GDB。它是 GDB 4.17。源代码也可用并且我能够编译它们。

现在的问题:

GDB 4.17 不支持任何现代解释器,例如 mi、mi1 或 mi0。它只支持控制台命令。

我尝试使用带有 CDT (9.0) 的实际 Eclipse (neon) 并在配置中指向我的 GDB.exe 我还监视了 GDB.exe Eclipse 或 CDT 的启动总是尝试使用 -i 或 - 打开 GDB解释器参数。但是我的 GDB 不知道这个命令。所以它会回答“无法识别的命令”,CDT 会终止进程。

在带有 CDT 的较旧版本的 Eclipse (Juno) 中,我能够选择“详细控制台模式”,但这也使用 -i 命令启动 GDB。

现在的问题是: 有没有人有想法,如何处理这个问题?最简单的方法是告诉 CDT 它不应该使用任何“mi”模式。

困难的方法是基于 5.0 左右的版本编写一个新的 GDB。但这对我来说并不是真正可以管理的......

感谢您的任何评论。

0 投票
3 回答
7683 浏览

c - STM8中断串口接收

我是 STM8 的新手,并尝试使用 STM8S103F3,使用 IAR Embedded Workbench。使用 C,我喜欢直接使用寄存器。我需要 14400 波特,8N2 的串行,并且获得 UART 传输很容易,因为网上有很多很好的教程和示例。然后需要让UART在中断时接收,没有别的办法。那就是问题所在。根据 iostm8s103f3.h (IAR) 在 0x14 向量 UART1_R_IDLE、UART1_R_LBDF、UART1_R_OR、UART1_R_PE、UART1_R_RXNE 上有 5 个中断

根据 Silverlight 开发人员:在 STM8 上注册,

根据意法半导体STM8S.h

根据 STM8S 参考手册 RM0016,当数据从移位寄存器传输到 Rx 缓冲区时,RXNE 标志(Rx 缓冲区非空)在最后一个采样时钟沿设置。它表示数据已准备好从 SPI_DR 寄存器中读取。Rx 缓冲区非空 (RXNE) 置位时,该标志表示 Rx 缓冲区中有有效的接收数据。当 SPI_DR 被读取时,该标志被复位。然后我写道:

等等。不好,我不断收到中断,设置了UART1_SR_RXNE,但UART1_DR为空,没有发生UART接收。我已经禁用了我可以看到的所有其他中断,但仍然没有好处。SPI也设置了这个标志,想必UART和SPI不能一起使用。我非常需要让这个串行接收中断继续。请帮忙。谢谢

0 投票
1 回答
952 浏览

timer - STM8定时器没有在正确的时间滴答作响

我正在使用 STM8 计时器(不是我的代码,而是维护它),并且它使用了一个计时器。显然时钟设置为 16MHz erfo 0.0625uS。定时器的设置是 ARRH=0x03 ARRL=0x20 因此 (0x0320=800) 它在 800 (ergo 50us) 处重置 PSCR 设置为 0,因此定时器具有与微型相同的频率。

无论如何,当用示波器检查时,它并没有给出好的读数。定时器中断被调用在: 56us , 54uS, 54uS, 52uS, 52uS, 52us, 38us(!!!), 42us(?), 50us, 50us....

好奇地总结它给出了 500uS 所以它确实算作 50uS 的 10 倍

定时器中断的前 8 次发生了一些 AD 转换,因此也有可能在两者之间调用 AD 中断。

1)你认为这会影响定时器的频率吗?

2)为什么它通过在 38uS 触发中断来“纠正”自己?

我将不胜感激任何基于您的嵌入式或 STM8 经验的评论,因为我知道准确的答案需要检查代码......

0 投票
1 回答
532 浏览

assembly - STM8SF103 组装 - 将立即值加载到 ram 寄存器

我正在尝试用汇编语言为stm8sf103微控制器编写程序。我想在 ram 寄存器中存储一个立即的十六进制值(例如 $0),但这不起作用,我想知道为什么:

我得到错误:

as1 : Error 54: Can't match Addressing mode ' ld $0,#5'