stm32的调试之路-OpenOCD+JLINK

作者详细记录了从搭建Cortex-M3的开发调试环境到使用OpenOCD进行程序调试的过程,包括了解GPIO资料、阅读libopencm3中的gpio.h、编写小程序并成功调试。分享了通过命令行执行openocd和telnet进行程序烧录和运行的方法,以及观察运行结果的过程。最后,作者提到调试通过后决定早点休息。

这两天吧cortex m3的开发调试环境给弄好了,只可惜还没有写过程序,没有用OpenOCD真正的调试过程序,

今天大体了解了一下GPIO的资料,看了看libopencm3中gpio.h。

仿照例程写了一个小程序,虽然似懂非懂的,但也调试通过了

$sudo openocd -f jlink.cfg -f stm32f1.cfg

$telnet localhost 4444

>halt

>flash write_image erase /home/yangmeng/test.hex

>reset

这样就可以看到运行结果了。

感觉还是不错的,时间不早了,要早点休息了


### STM32使用JLink进行调试的配置方法 #### 1. 将ST-Link转换为JLink模式 为了能够通过JLinkSTM32进行调试,首先需要将开发板上的ST-Link虚拟成JLink设备。具体操作可以通过软件工具完成,例如在OpenOCD或Segger提供的工具中实现这一功能[^1]。 #### 2. 设置JTAG/SWD模式 STM32支持两种主要的调试接口:JTAG和SWD。通常情况下,默认启用的是SWD模式。如果需要切换到JTAG模式或者调整引脚的功能,则需调用`GPIO_PinRemapConfig()`函数来重新映射引脚的功能。该函数位于`stm32f10x_gpio.c`文件中,其定义如下: ```c void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState); ``` 其中: - `GPIO_Remap` 参数用于指定要重映射的具体引脚组合; - `NewState` 参数决定是否开启此重映射功能 (ENABLE 或 DISABLE)[^2]。 对于某些特定型号(如STM32F4系列),可能还需要进一步确认具体的引脚分配以及对应的寄存器设置情况。 #### 3. Eclipse环境下的JLink配置 当采用Eclipse IDE作为开发平台时,需要正确配置JLink的相关参数才能顺利启动调试会话。这一步骤主要包括以下几个方面: - **指定JLink驱动路径**: 在项目属性窗口下找到“MCU>SIGGERR J-Link Path”,在此处填入本地安装目录下的实际位置,并确保指向正确的可执行文件 (`JLinkGDBServerCL.exe`) [^3]。 另外还需注意端口号的选择以及其他高级选项的设定,这些都会影响最终连接效果的好坏程度。 #### 4. 解决潜在冲突问题 由于部分管脚被预设成了专用信号线用途,在未做任何更改之前它们无法正常当作通用输入/输出端口使用。比如PA13~PA15 和 PB3/PB4 这几个针脚就经常会被预留作调试目的之用。因此当我们希望把这些资源解放出来供其他任务所用的时候就必须仔细考虑到底应该采取哪种策略来进行处理。以下是几种常见的解决方案及其适用场景描述: | 方案名称 | 描述 | |-----------------------------|---------------------------------------------------------------------------------------| | 全部禁用 SWJ | 所有五个引脚均恢复为普通 IO 功能 | | 只保留 NJTRST | 除了 NJTRST 外其余四个均可正常使用 | | 禁止 JTAG-DP 并启用了 SW-DP | PA15、PB3、PB4 能够充当常规 I/O | | 同时关闭两者 | 完全释放上述提到的所有物理接点 | 以上每种情形都需要借助相应的 API 来达成目标,而最常用的便是前面提及过的那个关于引脚重定向的方法了[^4]。 --- ### 示例代码片段展示如何修改默认行为以允许更多灵活性 下面给出了一段简单的例子用来演示怎样改变原有布局从而获得额外自由度: ```c #include "stm32f1xx_hal.h" int main(void){ HAL_Init(); /* Enable all pins as normal GPIOs */ __HAL_AFIO_REMAP_SWJ_DISABLE(); while(1){ // Your application code here... } } ``` 在这里我们调用了宏定义形式的操作符(`__HAL_AFIO_REMAP_...`)直接作用于底层硬件结构之上达到预期的效果即完全解除限制让所有的关联线路都可以按照标准方式进行交互活动不再局限于单一角色定位之中去了. ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值