stm32f429ig上的ucLinux修改外部晶振頻率
阿新 • • 發佈:2018-12-21
將stm32f429i-discovery開發板的 emcraft uclinux 例程移植到秉火stm32f429的開發板上,由於stm32f429i-discovery上使用的是8MHZ外部晶振,而秉火stm32f429的開發板使用的是25MHZ的晶振。
u-boot部分
修改u-boot/include/configs/stm32f429-discovery.h
修改如下:
/*
* Clock configuration (see mach-stm32/clock.c for details):
* - use PLL as the system clock;
* - use HSE as the PLL source;
* - configure PLL to get a 180 MHz system clock.
*/
#define CONFIG_STM32_SYS_CLK_PLL
#define CONFIG_STM32_PLL_SRC_HSE
/*#define CONFIG_STM32_HSE_HZ 8000000 */ /* 8 MHz */
/*#define CONFIG_STM32_PLL_M 4
#define CONFIG_STM32_PLL_N 360
#define CONFIG_STM32_PLL_P 4
#define CONFIG_STM32_PLL_Q 15
*/
#define CONFIG_STM32_HSE_HZ 25000000 /* 25 MHz */
#define CONFIG_STM32_PLL_M 15
#define CONFIG_STM32_PLL_N 216
#define CONFIG_STM32_PLL_P 2
#define CONFIG_STM32_PLL_Q 5 /*don't care*/
kernel部分
修改linux/arch/arm/mach-stm32/clock.c
將stm32_clock_init
函式修改如下:
這份程式碼不知道被修改了多少次,平臺明明是stm32f429i-discovery程式碼裡定義的卻是PLATFORM_STM32_SWISSEMBEDDED_COMM
/*
* Initialize the reference clocks.
*/
void __init stm32_clock_init(void)
{
static u32 apbahb_presc_tbl[] = {0, 0, 0, 0, 1, 2, 3, 4,
1, 2, 3, 4, 6, 7, 8, 9};
u32 hse_hz, tmp, presc;
#ifdef CONFIG_ARCH_STM32F1
u32 pllmul;
#else
u32 pllvco, pllp, pllm;
#endif
int platform;
int i;
/*
* Select HSE (external oscillator) freq value depending on the
* platform we're running on
*/
platform = stm32_platform_get();
switch (platform) {
#ifdef CONFIG_ARCH_STM32F1
case PLATFORM_STM32_SWISSEMBEDDED_COMM:
/*hse_hz = 8000000;*/
hse_hz = 25000000; //jimbo
break;
#else
case PLATFORM_STM32_STM3220G_EVAL:
case PLATFORM_STM32_STM3240G_EVAL:
hse_hz = 25000000;
break;
case PLATFORM_STM32_STM_SOM:
case PLATFORM_STM32_STM_STM32F439_SOM:
case PLATFORM_STM32_STM_STM32F7_SOM:
hse_hz = 12000000;
break;
case PLATFORM_STM32_STM32F7_DISCO:
hse_hz = 25000000;
break;
case PLATFORM_STM32_STM_DISCO:
hse_hz = 8000000;
break;
#endif
修改完這兩處uclinux就能在25M的外部晶振下正常運行了。