其他分享
首页 > 其他分享> > 沁恒CH582M开发板-3-Systick滴答定时器的使用

沁恒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;//清除中断标志
}

标签:__,return,CTLR,SysTick,开发板,15,沁恒,Systick,GPIO
来源: https://blog.csdn.net/doublekis/article/details/122833573