GD32E230C8T6用72M系统晶振写定时器2定时1ms代码
以下是使用72M系统晶振,使用定时器2定时1ms的代码:
首先需要初始化定时器2和系统时钟:
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); // 使能定时器2时钟
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
TIM_TimeBaseInitStruct.TIM_Prescaler = 71; // 预分频器,分频系数为72
TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; // 计数器向上计数
TIM_TimeBaseInitStruct.TIM_Period = 999; // 自动重载值,定时器2的计数器计数到999时会自动重置为0
TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1; // 时钟分割
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStruct); // 初始化定时器2
TIM_Cmd(TIM2, ENABLE); // 使能定时器2
然后就可以使用定时器2来实现1ms的定时了,可以使用中断或轮询的方式实现,以下是中断方式的代码:
NVIC_InitTypeDef NVIC_InitStruct;
NVIC_InitStruct.NVIC_IRQChannel = TIM2_IRQn; // 定时器2中断
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0; // 抢占优先级
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0; // 子优先级
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; // 使能中断
NVIC_Init(&NVIC_InitStruct); // 初始化中断
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); // 使能定时器2更新中断
void TIM2_IRQHandler(void)
{
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) // 判断是否为定时器2更新中断
{
TIM_ClearITPendingBit(TIM2, TIM_IT_Update); // 清除中断标志位
// 在这里执行需要定时的代码
}
}
以上是使用72M系统晶振写定时器2定时1ms的代码,可以根据自己的需要进行修改
原文地址: https://www.cveoy.top/t/topic/ci8f 著作权归作者所有。请勿转载和采集!