STM32CubeIDE使用笔记(04):杂项记录(要点、方法、技巧等等)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/Naisu_kun/article/details/97439758

目的

本文主要记录了STM32CubeIDE使用中的一些要点、方法、技巧等等。

添加引用自己的文件

新建文件/文件夹:

  • 在IDE左侧项目资源管理器(Project Explorer)中选择对应目录,然后右键 New 子菜单中可以选择新建源码文件、头文件、文件夹、源码文件夹等(如果没有请选择Other,在弹出窗口的C/C++中查找);

导入文件/文件夹:

  • 方式一:在IDE左侧项目资源管理器(Project Explorer)中选择对应目录,然后右键 import... ,选择弹出窗口的 General > File System 然后 Next> ,在新窗口中浏览选择要导入的目录/文件,然后导入;
  • 方式二:直接将要添加的文件/文件夹拖入到项目资源管理器(Project Explorer)中对应目录(要添加的文件/文件夹不要提交放在该目录中,拖动添加时会询问是否复制到该目录中或是仅仅链接);

将头文件和源码添加到项目中:
添加文件和文件夹后在使用时可能会提示找不到,需要将头文件和源码路径添加到项目中, 在IDE左侧项目资源管理器(Project Explorer)中选择项目右键 Prorerties 在弹出窗口的 C/C++ General > Paths and Symbols 中的 IncludesSource Location 分页下分别添加对应路径:
在这里插入图片描述
另外在多说一句:默认情况下自己的文件中只要引用 main.h 就可以调用STM32CubeMX配置导入的各种库了。

编译生成 bin / hex 文件

默认情况下STM32CubeIDE编译生成的是elf格式的固件,如果想要bin或hex格式的固件可以在IDE左侧项目资源管理器(Project Explorer)中选择项目右键 Prorerties 在弹出窗口的 C/C++ Build > Settings > Tool Settings > MCU Postbuild outputs 中选中生成bin和hex文件即可:
在这里插入图片描述

编译优化等级设置

在IDE左侧项目资源管理器(Project Explorer)中选择项目右键 Prorerties 在弹出窗口的 C/C++ Build > Settings > Tool Settings > MCU xxx Compiler > Optimization 中可以设置编译优化等级。优化等级会影响编译生成固件占用Flash、RAM大小,影响运行效率,优化设置有可能会导致代码运行异常,需要根据实际情况设置:
在这里插入图片描述

全局宏定义

在IDE左侧项目资源管理器(Project Explorer)中选择项目右键 Prorerties 在弹出窗口的 C/C++ General > Paths and Symbols > Symbols 中可以添加全局宏定义:
在这里插入图片描述

assert_param函数使用

STM32 HAL库中的函数大多内部都有assert_param函数,该函数用来检查用户输入参数是否正确,默认情况下在stm32fxxx_hal_conf.h文件中可以找到如下定义:

/* ########################## Assert Selection ############################## */
/**
  * @brief Uncomment the line below to expanse the "assert_param" macro in the 
  *        HAL drivers code
  */
/* #define USE_FULL_ASSERT    1U */



/* 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)0U : assert_failed((uint8_t *)__FILE__, __LINE__))
/* Exported functions ------------------------------------------------------- */
  void assert_failed(uint8_t* file, uint32_t line);
#else
  #define assert_param(expr) ((void)0U)
#endif /* USE_FULL_ASSERT */

在main.c中可以找到下面语句:

#ifdef  USE_FULL_ASSERT
/**
 * @brief  Reports the name of the source file and the source line number
 *         where the assert_param error has occurred.
 * @param  file: pointer to the source file name
 * @param  line: assert_param error line source number
 * @retval None
  */
void assert_failed(uint8_t *file, uint32_t line)
{ 
  /* USER CODE BEGIN 6 */
  /* User can add his own implementation to report the file name and line number,
     tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  /* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

可以看到默认情况下assert_param是没有启用的,可以通过下面几种方式之一启用:

  • 在STM32CubeMX生成代码时勾选 Project Manager > Code Generator > HAL Settings > Enable Full Assert
  • 在项目全局宏定义中添加 USE_FULL_ASSERT (方式见上节,推荐);
  • 手动将stm32fxxx_hal_conf.h文件中 /* #define USE_FULL_ASSERT 1U */ 取消注释(不推荐);

启用assert_param后可以在main.c的 void assert_failed(uint8_t *file, uint32_t line){} 函数中添加语句,比如通过串口或SWV打印输出相关信息,该函数会在你使用HAL库函数输入参数错误的时候运行。

正式发布版的程序中建议关闭该功能,因为该功能对性能和固件体积影响比较大。

调试异常

STM32CubeIDE有时会出现启动调试报错或是调试无数据上传等异常,排除硬件和调试配置等原因后还是异常的话,可以尝试重启STM32CubeIDE,若还是不行尝试重启电脑。

使用C++

STM32CubeIDE可以在新建项目时选择建立为C++项目,或是在已有的C项目中右击选择 Convert to C++ 将项目转为C++项目。但是目前版本中(1.0.2)如果你在该C++项目中使用.cpp文件然后编译会报错。原因是该C++项目的main()函数存在于mian.c中,导致至少有一个.c文件会引用到某个.cpp文件中的内容,最终编译时报错。解决方法很简单,将mian.c重命名为mian.cpp就成。
在这里插入图片描述
注意事项:

  • 当你用STM32CubeMX重新生成代码后项目中就会有一个main.c和一个main.cpp,你需要根据实际情况整合代码,保留一份main.cpp;
  • 根据使用情况可能需要将main.h中以下几行代码注释掉:
    #ifdef __cplusplus
    extern "C" {
    #endif
    
    
    
    #ifdef __cplusplus
    }
    #endif
    

STM32CubeMX代码生成异常

偶尔会碰到在STM32CubeMX中配置了资源生成代码,但代码并未正确配置生成的情况,尝试重新在STM32CubeMX中动一动相关资源选项,然后重新生成代码,一般重复之后就可以正确生成代码了。

总结

要点、方法、技巧等没法一下子全部描述全面,本文将依据个人使用情况持续更新。

猜你喜欢

转载自blog.csdn.net/Naisu_kun/article/details/97439758