18 次浏览
1、创建STM32工程
在VS Code中打开STM32CubeMX软件新建工程
1)选择芯片型号,如STM32F103ZET6
2)配置RCC,选择外部晶振。【HSE】选择【Crystal/Ceramic Resonator】
3)配置SYS,打开SW调试接口。【Debug】选择【Serial Wire】
4)配置USART1,作为代码测试打印接口。【Mode】选择【Asynchronous】
5)配置时钟树,点击【Clock Configuration】,【PLL Source】选择时钟源【HSE】,【HCLK】中输入目标时钟频率如“72Mhz”。按回车键后自动计算分频和倍频
6)配置工程文件,点击【Project Manager】,【Project】中分别输入【工程文件名称】和【工程文件目录】。在【Toolchain/IED】中选择【CMake】(重要)
7)【Code Generator】中选择【Copy only the necessary library files】。【Generated files】中增加勾选【Generate peripheral initialization as a pair of ‘.c/.h’ files per peripheral】。
8)点击右上角【GENERATE CODE】自动生成代码
2、在STM32工程基础上创建FreeRTOS工程
1)在【Middleware】中选择【FreeRTOS】,接口类型选择【CMSIS_V2】,它是 ARM 官方的统一接口标准,方便与其他 CMSIS 软件组件兼容。
2)在【FreeRTOS】→【Advanced Settings】中,启用【USE_NEWLIB_REENTRANT】选项。该选项保证 newlib 库函数在多任务环境下是线程安全的,避免不同任务使用标准库函数时出现数据冲突。
3)在【SYS】中的【Timebase Source】选择【TIM 6】,启用 FreeRTOS 后,SysTick 会被 RTOS 内核占用用于任务调度,因此需要将 HAL 的时基源切换到 TIM6。这样既能保证 RTOS 的正常调度,又能继续使用 HAL 的延时功能。TIM6功能比较简单,没有信号输出,主要用于内部计时。
4)点击右上角【GENERATE CODE】自动生成代码
3、任务调度统计需开启的宏定义
RECORD_STACK_HIGH_ADDRESS Enabled
GENERATE_RUN_TIME_STATS Enabled
USE_STATS_FORMATTING_FUNCTIONS Enabled