华大HC32系统嘀嗒定时器以及串口配置
嘀嗒定时器
系统定时器(嘀嗒定时器)常用来为系统提供基准时钟,可以判断当前运行时间,也能用来自定义延时函数。
初始化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,默认使用了USART3
和PE5
作为DEBUG输出。如果没有在其他地方初始化串口的话,printf
会没有输出,需要通过 Ddl_UartInit();
初始化串口3或者是初始化其他串口,并修改DEBUG函数,更改USART3为其他串口。
串口配置
HC32使用的总线矩阵,可以将外设映射到任意引脚上。串口配置可以直接参照例程。如果只使用一个USART(不包括DEBUG),直接修改define即可。
/* USART channel definition */
#define USART_CH (M4_USART2)
/* USART baudrate definition */
#define USART_BAUDRATE (12500000ul)
/* USART RX Port/Pin definition */
#define USART_RX_PORT (PortB)
#define USART_RX_PIN (Pin00)
#define USART_RX_FUNC (Func_Usart2_Rx)
/* USART TX Port/Pin definition */
#define USART_TX_PORT (PortB)
#define USART_TX_PIN (Pin01)
#define USART_TX_FUNC (Func_Usart2_Tx)
/* USART interrupt number */
#define USART_RI_NUM (INT_USART2_RI)
#define USART_EI_NUM (INT_USART2_EI)
#define USART_TI_NUM (INT_USART2_TI)
#define USART_TCI_NUM (INT_USART2_TCI)