freeelectron 发表于 2022-8-25 16:00

【AT-START-WB415测评】外部时钟PLL到144MHZ,非阻塞点灯,定时器

本文主要实现以下功能:
系统配置为外部16MHZ时钟,并且PLL到144MHZ;官方的demo用的阻塞方式点灯,即就是死等,在等待期间mcu干不了其他事情(中断除外),这种方式不太友好,本文使用非阻塞方式点灯;普通定时器1ms一次中断,为整个系统应用层提供时钟,
代码实现:1、系统配置为外部16MHZ时钟,并且PLL到144MHZ/**
* @briefsystem clock config program
* @NOTE   the system clock is configured as follow:
*         - system clock      = heck* pll_mult
*         - system clock source = pll (hick)
*         - heck                = 16000000
*         - sclk                = 144000000
*         - ahbdiv            = 1
*         - ahbclk            = 144000000
*         - apb2div             = 2
*         - apb2clk             = 72000000
*         - apb1div             = 2
*         - apb1clk             = 72000000
*         - pll_mult            = 9
*         - flash_wtcyc         = 4 cycle
* @paramnone
* @retval none
*/
void system_clock_config(void)
{
        /* config flash psr register */
        flash_psr_set(FLASH_WAIT_CYCLE_4);

        /* reset crm */
        crm_reset();

        crm_clock_source_enable(CRM_CLOCK_SOURCE_HEXT, TRUE);

        /* wait till heck is ready */
        while(crm_flag_get(CRM_HEXT_STABLE_FLAG) != SET)
        {
        }
        /* config pll clock resource */
        crm_pll_config(CRM_PLL_SOURCE_HEXT, CRM_PLL_MULT_9);

        /* enable pll */
        crm_clock_source_enable(CRM_CLOCK_SOURCE_PLL, TRUE);

        /* wait till pll is ready */
        while(crm_flag_get(CRM_PLL_STABLE_FLAG) != SET)
        {
        }
        /* config ahbclk */
        crm_ahb_div_set(CRM_AHB_DIV_1);

        /* config apb2clk */
        crm_apb2_div_set(CRM_APB2_DIV_2);
        /* config apb1clk */
        crm_apb1_div_set(CRM_APB1_DIV_2);
        /* enable auto step mode */
        crm_auto_step_mode_enable(TRUE);
        /* select pll as system clock source */
        crm_sysclk_switch(CRM_SCLK_PLL);
        /* wait till pll is used as system clock source */
        while(crm_sysclk_switch_status_get() != CRM_SCLK_PLL)
        {
        }
        /* disable auto step mode */
        crm_auto_step_mode_enable(FALSE);
        /* update system_core_clock global variable */
        system_core_clock_update();
}
2、定时器3配置为1ms中断一次static uint32_t SystemTick=0;

void TimerInit(void)
{
        crm_periph_clock_enable(CRM_TMR3_PERIPH_CLOCK, TRUE);
       
        tmr_base_init(TMR3, 71, 999); //72000000/72/999
    tmr_cnt_dir_set(TMR3, TMR_COUNT_UP);
       
        tmr_interrupt_enable(TMR3, TMR_OVF_INT, TRUE);

        /* tmr3 overflow interrupt nvic init */
        nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
        nvic_irq_enable(TMR3_GLOBAL_IRQn, 0, 0);

        /* enable tmr3 */
        tmr_counter_enable(TMR3, TRUE);
}


uint32_t SystemGetTick(void)
{
        return SystemTick;
}


void TMR3_GLOBAL_IRQHandler(void)
{
        if(tmr_flag_get(TMR3, TMR_OVF_FLAG) != RESET)
        {
                SystemTick++;
                  
                tmr_flag_clear(TMR3, TMR_OVF_FLAG);
        }
}
3、非阻塞点灯,500ms闪烁一次void LedInit(void)
{
        gpio_init_type gpio_init_struct;

        /* enable the led clock */
        crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);

        /* set default parameter */
        gpio_default_para_init(&gpio_init_struct);

        /* configure the led gpio */
        gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
        gpio_init_struct.gpio_out_type= GPIO_OUTPUT_PUSH_PULL;
        gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
        gpio_init_struct.gpio_pins = GPIO_PINS_7|GPIO_PINS_8|GPIO_PINS_9;
        gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
        gpio_init(GPIOB, &gpio_init_struct);
       
}

void McuRun(void)
{
        static uint32_t curtick=0;
       
        if(SystemGetTick()-curtick>=500)
        {
                gpio_bits_write(GPIOB, GPIO_PINS_7|GPIO_PINS_8|GPIO_PINS_9, !gpio_output_data_bit_read(GPIOB, GPIO_PINS_7));

                curtick=SystemGetTick();
        }
}

hilahope 发表于 2022-9-3 17:03

144hz频率速度可以啊

sanxingnote7 发表于 2022-9-3 18:45

AT-START-WB415非常棒呢。

burgessmaggie 发表于 2022-9-3 21:12

是pwm控制的吗

Henryko 发表于 2022-9-7 21:30

114,可以啊!
页: [1]
查看完整版本: 【AT-START-WB415测评】外部时钟PLL到144MHZ,非阻塞点灯,定时器