rt-thread studio新建stm32f407工程,使用的版本是:2.2.6,stm32f4的支持包版本為0.2.2。先不用0.2.3,因為使用0.2.3建立的模板編譯會報錯。。
按照模板新建工程,默認使用內部時鐘,編譯,正常,串口1輸出正常。修改為外部晶振,按照要求修改了代碼,如下:
void system_clock_config(int target_freq_mhz)
{
#if false
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_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
RCC_OscInitStruct.PLL.PLLM = 8;
RCC_OscInitStruct.PLL.PLLN = target_freq_mhz;
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();
}
#else
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 RCC Oscillators according to the specified parameters
in the RCC_OscInitTypeDef structure.
/
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 = 25;
RCC_OscInitStruct.PLL.PLLN = 336;
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 buses 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();
}
#endif
}
同時修改了宏定義:
#define BSP_CLOCK_SOURCE ("HSE")
#define BSP_CLOCK_SOURCE_FREQ_MHZ ((int32_t)25)
#define BSP_CLOCK_SYSTEM_FREQ_MHZ ((int32_t)168)
編譯正常,調試發現輸出不正常,亂碼。
分析應該是時鐘配置不正確,先檢查系統時鐘,發現不是設定的系統時鐘,通過調試發現還需要修改stm32f407zgt6driversstm32f4xx_hal_conf.h文件中的宏定義:
#if !defined (HSE_VALUE)
#define HSE_VALUE ((uint32_t)25000000U) /*!< Value of the External oscillator in Hz /
#endif / HSE_VALUE */
原先為8M,需要改為實際25M,重新編譯調試,串口1正常輸出。
-
RCC
+關注
關注
0文章
93瀏覽量
27098 -
串口輸出
+關注
關注
0文章
16瀏覽量
7535 -
STM32F407
+關注
關注
15文章
188瀏覽量
29674 -
RT-Thread
+關注
關注
31文章
1306瀏覽量
40420
發布評論請先 登錄
相關推薦
在RT-Thread Studio中新建的stm32f407-atk-explorer工程運行qemu失敗,是什么原因引起的?
如何使用RT-Thread Studio來新建項目
用RT-Thread Studio怎么配置STM32F407的TCPSERVER服務呢?
新建的STM32F407的工程編譯不通過是何原因?
RT-Thread STM32 配置系統時鐘(使用外部晶振)
![<b class='flag-5'>RT-Thread</b> <b class='flag-5'>STM32</b> 配置系統時鐘(使用外部晶振)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
RT-Thread使用cjson軟件包發送64位長整型數據
![<b class='flag-5'>RT-Thread</b>使用cjson軟件包發送64位長整型數據](https://file1.elecfans.com/web2/M00/A7/B4/wKgaomUmSiWAQ_1xAAAObDzqKfU258.jpg)
RT-Thread移植使用webserver (lwip+httpd)
![<b class='flag-5'>RT-Thread</b>移植使用webserver (lwip+httpd)](https://file1.elecfans.com/web2/M00/A9/99/wKgZomUnepKAb9E9AABCKUIXJyA162.jpg)
RT-Thread在Lan8720a和 lwip基礎上移植ntp流程
![<b class='flag-5'>RT-Thread</b>在Lan8720a和 lwip基礎上移植ntp流程](https://file1.elecfans.com/web2/M00/A9/A7/wKgZomUntWGAcCOHAACP1O8yWfM803.jpg)
RT-Thread使用Soft RTC(軟件模擬RTC)
![<b class='flag-5'>RT-Thread</b>使用Soft RTC(軟件模擬RTC)](https://file1.elecfans.com/web2/M00/A9/A9/wKgZomUnvnyAf3X9AACmcgoHcsQ875.jpg)
RT-Thread中Lan8720和lwip協議棧的使用
![<b class='flag-5'>RT-Thread</b>中Lan8720和lwip協議棧的使用](https://file1.elecfans.com/web2/M00/A9/B9/wKgZomUoqG2AfnI1AADoV9xQNtA794.jpg)
評論