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

猜你喜欢

转载自blog.csdn.net/tianyake_1/article/details/84633562