沁恒CH582M开发板-3-Systick滴答定时器的使用

2022/2/9 6:15:03

本文主要是介绍沁恒CH582M开发板-3-Systick滴答定时器的使用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

3-Systick滴答定时器的使用

滴答定时器的使用非常简单,沁恒已经为我们封装好了现成的库函数:

RV_STATIC_INLINE uint32_t SysTick_Config(uint64_t ticks)
{
    if((ticks - 1) > SysTick_LOAD_RELOAD_Msk)
        return (1); /* Reload value impossible */

    SysTick->CMP = ticks - 1; /* set reload register */
    PFIC_EnableIRQ(SysTick_IRQn);
    SysTick->CTLR = SysTick_CTLR_INIT | //向上计数从0 开始,向下计数从比较值开始;
                    SysTick_CTLR_STRE |
                    SysTick_CTLR_STCLK |  //HCLK 做时基;
                    SysTick_CTLR_STIE |  //使能计数器中断;
                    SysTick_CTLR_STE;   //启动系统计数器STK;
    /* Enable SysTick IRQ and SysTick Timer */
    return (0);                       /* Function successful */
}

下面是一段使用滴答定时器交替闪烁LED灯的代码:

#include "CH58x_common.h"

/*********************************************************************
 * @fn      main
 * @brief   主函数
 * @return  none
 */
 uint32_t cnt=0;
int main() {
    SetSysClock(CLK_SOURCE_PLL_60MHz);
    SysTick_Config(60000000);//设定嘀嗒时间
    GPIOB_SetBits(GPIO_Pin_15);
    GPIOB_ModeCfg(GPIO_Pin_15, GPIO_ModeOut_PP_20mA); // 配置推挽输出
    while(1){
        if (cnt%2==0)
        GPIOB_SetBits(GPIO_Pin_15);
        else
        GPIOB_ResetBits(GPIO_Pin_15);
    }
}

/*********************************************************************
 * @fn      SysTick_Handler
 * @brief   SysTick中断函数
 * @return  none
 */
__attribute__((interrupt("WCH-Interrupt-fast")))
__attribute__((section(".highcode")))
void SysTick_Handler()
{
    cnt++;
    SysTick->SR=0;//清除中断标志
}


这篇关于沁恒CH582M开发板-3-Systick滴答定时器的使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程