嘀嗒定时器

系统定时器(嘀嗒定时器)常用来为系统提供基准时钟,可以判断当前运行时间,也能用来自定义延时函数。

初始化SysTick

HC32默认没开启系统定时器,如果直接去获取Tick,会获取不到任何值。

初始化定义在hc32f46x_utility.c中第311行。


SysTick_Init
/**
 *******************************************************************************
 ** \brief This function Initializes the interrupt frequency of the SysTick.
 **
 ** \param [in] u32Freq                 SysTick interrupt frequency (1 to 1000).
 **
 ** \retval Ok                          SysTick Initializes succeed
 ** \retval Error                       SysTick Initializes failed
 **
 ******************************************************************************/
__WEAKDEF en_result_t SysTick_Init(uint32_t u32Freq)
{
    en_result_t enRet = Error;
    if ((0UL != u32Freq) && (u32Freq <= 1000UL))
    {
        m_u32TickStep = 1000UL / u32Freq;
        /* Configure the SysTick interrupt */
        if (0UL == SysTick_Config(SystemCoreClock / u32Freq))
        {
            enRet = Ok;
        }
    }
    return enRet;
}


该函数是弱定义函数,可以用户自行在其他地方定义同名函数并覆盖,这里直接调用。传入参数为系统频率,决定了每次定时间隔是1s或是1ms之间任意值。

定义SysTick中断

初始化定时器后,系统虽然开始计时,但是此时u32TickCount计数值仍未增加,需要在定时器中断中执行SysTick_IncTick来增加计数值。可以定义在任何地方。

void SysTick_IrqHandler(void)
{
    SysTick_IncTick();
}

获取SysTick计数值

以上步骤执行完后,方可使用SysTick_GetTick()获取当前计数时间,亦可直接读取全局变量u32TickCount的值。

DEBUG功能

hc32f46x_utility.c中,同样定义了printf,DebugOutput等DEBUG函数,初始化完串口后可以直接使用printf来debug,默认使用了USART3PE5作为DEBUG输出。如果没有在其他地方初始化串口的话,printf会没有输出,需要通过 Ddl_UartInit();初始化串口3或者是初始化其他串口,并修改DEBUG函数,更改USART3为其他串口。

串口配置

HC32使用的总线矩阵,可以将外设映射到任意引脚上。串口配置可以直接参照例程。如果只使用一个USART(不包括DEBUG),直接修改define即可

 

__EOF__

  • 本文作者: USTHzhanglu
  • 本文链接: https://www.cnblogs.com/USTHzhanglu/p/16130315.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐】一下。