打印
[STM32F1]

变量监视与表达式

[复制链接]
144|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
4c1l|  楼主 | 2024-12-9 14:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
变量监视
在调试过程中,开发者常常需要监视程序中某些关键变量的值,确保它们按照预期变化。
设置方法:在调试窗口的 “Variables” 或 “Watch” 面板中,右键点击并选择 “Add Watch”,输入变量名。

使用特权

评论回复
沙发
4c1l|  楼主 | 2024-12-9 14:58 | 只看该作者
表达式监视
在调试时,可以设置复杂的表达式进行监视。例如,可以监视多个变量的和,或者某个条件是否成立。
设置方法:在 “Watch” 窗口中,添加自定义表达式,如 counter > 5,这样可以在程序执行时动态查看条件是否成立。

使用特权

评论回复
板凳
4c1l|  楼主 | 2024-12-9 14:58 | 只看该作者
示例
c
复制代码
// 监视变量,查看按键是否被正确按下
volatile uint8_t buttonState = 0;
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {
    if (GPIO_Pin == GPIO_PIN_0) {
        buttonState = 1; // 监视 buttonState 变量
    }
}

使用特权

评论回复
地板
4c1l|  楼主 | 2024-12-9 14:59 | 只看该作者
单步调试
单步调试允许开发者逐行执行代码,观察每一步的执行结果,帮助定位问题。

3.3.1 单步执行
单步执行:逐行执行程序,每次执行一条指令,便于跟踪代码执行流程。
单步跳过:跳过当前函数或代码块,直接进入下一步。
示例:在按键回调函数中设置单步调试,检查是否正确执行每一行代码。
3.3.2 调试模式
普通模式:程序运行时逐行执行并查看状态。
临时模式:在程序停止时使用 IDE 提供的变量监视功能查看系统状态。

使用特权

评论回复
5
4c1l|  楼主 | 2024-12-9 14:59 | 只看该作者
调试信息输出
在无法使用硬件调试时,可以通过 串口(UART)、USB 或 SWD 输出调试信息,如日志或变量值。

代码示例:通过 UART 输出调试信息
c
复制代码
void UART_DebugLog(const char* message) {
    HAL_UART_Transmit(&huart1, (uint8_t*)message, strlen(message), HAL_MAX_DELAY);
}
使用此函数可以将调试信息通过 UART 输出到终端或 PC。

使用特权

评论回复
6
4c1l|  楼主 | 2024-12-9 14:59 | 只看该作者
错误标志与异常
3.5.1 捕获硬件异常
通过调试工具,可以查看系统发生的硬件异常,如 硬件断言、总线错误、内存访问错误 等。
在 STM32CubeIDE 或 Keil 中可以查看 “Faults” 窗口,帮助识别和定位硬件异常。
3.5.2 调试外部设备
对于一些外部设备(如传感器、外部存储器等),可以通过 外部中断 和 总线通信(如 SPI、I2C、UART 等)捕获数据流,并在调试时分析。

使用特权

评论回复
7
4c1l|  楼主 | 2024-12-9 14:59 | 只看该作者
故障排查技巧
4.1 常见问题与排查方法
1. 程序未进入预期位置
排查方法:
确保程序启动地址正确。
检查启动文件和链接脚本中的地址设置。
在主循环或关键函数中设置断点,确认程序是否按照预期执行。
2. 外设无法正常工作
排查方法:
确保外设初始化代码正确。
检查时钟设置,确保外设时钟已启用。
通过波形查看工具(如示波器)检查外设信号。
3. 内存溢出
排查方法:
检查栈和堆的大小设置。
使用 IDE 的 “Memory Usage” 面板查看内存使用情况。
启用 堆栈保护功能,检测溢出。
4. 程序卡死或重启
排查方法:
检查是否发生硬件异常或看门狗复位。
启用硬件看门狗,查看系统是否重启。
查看电源稳定性和复位原因。

使用特权

评论回复
8
4c1l|  楼主 | 2024-12-9 14:59 | 只看该作者
硬件调试接口(SWD/JTAG) 是 STM32 调试的基础,开发者可通过调试工具实现程序调试、故障排查和性能优化。
断点、单步调试、变量监视 等技术能帮助开发者快速定位问题。
故障排查 时需要结合调试信息、外设状态和系统日志,系统性地分析程序执行过程,定位和修复问题。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

59

主题

600

帖子

2

粉丝