打印
[活动专区]

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

[复制链接]
1204|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

本文主要实现以下功能:


系统配置为外部16MHZ时钟,并且PLL到144MHZ;

官方的demo用的阻塞方式点灯,即就是死等,在等待期间mcu干不了其他事情(中断除外),这种方式不太友好,本文使用非阻塞方式点灯;

普通定时器1ms一次中断,为整个系统应用层提供时钟,


代码实现:

1、系统配置为外部16MHZ时钟,并且PLL到144MHZ

  /**
  * [url=home.php?mod=space&uid=247401]@brief[/url]  system clock config program
  * [url=home.php?mod=space&uid=536309]@NOTE[/url]   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
  * @param  none
  * @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控制的吗

使用特权

评论回复
5
Henryko| | 2022-9-7 21:30 | 只看该作者
114,可以啊!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:stm32/LoRa物联网:304350312

65

主题

785

帖子

11

粉丝