stm32学习开发debug记录(1)

本系列记录开发stm32过程中遇到的一系列bug,可作为日后debug时的参考,也可为同刚起步学习stm32的小白作为debug参照。

安装

(1)安装keil最新版本可参照https://www.cnblogs.com/armfly/p/12564643.html,网页中附有keil最新版本安装包和各种stm32开发所需的支持包。

注意!用购买的开发板测试时,采用过高版本的keil可能发生固件无法更新的情况,提示: The up-to-date firmware is too big for this board (4960 bytes in excess). Can't update.
解决方案:使用较低版本的keil开发(我用5.2.3可行)
或参考暴力升级你的 ST-Link 及 STM32CubeIDE.

(2)安装环境配置:
keil5开始无需在*·option->c/c++->Preprocessor Symbels->Define*中添加“STM32F10X_HD”,否则编译会报错。
Debug中选择use->ST-Link Debugger,Debug和utility的setting中都要选择Flash Download->Reset and Run.并添加选择合适的闪存,否则会报错Error: Flash Download failed - "Cortex-M3"

新建开发文件

(1)Project->New uVersion Project。选择对应型号的stm32开发芯片(或其它芯片。视需要加入支持包),必选CMSIS->Core以及Device->Startup

### STM32 中 `log_debug` 的用法与实现 在嵌入式开发环境中,日志记录对于调试和维护至关重要。针对STM32系列微控制器,在无操作系统的情况下实现类似于`log_debug`的功能通常依赖于自定义的日志库或是利用现有的轻量级框架。 #### 自定义日志功能的构建 为了创建一个简单的`log_debug`函数,可以考虑如下方案: 1. **宏定义控制** 使用编译器预处理指令来决定是否启用调试信息打印。这可以通过条件编译完成,从而不影响最终产品的性能[^1]。 ```c #ifdef DEBUG_ENABLE #define LOG_DEBUG(fmt, ...) printf("[DEBUG] " fmt "\r\n", ##__VA_ARGS__) #else #define LOG_DEBUG(...) #endif ``` 2. **串口通信模块集成** 将上述定义好的`LOG_DEBUG`宏连接至USART或其他外设接口上用于数据传输。这样做的好处是可以实时查看设备运行状态而不必拆解硬件获取内部变量值。 3. **缓冲区管理优化** 对于频繁调用的日志输出操作,建议引入环形缓冲区设计思路,既能够有效减少内存碎片化又提高了效率。当遇到异常情况时还可以保存最近一段时间内的所有事件以便后续分析。 4. **格式化字符串支持** 类似U-Boot中的命令注册方式[U_BOOT_CMD][^2],通过结构体封装不同级别的消息模板(如警告、错误等),并允许开发者灵活配置所需显示的内容形式。 ```c typedef struct { const char *prefix; void (*output)(const char*, va_list); } LogLevel; static inline void vprint_prefix(const char* prefix, const char* format, va_list args){ if (prefix != NULL) { printf("%s ", prefix); } vprintf(format, args); } void debug_output(const char* msg, va_list ap){ vprint_prefix("DBG:", msg, ap); } ``` 综上所述,虽然官方文档可能并未直接提供名为`log_debug`的具体API说明,但是借助以上介绍的方法完全可以满足日常开发过程中对细粒度日志的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值