本文主要记录了STM32CubeIDE使用中的一些要点、方法、技巧等等。
新建文件/文件夹:
New
子菜单中可以选择新建源码文件、头文件、文件夹、源码文件夹等(如果没有请选择Other,在弹出窗口的C/C++中查找);导入文件/文件夹:
import...
,选择弹出窗口的 General > File System 然后 Next>
,在新窗口中浏览选择要导入的目录/文件,然后导入;将头文件和源码添加到项目中:
添加文件和文件夹后在使用时可能会提示找不到,需要将头文件和源码路径添加到项目中, 在IDE左侧项目资源管理器(Project Explorer)中选择项目右键 Prorerties
在弹出窗口的 C/C++ General > Paths and Symbols
中的 Includes
、 Source Location
分页下分别添加对应路径:
另外在多说一句:默认情况下自己的文件中只要引用 main.h
就可以调用STM32CubeMX配置导入的各种库了。
默认情况下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
中可以添加全局宏定义:
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是没有启用的,可以通过下面几种方式之一启用:
Project Manager > Code Generator > HAL Settings > Enable Full Assert
;USE_FULL_ASSERT
(方式见上节,推荐);/* #define USE_FULL_ASSERT 1U */
取消注释(不推荐);启用assert_param后可以在main.c的 void assert_failed(uint8_t *file, uint32_t line){}
函数中添加语句,比如通过串口或SWV打印输出相关信息,该函数会在你使用HAL库函数输入参数错误的时候运行。
正式发布版的程序中建议关闭该功能,因为该功能对性能和固件体积影响比较大。
STM32CubeIDE有时会出现启动调试报错或是调试无数据上传等异常,排除硬件和调试配置等原因后还是异常的话,可以尝试重启STM32CubeIDE,若还是不行尝试重启电脑。
STM32CubeIDE可以在新建项目时选择建立为C++项目,或是在已有的C项目中右击选择 Convert to C++
将项目转为C++项目。但是目前版本中(1.0.2)如果你在该C++项目中使用.cpp文件然后编译会报错。原因是该C++项目的main()函数存在于mian.c中,导致至少有一个.c文件会引用到某个.cpp文件中的内容,最终编译时报错。解决方法很简单,将mian.c重命名为mian.cpp就成。
注意事项:
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
偶尔会碰到在STM32CubeMX中配置了资源生成代码,但代码并未正确配置生成的情况,尝试重新在STM32CubeMX中动一动相关资源选项,然后重新生成代码,一般重复之后就可以正确生成代码了。
开发过程中有时候需要复制一个已有的项目,在该项目之上进行开发,STM32CubeIDE不允许同一个工作空间中出现同名项目,这时候就需要修改项目名称了,方法有下面两种:
标签所包围的旧项目名改为新项目名。要点、方法、技巧等没法一下子全部描述全面,本文将依据个人使用情况持续更新。