这个想法是从K60上得出来的;今天再帮一哥们看程序的时候,他可以用串口看出来那个文件那一行文件出现问题了,于是很好奇,就问他,他也不知道,然后我就细心的研究了下他的库;发现一个不错的调试方法,其实这个在stm32里面本身也是设置好了的,但是大家一致都没有去用;
先看stm32f10x_conf.h里面的一些内容:
~~~
/* Exported macro ------------------------------------------------------------*/
#ifdef USE_FULL_ASSERT
/**
* @brief The assert_param macro is used for function's parameters check.
* @param expr: If expr is false, it calls assert_failed function which reports
* the name of the source file and the source line number of the call
* that failed. If expr is true, it returns no value.
* @retval None
*/
#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
/* Exported functions ------------------------------------------------------- */
void assert_failed(uint8_t* file, uint32_t line);
#else
#define assert_param(expr) ((void)0)
#endif /* USE_FULL_ASSERT */
~~~
默认情况下是:
#define assert_param(expr) ((void)0)
明显,没有什么用,如果我们想调试的时候,可以加一个宏定义:
~~~
#define USE_FULL_ASSERT
~~~
那么我们就可以用这个判断了;
~~~
#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
~~~
void assert_failed(uint8_t* file, uint32_t line);
不过还没有完,我们需要在再写一个assert_failed的函数,来实现他的功能:
~~~
#ifdef USE_FULL_ASSERT
#include "stdio.h"
void assert_failed(uint8_t* file, uint32_t line)
{
char buff[64];
sprintf(buff,"%s %d",file,line);
RS232SendStr(buff);
while(1);
}
#endif
~~~
你还可以在里面加入其他调试信息;
this all!
- 前言
- 【菜鸟入门】stm32的第一个程序--LED
- 【菜鸟入门】stm32 之 扫描按键
- 【菜鸟入门】stm32 之 中断按键
- 【菜鸟入门】stm32 之 USART
- 【菜鸟入门】stm32 之 iic
- 【菜鸟入门】stm32 之 eeprom
- 【菜鸟入门】stm32 之 pwm
- 【菜鸟入门】stm32 之 ADC 模数转换
- 【菜鸟入门】stm32 之 实时时钟
- 【菜鸟入门】stm32 之 DMA
- 【菜鸟入门】stm32 之 DAC
- 【STM库应用】stm32 之 USART
- 中断源去抖办法
- stm32 启动代码应用技巧
- 【STM库应用】stm32 之 IIC应用
- 【STM库应用】stm32 之 中断按键初始化(注意事项)
- 关于结构体初始化
- 【STM库应用】stm32 之 TIM (详解一 通用定时器)
- 【STM库应用】stm32 之 TIM (详解二 脉冲宽度、周期测量)
- 【stm32库应用】SD驱动移植(基于SDIO外设)
- SD卡fat文件系统移植
- stm32 DMA初始化选项研究
- stm32 灵活静态存储控制器(FSMC)(NORFLASH\PSRAM)
- 【stm32+uC/OS-II】ucosii移植简单详细步骤
- STM32 加入调试信息来调试代码
- NRF24L01 无线通信模块使用