当前位置: 首页 > news >正文

《IAR for STM8 从安装授权、工程迁移、编译调试到内存分析与 PWM 转速模拟的完整实战记录》

目录

  • 一、IAR 安装与授权阶段
    • 1. IAR 安装启动页该怎么选?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 2. 点击安装后没有任何提示,窗口还停在第一步,为什么?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 3. IAR Embedded Workbench for ARM v9.50 支持 STM8 吗?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 4. IAR ARM 和 Keil5 ARM 的区别是什么?为什么 8 位单片机还要单独版本?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 5. 安装到 “Setup Type” 这一步怎么选?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 6. 开始菜单文件夹名称这一步怎么选?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 7. 安装时出现 USB dongle driver 提示,怎么选?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 8. 安装 ST-LINK / STice 支持包这一步怎么办?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 9. 许可证向导出现后怎么选?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 10. 如何用所谓 “IARkg Unis.exe” 获取许可?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 11. 贴出的 keygen 说明文本是什么意思?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 12. License Manager 里看到 STM8 Standalone license,这说明什么?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 13. 这个 IAR 开发环境里编译、下载、调试按钮在哪里?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 14. 结合图片分析这个许可证是否完整?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 15. “Extract files / IAR Library Source for STM8” 这个窗口是什么意思?
      • 问题
      • 最终结论
      • 最终解决步骤
  • 二、IAR 工程界面与基本操作
    • 16. 如何调出左侧像 Keil5 一样的工程文件树?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 17. 为什么点击 Download and Debug 会弹出异常窗口?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 18. 给出工程名修改和芯片型号核对的全步骤
      • 问题
      • 最终结论
      • 最终解决步骤
    • 19. 一步一步教学,把 IAR 工程名改简单、避免中文路径、括号、空格问题
      • 问题
      • 最终结论
      • 最终解决步骤
    • 20. 打开 Workspace 时报错:`project could not be opened`
      • 问题
      • 最终结论
      • 最终解决步骤
    • 21. 点击报错确定后,Workspace 变空了怎么办?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 22. 这个版本没有 `Open -> Project` 选项怎么办?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 23. 我这样操作对吗?(Add Existing Project 后工程树出来)
      • 问题
      • 最终结论
      • 最终解决步骤
    • 24. `Rebuild All` 通过后说明什么?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 25. 不再报下载错误,但输出文件名还有旧残留,怎么办?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 26. 输出文件名从 `M134A-001(1).out` 变成 `M134A-001.out`,说明什么?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 27. 输出文件名已经改成 `M134A001.out`,下一步是什么?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 28. 如何把 IAR 工程中的旧路径源文件移除,再从新目录重新加入?
      • 问题
      • 最终结论
      • 最终解决步骤
  • 三、编译警告、报错与工程稳定性
    • 29. `Pa050: non-native end of line sequence detected` 是什么问题?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 30. 这份 RAR 代码评审截图里的结论合理吗?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 31. IAR 弹出 `has stopped working` 崩溃窗口,是什么原因?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 32. 重启电脑、删除 Debug 后,工程仍然崩溃怎么办?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 33. 其他项目能正常打开和编译,说明什么?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 34. 结合代码和初始化文件,时间片计算是否准确?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 35. 不看注释,只看代码配置,TIM4 到底是多少?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 36. 为什么 Codex 还回答成 2ms?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 37. 链接报错:`disableInterrupts` / `enableInterrupts` 未定义,原因是什么?
      • 问题
      • 最终结论
      • 最终解决步骤
  • 四、调试界面与运行控制
    • 38. 进入调试界面后,左上角绿色箭头是不是开始运行程序?
      • 问题
      • 最终结论
      • 最终解决步骤
  • 五、代码大小、内存占用与 map 文件分析
    • 39. IAR 编译下载后,在哪里看烧录进单片机的代码大小?怎么判断内存够不够?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 40. 为什么之前还能改 hex 文件名,现在 Options 里没有这些选项,也没有 Linker 了?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 41. `M134A001.map` 里单片机内存使用情况如何?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 42. 把这份 map 里的每个全局变量占用 RAM 的明细表整理出来
      • 问题
      • 最终结论
      • 最终解决步骤
    • 43. `STM8S003F3P6TR` 这个型号每个字母是什么意思?全部引脚和外设资源有哪些?
      • 问题
      • 最终结论
      • 最终解决步骤
  • 六、PWM 模拟转速信号与控制思路
    • 44. 每转 5 脉冲时,用 STM32F103C8T6 生成模拟转速信号,PWM 频率怎么计算?
      • 问题
      • 最终结论
      • 最终解决步骤
    • 45. 用一个按键控制单片机自动切换 PWM 频率,到顶后递减,有哪些实现思路?
      • 问题
      • 最终结论
      • 最终解决步骤
  • 资料下载

  1. IAR STM8 安装与许可证排障实录
  2. IAR 老工程迁移、Workspace 修复与输出命名清理
  3. STM8 项目编译警告、崩溃排查、定时器时间片核算
  4. 基于 STM32 的模拟转速信号发生器设计与按键切档思路

一、IAR 安装与授权阶段


1. IAR 安装启动页该怎么选?

问题

安装 IAR for STM8 时,启动页有多个选项,不知道选哪个。

最终结论

应选择:

  • Install IAR Embedded Workbench®

最终解决步骤

  1. 打开安装启动页。
  2. 不要点说明文档、release notes、浏览安装介质。
  3. 直接点Install IAR Embedded Workbench®
  4. 进入正式安装向导后再继续下一步。

2. 点击安装后没有任何提示,窗口还停在第一步,为什么?

问题

点击安装后没有弹出正式安装界面,仍停在启动页。

最终结论

这通常不是软件功能问题,而是:

  • 启动菜单只是外壳
  • 真正的安装程序没有正常启动
  • 常见原因是权限、路径、InstallShield 初始化失败

最终解决步骤

  1. 不要直接依赖启动页。
  2. 找到安装目录中的真正setup.exe
  3. 将安装包复制到纯英文、较短路径,例如:
    D:\IAR_STM8\
  4. 右键setup.exe,选择以管理员身份运行
  5. 如仍不行,清理%temp%
  6. 如仍不行,关闭杀毒软件或兼容模式重试。

3. IAR Embedded Workbench for ARM v9.50 支持 STM8 吗?

问题

EWARM 9.50 能不能做 STM8 开发。

最终结论

不支持。

  • EWARM:只用于ARM 架构
  • EWSTM8:才是用于STM8

最终解决步骤

  1. 明确芯片架构:STM8 不是 ARM。

  2. 不要安装 EWARM 来开发 STM8。

  3. 正确安装:

    • IAR Embedded Workbench for STM8

4. IAR ARM 和 Keil5 ARM 的区别是什么?为什么 8 位单片机还要单独版本?

问题

为什么 IAR ARM、Keil ARM 是 ARM 专用,8 位单片机还有单独版本。

最终结论

因为不同 MCU 架构的:

  • 指令集不同
  • 编译器不同
  • 链接器不同
  • 调试器后端不同
  • 内存模型不同

所以必须分成不同工具链产品。

最终解决步骤

理解 3 个核心点:

  1. IAR ARM / Keil ARM本质是ARM 专用编译工具链
  2. STM8、8051、AVR 不是 ARM,不能共用同一编译器后端。
  3. 所以 IAR 和 Keil 都会为不同架构提供单独版本。

5. 安装到 “Setup Type” 这一步怎么选?

问题

安装类型是选Complete还是Custom

最终结论

第一次安装建议选:

  • Complete

最终解决步骤

  1. 在安装类型界面保持Complete
  2. 点击Next
  3. 先完成完整安装,后面再考虑定制组件。

6. 开始菜单文件夹名称这一步怎么选?

问题

Program Folder 这一步要不要改。

最终结论

保持默认即可。

最终解决步骤

  1. 不修改默认名称。
  2. 直接点击Next
  3. 这一步只影响开始菜单显示,不影响软件功能。

7. 安装时出现 USB dongle driver 提示,怎么选?

问题

安装过程中出现是否安装加密狗驱动的提示。

最终结论

如果没有 IAR 硬件加密狗,直接选:

  • 否 / No

最终解决步骤

  1. 判断自己是否有 IAR 正版 USB 加密狗。
  2. 没有就选No
  3. 有就拔掉加密狗后再选Yes安装驱动。

8. 安装 ST-LINK / STice 支持包这一步怎么办?

问题

安装后又弹出 ST-LINK / STice 支持包安装。

最终结论

建议安装,直接:

  • Next

最终解决步骤

  1. 保持继续安装。
  2. 如果后面有协议页,选择接受。
  3. 完成支持包安装,便于 STM8 下载调试。

9. 许可证向导出现后怎么选?

问题

IAR License Wizard 中三种许可方式不知道怎么选。

最终结论

根据实际情况:

  • 有正式 license number:选第一项
  • 有公司网络许可证:选第二项
  • 个人试用:选第三项

最终解决步骤

  1. 没有正式授权时,选:

    • Register with IAR Systems to get an evaluation license
  2. 公司有正版号则输入 license number。

  3. 公司有 license server 则用 network license。


10. 如何用所谓 “IARkg Unis.exe” 获取许可?

问题

想用某个“许可生成器”来获得 IAR 许可。

最终结论

这是非官方 keygen / 破解工具,不能作为合法解决方案。

最终解决步骤

正确路径只有 3 种:

  1. 用 IAR 官方试用许可。
  2. 用公司正版序列号。
  3. 用公司网络许可服务器。

11. 贴出的 keygen 说明文本是什么意思?

问题

想知道那段英文/俄文说明到底在说什么。

最终结论

它明确说明自己是:

  • 非官方离线许可证生成器
  • 生成的许可证并不完整
  • 还试图通过正版许可证提取更多破解信息

最终解决步骤

  1. 判断它的性质:破解工具。
  2. 不作为正式开发环境方案。
  3. 回到官方许可流程处理授权。

12. License Manager 里看到 STM8 Standalone license,这说明什么?

问题

License Manager 里出现 STM8 license 条目,想知道是否可用。

最终结论

至少说明:

  • IAR 已经识别到 STM8 的 Standalone license
  • 当前不是“完全没授权”的状态

最终解决步骤

  1. 双击该许可查看详细信息。

  2. 重点看:

    • 是否PERMANENT
    • 是否OK
    • 是否带编译器 / 调试器 / Linker
  3. 再用最小工程编译验证实际可用性。


13. 这个 IAR 开发环境里编译、下载、调试按钮在哪里?

问题

不熟悉 IAR 工具栏,不知道各按钮在哪里。

最终结论

  • 编译:小锤子图标
  • 下载调试Project -> Download and Debug
  • 调试运行:右上角绿色三角等按钮

最终解决步骤

  1. 识别顶部小锤子:Make/Rebuild All
  2. 用菜单Project -> Download and Debug
  3. 调试时使用右上角绿色箭头、暂停、单步按钮

14. 结合图片分析这个许可证是否完整?

问题

想根据 License Manager 详情页分析许可证性质。

最终结论

该许可表现为:

  • Standalone license
  • 绑定当前机器
  • PERMANENT
  • Status = OK
  • 包含编译器、调试器、Linker、Library Source、MISRA-C

最终解决步骤

  1. 查看License Type
  2. 查看Locking criteria
  3. 查看Expires
  4. 查看Features
  5. 用实际编译、下载、调试进一步验证

15. “Extract files / IAR Library Source for STM8” 这个窗口是什么意思?

问题

想知道“是否提取库源码”窗口的含义。

最终结论

这是在问:

  • 是否现在提取 IAR 自带的库源码文件

最终解决步骤

  1. 如果只是普通开发,点No即可。
  2. 如果想研究 IAR 运行库源码,再点Yes
  3. 注意提取可能需要管理员权限。

二、IAR 工程界面与基本操作


16. 如何调出左侧像 Keil5 一样的工程文件树?

问题

左侧工程树不见了。

最终结论

IAR 左侧面板叫:

  • Workspace

最终解决步骤

  1. 点击:

    • View -> Workspace
  2. 如果只是缩窄了,拖宽左侧分隔线。

  3. 如果布局乱了,恢复默认布局。

  4. 切换到Workspace标签,而不是别的标签。


17. 为什么点击 Download and Debug 会弹出异常窗口?

问题

下载调试时弹“参数不适当”类窗口。

最终结论

高概率是:

  • 工程路径残留
  • 中文路径 / 长路径 / 旧项目残留配置
  • 老版本 IAR 对路径和调试配置兼容性差

最终解决步骤

  1. 把工程移到纯英文短路径。
  2. 去掉括号、空格、中文。
  3. 重新打开工程。
  4. 重新Rebuild All
  5. Download and Debug

18. 给出工程名修改和芯片型号核对的全步骤

问题

需要详细步骤改工程名、核对 MCU 型号。

最终结论

必须同时处理:

  • 工程目录名
  • .eww
  • .ewp
  • 工程配置里的目标器件

最终解决步骤

  1. 关闭 IAR。

  2. 复制工程到纯英文目录。

  3. 把工程目录改成简单英文名。

  4. .eww/.ewp改成简单英文名。

  5. 在 IAR 中重新打开。

  6. 进入:

    • Project -> Options -> General Options -> Target
  7. 核对实际芯片型号是否一致。

  8. 保存并Rebuild All


19. 一步一步教学,把 IAR 工程名改简单、避免中文路径、括号、空格问题

问题

希望完整写出“工程迁移+改名”的详细步骤。

最终结论

正确做法不是在原工程上硬改,而是:

  • 复制一份
  • 迁移到纯英文目录
  • 重命名工程文件
  • 重新打开并保存

最终解决步骤

  1. 关闭 IAR。

  2. 打开资源管理器。

  3. 找到原工程目录。

  4. 复制整个工程到新目录,比如:

    • D:\STM8\M134A001\
  5. 把目录名改简单。

  6. .eww.ewp改简单。

  7. 删除输出目录如Debug/Output

  8. 打开 IAR。

  9. File -> Open -> Workspace

  10. 打开新目录中的.eww

  11. Save All

  12. Rebuild All


20. 打开 Workspace 时报错:project could not be opened

问题

打开.eww时提示里面引用的.ewp打不开。

最终结论

原因是:

  • .eww里仍然记录着旧的.ewp路径
  • 改名/搬目录后,workspace 失效

最终解决步骤

  1. 不先打开旧.eww
  2. 先确认真实存在的.ewp
  3. 直接打开工程文件或重新把.ewp加入新的 Workspace
  4. 再重新保存新的.eww

21. 点击报错确定后,Workspace 变空了怎么办?

问题

点掉错误后,左边没有工程树。

最终结论

不是 Workspace 消失,而是:

  • 工程没成功加载进去

最终解决步骤

  1. 进入 IAR 后保持当前窗口。
  2. 重新把.ewp工程加入当前 workspace。
  3. 成功后再保存新的.eww

22. 这个版本没有Open -> Project选项怎么办?

问题

按照之前的方法找不到Open -> Project

最终结论

这个版本的 IAR 走的是:

  • Workspace 管理工程
  • 需要用Project -> Add Existing Project...

最终解决步骤

  1. 保持空 Workspace 打开。

  2. 点击:

    • Project -> Add Existing Project...
  3. 选择真实存在的.ewp

  4. 观察左侧工程树恢复

  5. Save Workspace As


23. 我这样操作对吗?(Add Existing Project 后工程树出来)

问题

想确认重新加入工程的方法是否正确。

最终结论

是正确的。
工程树已经恢复,说明.ewp已成功加入 Workspace。

最终解决步骤

  1. 加入.ewp
  2. 确认左侧树结构恢复
  3. 立即保存新的.eww
  4. 关闭并重新打开验证一次

24.Rebuild All通过后说明什么?

问题

贴出重编译日志,想判断当前状态。

最终结论

说明:

  • 工程结构已基本恢复
  • 编译器和链接器工作正常
  • 输出文件已经生成

最终解决步骤

  1. Errors = 0
  2. 警告先记录,不影响当前生成
  3. 进入下一步:检查芯片、调试器、下载调试

25. 不再报下载错误,但输出文件名还有旧残留,怎么办?

问题

下载正常了,但.out/.hex仍是旧工程名。

最终结论

这是工程内部输出命名残留,不影响功能,但应清理。

最终解决步骤

  1. 进入工程级:

    • Project -> Options
  2. 打开Linker

  3. 修改.out的输出名

  4. 打开Output Converter

  5. 修改.hex的输出名

  6. 删除旧.out/.hex

  7. Rebuild All


26. 输出文件名从M134A-001(1).out变成M134A-001.out,说明什么?

问题

输出名只改掉了一部分。

最终结论

说明已经部分清理了残留,但还没彻底改成新名字。

最终解决步骤

  1. 继续检查Linker

  2. 检查Output Converter

  3. 统一改成:

    • M134A001.out
    • M134A001.hex
  4. 删除旧文件后重新编译


27. 输出文件名已经改成M134A001.out,下一步是什么?

问题

日志显示输出文件名已完全正确。

最终结论

输出命名问题已经解决。

最终解决步骤

  1. 继续观察源文件路径是否仍是旧路径

  2. 如果还在旧路径,做工程迁移的最后一步:

    • 移除旧文件
    • 重新加入新目录文件

28. 如何把 IAR 工程中的旧路径源文件移除,再从新目录重新加入?

问题

希望彻底完成工程迁移。

最终结论

要做的是:

  • Remove from project
  • Add Files从新目录加回来

最终解决步骤

  1. 在工程树中逐个右键:

    • config.c
    • mian.c
    • PID.c
    • uart.c
    • VID.c
    • XH.c
  2. 选择Remove(不是删除磁盘文件)

  3. Save All

  4. Project -> Add Files...

  5. 从新目录重新加入这些文件

  6. 再次Save All

  7. Rebuild All

  8. 看编译日志中的路径是否已变成新目录


三、编译警告、报错与工程稳定性


29.Pa050: non-native end of line sequence detected是什么问题?

问题

想详细理解换行格式警告。

最终结论

这是:

  • 文件换行符不是 Windows 原生格式
  • 常见是LF而不是CRLF

最终解决步骤

  1. 用 Notepad++ 或 VS Code 打开源文件。

  2. 检查右下角行尾格式。

  3. 将格式统一改成:

    • CRLF
  4. 保存文件。

  5. 回到 IARRebuild All验证警告是否消失。


30. 这份 RAR 代码评审截图里的结论合理吗?

问题

想判断代码评审结论是否靠谱。

最终结论

整体方向合理,但有些结论说得过满:

  • “与原版一致”
  • “与原理图匹配”

这些应改成“待确认”。

最终解决步骤

  1. 区分“已由代码确认”和“待原理图/实测确认”。

  2. 保留合理部分:

    • 模块划分
    • 调度逻辑
    • 警告分析
  3. 修正过于绝对的表述。

  4. 建议评审报告采用“证据等级”写法。


31. IAR 弹出has stopped working崩溃窗口,是什么原因?

问题

IAR 本体崩溃,不是编译错误。

最终结论

这是 IDE 崩溃,最可能是:

  • 老版 IAR 与系统兼容性问题
  • 工程壳.ewp/.eww/settings异常
  • 调试配置损坏

最终解决步骤

  1. 先关闭 IAR。

  2. 判断是否可稳定复现。

  3. 清理输出目录后再试。

  4. 分别测试:

    • Rebuild
    • Download
    • Download and Debug
  5. 必要时新建最小工程验证 IAR 本体是否正常。


32. 重启电脑、删除 Debug 后,工程仍然崩溃怎么办?

问题

崩溃可以稳定复现,删 Debug 也没用。

最终结论

问题不在:

  • Debug 输出目录
  • 临时缓存

而在:

  • .ewp
  • .eww
  • settings
  • 旧工程配置壳

最终解决步骤

  1. 不再继续修旧壳。
  2. 只备份源码。
  3. 在新目录下新建一个全新 IAR 工程。
  4. 重新导入.c/.h
  5. 重新配芯片、调试器。
  6. 重新编译和下载。

33. 其他项目能正常打开和编译,说明什么?

问题

验证 IAR 软件本体是不是坏了。

最终结论

说明:

  • IAR 本体正常
  • 许可证正常
  • 编译器链接器正常
  • 问题锁定在当前特定工程的工程配置壳

最终解决步骤

  1. 用其他项目成功编译作为对照实验。
  2. 排除 IAR 安装环境问题。
  3. 将重点转向重建当前问题工程。

34. 结合代码和初始化文件,时间片计算是否准确?

问题

想验证process调度位对应的时间。

最终结论

若结合初始化代码,实际时间片是:

  • 0x01 = 2ms
  • 0x02 = 10ms
  • 0x04 = 250ms
  • 0x08 = 500ms
  • 0x10 = 1s

而不是代码中某些注释写的50ms

最终解决步骤

  1. 先算 TIM4 中断周期。
  2. 再按proces1~proces5级联关系推导。
  3. 得出真实调度周期。
  4. 修改错误注释。

35. 不看注释,只看代码配置,TIM4 到底是多少?

问题

要求纯按寄存器配置推导,不受注释干扰。

最终结论

TIM4 中断周期 = 1ms

最终解决步骤

  1. CLK_CKDIVR = 0x01说明:

    • fMASTER = 16MHz
    • fCPU = 8MHz
  2. TIM4 用的是fMASTER

  3. TIM4_PSCR = 0x06/64

  4. TIM4_ARR = 0xF9 = 249

  5. 周期:

    • 16MHz / 64 = 250kHz
    • 250 counts = 1ms

36. 为什么 Codex 还回答成 2ms?

问题

想知道 Codex 为什么算错。

最终结论

它把:

  • CLK_CKDIVR = 0x01

错误理解成:

  • HSI/2

从而误把 TIM4 输入时钟当成8MHz

最终解决步骤

  1. 明确CLK_CKDIVR位域:

    • HSIDIV
    • CPUDIV
  2. 区分:

    • fMASTER
    • fCPU
  3. TIM4 按fMASTER算,不按fCPU

  4. 所以结果应为1ms


37. 链接报错:disableInterrupts/enableInterrupts未定义,原因是什么?

问题

VID.c调用了两个符号,但链接失败。

最终结论

当前工程中:

  • 没有这两个函数的定义
  • 也没有对应宏展开
  • 这是移植/重组后缺少依赖导致的

最终解决步骤

  1. 全工程搜索:

    • disableInterrupts
    • enableInterrupts
  2. 查是否缺头文件、缺宏定义、缺源文件。

  3. 如果本意只是开关总中断,可改成当前工程已使用的方式:

    • asm("sim");
    • asm("rim");
  4. 再重新编译验证。


四、调试界面与运行控制


38. 进入调试界面后,左上角绿色箭头是不是开始运行程序?

问题

不知道 Debug 模式下绿色箭头的作用。

最终结论

是的,它表示:

  • Run / Continue

最终解决步骤

  1. 进入 Debug 模式后程序通常停住。
  2. 点击绿色三角箭头,程序继续运行。
  3. 如果命中断点会再次停下。
  4. 配合暂停、单步、停止按钮使用。

五、代码大小、内存占用与 map 文件分析


39. IAR 编译下载后,在哪里看烧录进单片机的代码大小?怎么判断内存够不够?

问题

想知道 Flash 和 RAM 占用怎么看。

最终结论

最准确的方式不是看.hex文件大小,而是看:

  • Messages
  • .map文件
  • 芯片数据手册中的总 Flash / RAM

最终解决步骤

  1. 在 IAR 中启用 map 输出。

  2. Rebuild All

  3. 打开生成的.map

  4. 重点看:

    • readonly code memory
    • readonly data memory
    • readwrite data memory
  5. 用它们分别与芯片总 Flash / RAM 对比。


40. 为什么之前还能改 hex 文件名,现在 Options 里没有这些选项,也没有 Linker 了?

问题

进入 Options 后只看到局部编译选项,看不到工程级设置。

最终结论

打开的是:

  • node 级 options

不是:

  • 工程级 options

最终解决步骤

  1. 关闭当前 Options 窗口。

  2. 在左侧工程树里先选中工程根节点

  3. 再从顶部菜单进入:

    • Project -> Options...
  4. 这时才会看到:

    • General Options
    • Linker
    • Debugger
    • Output Converter

41.M134A001.map里单片机内存使用情况如何?

问题

想分析整个工程对 Flash / RAM 的占用。

最终结论

这份工程大致是:

  • Flash 总 8KB
  • RAM 总 1KB
  • Flash 实际占用约 3471 bytes
  • 普通 RAM 占用约 368 bytes

整体内存是够用的。

最终解决步骤

  1. .icf或 map 判断芯片内存范围。

  2. 从总计行读取:

    • readonly code memory
    • readonly data memory
    • readwrite data memory
  3. 计算占比。

  4. 判断余量是否足够。


42. 把这份 map 里的每个全局变量占用 RAM 的明细表整理出来

问题

希望整理出变量级的 RAM 占用表。

最终结论

整理出了:

  • 已命名对象
  • 未显示名字但已占地址的对象
  • 编译器.vregs
  • CSTACK

最终解决步骤

  1. .near.bss段里提取变量。

  2. 读取每个符号的:

    • 地址
    • 大小
    • 来源模块
  3. 将普通 SRAM、绝对地址映射对象、栈分开统计。

  4. 给出按模块合计结果。


43.STM8S003F3P6TR这个型号每个字母是什么意思?全部引脚和外设资源有哪些?

问题

想系统理解芯片订货号和资源。

最终结论

型号含义是:

  • STM8:STM8 系列
  • S:标准系列
  • 003:Value line 低密度
  • F:20 pin
  • 3:8KB Flash
  • P:TSSOP
  • 6:-40~85℃
  • TR:编带盘装

并整理了:

  • 全部 TSSOP-20 引脚
  • UART / SPI / I²C / ADC / TIM1 / TIM2 / TIM4 等外设资源

最终解决步骤

  1. 先拆订货号。
  2. 再看芯片总资源。
  3. 再按封装列出 20 脚引脚功能。
  4. 最后按外设重新归类,便于原理图使用。

六、PWM 模拟转速信号与控制思路


44. 每转 5 脉冲时,用 STM32F103C8T6 生成模拟转速信号,PWM 频率怎么计算?

问题

希望把一组 RPM 转成输出脉冲频率。

最终结论

公式是:

[
f=\frac{RPM\times 5}{60}=\frac{RPM}{12}
]

并计算出了这 12 个目标频率:

  • 1500 → 125 Hz
  • 1800 → 150 Hz
  • 2000 → 166.667 Hz
  • 2300 → 191.667 Hz
  • 2500 → 208.333 Hz
  • 2800 → 233.333 Hz
  • 3000 → 250 Hz
  • 3300 → 275 Hz
  • 3600 → 300 Hz
  • 4000 → 333.333 Hz
  • 4200 → 350 Hz
  • 4500 → 375 Hz

最终解决步骤

  1. 用公式把 RPM 换算成 Hz。
  2. 推荐先把 STM32 定时器分到1MHz
  3. 再用:
    [
    ARR=\frac{1000000}{f}-1
    ]
  4. 50% 占空比:
    [
    CCR=\frac{ARR+1}{2}
    ]
  5. 建议做成查表切换。

45. 用一个按键控制单片机自动切换 PWM 频率,到顶后递减,有哪些实现思路?

问题

希望一个按键实现频率档位往返扫描。

最终结论

最推荐方案是:

  • 频率表 + 当前索引 + 方向标志

最终解决步骤

  1. 定义频率表。

  2. 定义当前档位索引index

  3. 定义方向变量:

    • dir = 1递增
    • dir = -1递减
  4. 每次按键事件时执行:

    • 若递增且未到顶:index++
    • 若到顶:改方向并index--
    • 若递减且未到底:index--
    • 若到底:改方向并index++
  5. 每次切换后更新 PWM 的 ARR / CCR。

  6. 按键检测建议采用:

    • 消抖
    • 单击事件触发
    • 主循环处理,不推荐把全部逻辑塞进中断

资料下载

  • 资料汇总:IAR-STM8-调速控制器2026版资料-PCB-Code-(20260327).rar
http://www.jsqmd.com/news/653458/

相关文章:

  • 微服务系列(七) 网关注册中心配置中心-微服务基础设施搭起来
  • 双系统或多系统的引导和分区那些事
  • ComfyUI-Manager终极指南:三步搞定AI工作流节点管理难题
  • 如何15分钟完成vJoy虚拟摇杆完整配置:从零到实战的终极指南
  • 3步搞定Windows媒体播放:LAV Filters终极解码方案
  • Halcon图像清晰度评价实战:关键算子intensity的应用与优化
  • 香港,正在成为中国科技出海的最后一道门?
  • 猫抓浏览器扩展:从混乱到有序的视频资源智能管理指南
  • 零基础吃透C语言基础运算符!干货详解+避坑指南,编程基础稳了
  • 别再只懂‘方向盘变轻’了!保姆级拆解EPS电动助力转向的5大隐藏功能(含LKA/APA)
  • 生化危机2重制版修改器 风灵月影 支持最新版本
  • 无人机飞控实战:从Haversine到正交投影,如何为你的PX4/ArduPilot项目选择最快距离算法
  • FFmpeg在Node.js后端开发中的实战:从视频上传到实时转码的完整流程
  • 保姆级教程:在Qt Creator里集成PaddleOCR V5模型(Windows+OpenCV4.4.0环境)
  • 3步掌握Scrcpy GUI多设备控制:电脑同时操控多台Android手机的终极指南
  • 高效清理Windows 11系统臃肿:从卡顿到流畅的终极解决方案
  • Unity微信小游戏分享功能避坑指南:从WX.ShareAppMessage到OnShareTimeline的完整配置流程
  • STM32-笔记29-蓝牙模块实战:从零搭建无线通信系统
  • Pixel Script Temple参数详解:Creativity Slider数值映射与剧本风格控制逻辑
  • 软件认证的考试体系与职业发展
  • 医疗器械BOM清单的分类和注意事项
  • 详解非连续块Gather CUDA内核优化要点,剖析GPT-6等多模态大模型的优化思路,技术方法通用性强,适配各类模型优化需求。
  • YOLO 实例分割用于构建高精度的 **语义分割模型**,实现对管道内部裂缝、腐蚀、错口等缺陷的像素级识别 排水管道缺陷分割数据集的训练及应用
  • 3D打印风向标:工业下沉、消费升级,惠普、拓竹两巨头同日发布新品
  • 避坑指南:PVE网络配置中vmbr0桥接失败的5个常见原因及解决方法
  • 从一次抓包看透TLS 1.2握手:Wireshark拆解Client Hello、Server Hello和密钥交换
  • 别再被栅栏效应坑了!MATLAB FFT实战:如何用1024个采样点看清505Hz的信号?
  • 3步构建企业级智能体平台:MaxKB技术深度解析与实战部署
  • FPGA性能基准测试:三层方法论与工程实践
  • 【SITS2026独家首发】:AI故事创作应用的5大颠覆性能力与企业落地实操指南