一、简介
本文档采样的芯片型号为GD32F303RCT6。要求定时器配置中断周期为1ms,定时器时钟频率120MHz。
二、GD32F303系统架构
由图可见:APB1 总线的最高速度限制为60MHz,APB2 总线可全速运行(依器件型号而定,最
高可达120MHz)。主频最高120MHz。
注意: 当APB1、APB2的prescaler值不为1时,该总线上的时钟频率为分频之后频率的2倍。上图中APB1最小值为2,APB2最小值为1,则TIMER1时钟频率是其他外设时钟频率的2倍(60MHz*2)。
三、TIMER1配置代码示例
/*******************************************************************************
* function name TIM1_Configuration
* brief TIM_Configuration program.
* param[in] period: 2000
* param[out] None
* retval None
* attention 1000us中断周期
*******************************************************************************/
void TIM2_Configuration(unsigned short period) //T = 2000/(60Hz*2/60)
{
timer_parameter_struct timer_initpara;
rcu_periph_clock_enable(RCU_TIMER1); /* 使能TIMER1时钟 */
/* 初始化TIMER相关结构体默认值参数 */
timer_struct_para_init(&timer_initpara);
/* TIMER1 初始化配置 */
timer_deinit(TIMER1);
timer_initpara.period = period; /* 自动重装载寄存器周期的值(计数值) */
/* 累计 TIM_Period个频率后产生一个更新或者中断 */
timer_initpara.alignedmode = TIMER_COUNTER_EDGE; /* 对齐模式 */
timer_initpara.prescaler = (60 - 1); /* 时钟预分频数 例如:时钟频率=60MHZ/(时钟预分频+1) */
timer_initpara.clockdivision = TIMER_CKDIV_DIV1; /* 采样分频 */
timer_initpara.counterdirection = TIMER_COUNTER_UP; /* 向上计数模式 */
timer_init(TIMER1,&timer_initpara);
timer_enable(TIMER1);
nvic_irq_enable(TIMER1_IRQn, 0, 3); /* TIMER1中断设置,抢占优先级0,子优先级3 */
timer_interrupt_enable(TIMER1,TIMER_INT_UP); /* 使能更新中断 */
}
/* 定时器中断处理函数 */
void TIMER1_IRQHandler(void)
{
NVIC_DisableIRQ(EXTI5_9_IRQn); /**< \brief Disable interrupt source INT1*/
......
timer_interrupt_flag_clear(TIMER1, TIMER_INT_FLAG_UP); // 清中断
NVIC_EnableIRQ(EXTI5_9_IRQn); /**< \brief Enable interrupt source INT1*/
}
-------------------------------------------------------------------------------------------------------------------------------如有问题请联系本人:QQ614139707