你好,在网上看了您设置通用定时器,我也借用了一下不懂为什么还是无法设置成功,可以帮我指正一下吗?以下是我的代码Space 2022/4/1 16:39:13
//定时器方案2
void TimerBase_Config(void)
{
//开时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
//定义结构体变量
TIM_TimeBaseInitTypeDef TimerBaseInitStructure;
NVIC_InitTypeDef NVICInitStructure;
//配置定时器结构体
TimerBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TimerBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TimerBaseInitStructure.TIM_Period = 10000;
TimerBaseInitStructure.TIM_Prescaler = 7200;
TIM_TimeBaseInit(TIM2, &TimerBaseInitStructure);
//清空标志位
TIM_ClearFlag(TIM2,TIM_FLAG_Update);
//开启定时器中断
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
//使能定时器
TIM_Cmd(TIM2,ENABLE);
//配置NVIC结构体
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVICInitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVICInitStructure.NVIC_IRQChannelCmd = ENABLE;
NVICInitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVICInitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_Init(&NVICInitStructure);
}
void TIM2_IRQHandler(void)
{
static uint16_t temp;
if(TIM_GetITStatus(TIM2,TIM_IT_Update) != RESET)
{
if(temp ++ %2 == 1)
{
LED1(0);
}
else
{
LED1(1); }
}
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);
}
// * @brief 主函数
// * @param 无
// * @retval 无
// */
extern uint8_t voice_cmd;
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
TimerBase_Config();
TIM2_IRQHandler();
uint32_t i = 0;
/* 端口初始化 */
GPIO_Config();
//LED1:红灯控制;LED2:绿灯控制;LED3:蓝灯控制
/* 配置SysTick 为1us中断一次 */
SysTick_Init();
/*初始化USART 配置模式为 115200 8-N-1,中断接收*/
USART_Config();
USART_VOICE_Config();
vl53l0x_init();
//si4463_mainloop();
while(1)
{
if(vl53l0x_status == VL53L0X_ERROR_NONE)
{
switch(voice_cmd)
{
case 1:
printf("开始测量");
break;
case 2:
printf("循环测距");
break;
case 3:
printf("距离报警");
break;
case 4:
printf("结束测试");
break;
}
voice_cmd=0;
vl53l0x_start_single_test(&vl53l0x_dev, &vl53l0x_data);
//printf("hello world\n");
}
}
}
Space 2022/4/1 16:39:19
这个是我的代码,目前是想通过闪烁一个LED灯来检测通用定时器是否配置妥当,但是灯没有任何反应
感觉是TIM2中断里IF语句判断条件中的temp值有问题,并且在主程序中不要有TIM2_IRQHandler();函数,中断函数是在库文件里定义好了,达到中断允许的条件会自动进入中断