原创 stm32学习笔记

2010-3-22 16:24 2781 7 7 分类: 工程师职场

1.#ifdef  DEBUG
/*******************************************************************************
* Macro Name     : assert_param
* Description    : 这个宏用来检测参数是否正确.
*                        只有库在DEBUG模式编译的时候才用这个宏
* Input              : 如果输入是 false,那么将调用assert_failed这个函数


                          这个函数将报告是哪个源文件和源文件的哪一行出错
*                        如果输入是true ,也就是说参数没问题,这个宏什么也不做 
*******************************************************************************/ 
     #define assert_param(expr) ((expr) ? (void)0 : assert_failed((u8*__FILE__,__LINE__)) 
      void assert_failed(u8* file, u32 line);
#else
      #define assert(expr) ((void)0)


      //有的源程序中是这样写的


     //#define assert_param(expr) ((void)0)


     //而库中都是用的#define assert(expr) ((void)0)


     //比如assert(IS_CAN_FILTER_NUMBER(CAN_FilterInitStruct->CAN_FilterNumber));


     //这样编译就会出现错误 改成 assert(expr)((void)0)就可以了


    //这可能是库版本的问题
#endif


2.stm32f10x_it.h


这个文件中定义了 你在工程中将要用到的库文件


比如说你要用到ADC功能那么就要 定义这个宏_ADC(#define _ADC)


比如说你要用到CAN功能那么就要 定义这个宏_CAN(#define _CAN)


不但要定义工程中将要使用的某个功能的宏(如#define_CAN)还要在工程中添加这个功能所对应的源文件如(stm32f10x_CAN.c)如果这个文件添加了而没定义宏或者定义了宏而没有添加源文件那么编译的时候将出现错误


同时在这个文件中还定义了外部晶振的频率如#define HSE_Value    ((u32)8000000)如果忽视了这个参数可能对使用串口带来麻烦


这里还定义了一个宏用来检测编程人员对外设寄存器的配置正确与否            #ifdef  DEBUG
  #define assert_param(expr) ((expr) ? (void)0 : assert_failed((u8 *)__FILE__, __LINE__))
  void assert_failed(u8* file, u32 line);
#else
  #define assert(expr) ((void)0)
#endif


 


 


http://www.armjishu.com/bbs/viewtopic.php?id=2124

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
7
关闭 站长推荐上一条 /3 下一条