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

keil调试设置

你要的是 Keil 不烧 Bootloader、直接调试 App 的方法,核心是配置调试初始化脚本(.ini)强制 PC/SP 指向 App 入口,同时配合 App 工程的地址与向量表设置。下面是完整可直接操作的步骤:


一、先配置 App 工程(必须)

1. 修改 Flash 起始地址(Target 页)

打开Options for Target → Target

  • IROM1 Start:填你的 App 实际起始地址(如0x08008000,替换成你自己的)
  • IROM1 Size:按剩余 Flash 空间填写(如0x78000
  • IRAM1 保持默认(0x20000000
2. 重定向中断向量表(代码里必须加)

main()最开头、任何中断使能前添加:

c

// 替换成你的 App 起始地址 #define APP_ADDR 0x08008000 SCB->VTOR = APP_ADDR; // 向量表偏移

或在SystemInit()里设置:

c

SCB->VTOR = FLASH_BASE | 0x8000; // 偏移量 = App 地址 - 0x08000000

⚠️ 不设 VTOR,App 一进中断就会跑飞。

3. 检查分散加载文件(.sct,可选)

确保 FLASH 区域定义与 IROM1 一致:

plaintext

LR_ROM1 APP_ADDR 0x78000 { ER_ROM1 APP_ADDR 0x78000 { *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) } RW_RAM1 0x20000000 0x10000 { .ANY (+RW +ZI) } }

二、配置调试初始化脚本(核心:直接跳 App)

1. 新建 .ini 文件(如app_debug.ini

内容如下(替换成你的 App 地址):

ini

// 定义初始化函数 FUNC void Setup(void) { // 从 App 向量表读取初始 SP(地址0)、PC(地址+4) SP = _RDWORD(0x08008000); PC = _RDWORD(0x08008004); // 强制设置向量表偏移(同代码里的 VTOR) _WDWORD(0xE000ED08, 0x08008000); } // 加载 App(增量下载,不擦除 Boot 区) LOAD %L INCREMENTAL // 执行初始化 Setup(); // 直接跳到 main 开始调试 g, main
  • %L代表当前工程的.axf文件
  • INCREMENTAL:只下载 App 区,不擦除0x08000000~0x08007FFF(Boot 区)
2. Keil 里加载 .ini(Debug 页)
  1. Options for Target → Debug
  2. 选择你的调试器(ST-Link/J-Link)
  3. 勾选Initialization File→ 点...选中你刚建的app_debug.ini
  4. Settings → Flash Download
    • 确认编程算法覆盖 App 地址范围
    • 取消Erase Full Chip,只擦 App 区(避免误擦 Boot)

三、开始调试(不烧 Boot)

  1. 编译 App 工程
  2. 点击Debug(或 Ctrl+F5)
  3. Keil 会:
    • 只下载 App 到0x08008000
    • 执行.ini脚本,把 PC/SP 设到 App 入口
    • 直接停在main()第一行,开始调试

四、常见问题与注意

  1. 调试时还是从 0x08000000 启动

    • 检查.ini是否正确加载
    • 取消Debug → Settings → Run to main()(默认从复位向量跑)
    • 改用脚本里的g, main强制跳转
  2. App 能跑但中断异常

    • 确认VTOR已在main最开头设置
    • 地址必须是 0x200/0x800 对齐(Cortex‑M 要求)
  3. 下载时报地址错误

    • 检查IROM1 Start.ini地址一致
    • 调试器Flash Download里的地址范围要包含 App 区

五、快速验证(看是否生效)

  • 调试时看寄存器窗口:PC应等于0x08008004(App 复位向量)
  • .map文件:Execution Region FLASH基地址应为你的 App 地址
http://www.jsqmd.com/news/568263/

相关文章:

  • Z-Image Atelier 跨平台部署:应对不同操作系统的环境配置要点
  • 2026年项目管理工具选型指南:功能对比、适用场景与避坑建议
  • 创维E900V22D_S905L3S(B)芯片-安卓9.0-免拆线刷固件包及短接神器使用指南
  • 如何评估SEO优化的成果和效果_SEO页面优化的基本步骤有哪些
  • 批发密度板规格齐全品类多哪个质量好
  • DiagnosticSessionControl (10服务) 函数解析及UDS $10服务指导文档
  • 【PyTorch 3.0静态图分布式训练黑盒揭秘】:从FX Graph到Triton Kernel调度的7个隐藏断点与性能衰减临界值
  • 二叉树高频面试 2 道神题!递归 BFS 层序遍历 + 有序数组转平衡 BST,代码极简秒懂
  • 突破百度网盘限速:面向资源获取者的高效直链解析方案
  • Pixel Epic智识终端用户体验报告:200+科研人员真实反馈与改进建议
  • 救命!电路板维修高频故障排查口诀,背会秒上手,修板快准稳
  • Vivado 时序约束文件 (.xdc) 管理与维护实战指南:从单文件到团队协作
  • 【Agents】自定义子代理进阶:后台执行
  • 大数据在电力行业应用案例解析 -【电力技术】(25)RPA 在电力业扩报装中的自动化应用与实现
  • 图纸加密方法有哪些?分享3种图纸加密的方法,保护图纸安全
  • 路由器、交换机、光猫有什么区别?网络设备基础入门
  • 音频驱动面部动画:Audio2Face技术原理与实践指南
  • 3分钟搞定Windows和Office激活:KMS_VL_ALL_AIO智能脚本使用指南
  • 快马平台快速生成git安装配置交互教程,零基础也能轻松上手
  • Windows前端开发提速:用Bun一键替换Yarn/Npm,加速Vue与React项目构建
  • 【立煌】友达10.1寸G101STN01.C工业液晶屏LCD
  • 嵌入式开发实用代码片段与调试技巧
  • Stable Yogi Leather-Dress-Collection 批量生成与任务队列管理方案
  • Python内存监控体系搭建:Prometheus+Custom Metrics+内存火焰图,实现OOM前15分钟精准预警
  • AI赋能.NET开发:让快马平台智能生成Redis缓存与消息队列集成代码
  • 独立站页面结构优化的注意事项是什么_独立站 SEO 与品牌建设的关系是什么
  • ESP32 Wi-Fi配网实战:AP+Web双模轻量级方案
  • Python大麦网智能抢票脚本:三分钟搭建你的自动购票系统
  • Python智能内存管理策略深度评测(CPython 3.9–3.12全版本横评):谁真正降低了47.6% OOM风险?
  • 效率提升:用快马快速构建排序算法性能对比工具,科学选型