问题标签 [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.
c - STM8 ASM 安全执行 WFE
我在低功耗运行模式下从 RAM 运行 c 代码(因此不处理中断)。此模式由代码序列启用:
- 跳转到内存
- SIM卡
- 关闭内部闪光灯和电源调节器,切换到低速时钟源 (LSE)
- 使用 WFE 模式(低功耗等待模式)做一些工作
- 打开电源调节器和闪光灯,恢复时钟源
- 轮缘
- 跳到闪光
因此,勘误表中描述的 WFE 指令没有问题。这种结构的问题,它可能是导致 CPU永远处于低功耗等待模式的原因:
即反汇编为:
来自定时器的事件具有概率性质,并且此代码不保证它会在 WFE 指令执行后发生:
- BTJT指令在2个周期内执行,长度为5;
- 从 RAM 执行的代码可能不连续,因为“获取”状态会在几个周期内暂停执行
我使用手册 PM0044,在第 26 页它包含漂亮的表格:
代码执行停止在 3 个周期时有 2 种情况。所以我不确定我的异步唤醒事件不会在 BTJT 和 WFE 指令之间发生。
有没有办法确保严格的逻辑顺序(检查条件 > wfe > 唤醒事件)?
can-bus - 如何让Vector CANOE识别通过接口连接的STM8板?
我尝试对 STM8 板进行编程以发送 CAN 消息,这些消息可以在 Vector CANoe 的帮助下查看。但是消息处于待处理状态,我无法让 Vector CANoe 识别通过硬件接口连接的 stm8 板。如何在 CANoe 跟踪窗口中查看微控制器板发送的消息?谢谢。
c - 使用math.h时是否需要将float类型转换为double?
我将 Cosmic C 编译器用于 STM8 微控制器并使用浮点变量。对于当前使用的平台,编译器不提供双精度类型。无论如何,当一个人使用双打时,它们被视为浮点数。
我想知道在使用 fabs() 时是否需要将浮点类型转换为加倍?它被声明为double fabs(double x);
我在编译器文档中没有找到任何关于此的内容。
但即使没有类型转换,它也可以在没有警告的情况下编译。顺便说一句,当我将 double 与 float 混合时,GCC 也会在没有警告的情况下编译。
iar - IAR 嵌入式工作台。__iar_program_start 在哪里?
在 STM8 应用程序的代码中有一行
现在我已经搜索过了,这个功能无处可寻。这是什么,在哪里??
谢谢
debugging - IAR Embedded Workshop调试中的问题
我收到了一些我必须维护的代码。为此,我将使用 IAR 嵌入式工作台。因为这是我第一次看一些教程,比如 IAR Embedded Workbench 入门
现在,如果您查看 4.32 分钟,您可以看到有两条绿线。一个在代码区,一个在反汇编区。你可以在一个和另一个之间
就我而言,只有一个!绿线(在反汇编区),无论你做什么你都不能去代码区。您也不能设置断点(当然可以,但是当您运行程序时,它们会被停用)
我不认为这可以在入门指南中找到,所以我寻求 IAR 经验丰富的人的帮助
为什么会发生这种情况,我该如何调试我的程序?
感谢您的任何评论帮助或想法
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。但这对我来说并不是真正可以管理的......
感谢您的任何评论。
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不能一起使用。我非常需要让这个串行接收中断继续。请帮忙。谢谢
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 经验的评论,因为我知道准确的答案需要检查代码......
assembly - STM8SF103 组装 - 将立即值加载到 ram 寄存器
我正在尝试用汇编语言为stm8sf103
微控制器编写程序。我想在 ram 寄存器中存储一个立即的十六进制值(例如 $0),但这不起作用,我想知道为什么:
我得到错误:
as1 : Error 54: Can't match Addressing mode ' ld $0,#5'