1. 程式人生 > >stm32f429ig上的ucLinux修改外部晶振頻率

stm32f429ig上的ucLinux修改外部晶振頻率

將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的外部晶振下正常運行了。