目录
新建项目
新建项目可以参考官方教程:上链接
本系列文章都是基于芯片创建RT-Thread项目,即使用RT_Thread标准版本。

使用的环境如下:
- RT-Thread版本
4.0.3 - 芯片支持包版本
0.2.2 - RT-Thread Studio版本
2.2.9
构建项目报错原因与解决
使用外部时钟晶振

按照提示,修改drv_clk.c这个文件。
- 修改
drivers\stm32f4xx_hal_conf.h文件,HSE_VALUE的值设置为你外部晶振的实际频率,我的是8MHz,即为8000000,代码修改如下:

#if !defined (HSE_VALUE)
#define HSE_VALUE ((uint32_t)8000000U) /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */
- 修改
drivers\drv_clk.c
void system_clock_config(int target_freq_mhz)
{
RCC_OscInitTypeDef RCC_OscInitStruct = { 0 };
RCC_ClkInitTypeDef RCC_ClkInitStruct = { 0 };
/** Configure the main internal regulator output voltage
*/
__HAL_RCC_PWR_CLK_ENABLE();
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
/** Initializes the CPU, AHB and APB busses clocks
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;//注意
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 4;
RCC_OscInitStruct.PLL.PLLN = target_freq_mhz;//默认168MHz
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 4;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
/** Initializes the CPU, AHB and APB busses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
{
Error_Handler();
}
}
具体代码可以使用STM32CubeMX配置好并生成代码,然后复制到system_clock_config函数内。
构建代码并验证
- 修改
applications\main.c文件,如下:
/*
* Copyright (c) 2006-2025, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2025-11-09 RT-Thread first version
*/
#include <rtthread.h>
#include <stm32f4xx.h>
#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>
int main(void)
{
int count = 1;
while (count++)
{
LOG_D("Hello RT-Thread!");
rt_thread_mdelay(1000);
if (count > 10) {
//打印时钟信息
LOG_D("System Clock information");
LOG_D("SYSCLK_Frequency = %d", HAL_RCC_GetSysClockFreq());
LOG_D("HCLK_Frequency = %d", HAL_RCC_GetHCLKFreq());
LOG_D("PCLK1_Frequency = %d", HAL_RCC_GetPCLK1Freq());
LOG_D("PCLK2_Frequency = %d", HAL_RCC_GetPCLK2Freq());
break;
}
}
return RT_EOK;
}
- 构建代码
- 下载到stm中
- 运行效果如下:

串口终端的使用,可以参考官方教程。
2026年2月3日更新
使用STM32CubeMX配置STM外设
修改使用环境如下:
- RT-Thread版本
4.1.1 - 芯片支持包版本
0.2.3 - RT-Thread Studio版本
2.2.9
1.新建项目后,双击打开CubeMX Settings


选择STM32CubeMX.exe的安装路径,点击OK,打开CubeMX软件界面。
2.硬件配置
(1)开启外部高速晶振

(2)配置时钟树

(3)配置调试接口

(4)开启串口1

3.生成硬件初始化代码

点击GENERATE CODE生成代码。

直接点击Close。
关闭CubeMX软件,回到RT-Thread Studio,会弹出提示。

点击确定按钮。
配置打印浮点数
int main(void)
{
int count = 1;
float pi = 3.1415926;
while (count++)
{
LOG_D("Hello RT-Thread!");
rt_kprintf("pi = %.4f\n", pi);
rt_thread_mdelay(1000);
}
return RT_EOK;
}
输出结果:



添加上面的软件包到工程,点击保存,点击重新编译:

1593

被折叠的 条评论
为什么被折叠?



