初始状态的led应该处于关闭状态,在中断函数中有翻转函数。
板子上的现象就是复位完后led接着亮。
HAL_TIM_Base_Init(&timer_init_struct);
__HAL_TIM_CLEAR_FLAG(&timer_init_struct,TIM_IT_UPDATE);
HAL_TIM_Base_Start_IT(&timer_init_struct);
发生这种现象的原因没搞懂,就只能在使能中断前,清除中断位了。
实现亮灭时间不一样的方法。自动重装载是disable的情况。初始值为arr4999,为了现象明显将1000ms的arr设为23999,实际时间大于1000.
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance==TIM6)
{
static uint32_t temp=0;
if(temp%2==0)
{
TIM6->ARR = 23999;
}
else
{
TIM6->ARR = 4999;//500ms
}
LED0_TOGGLE();
temp++;
}
}
自动重装载enable。
把temp初始值设为1。感觉带了缓冲的应该准一点,虽然最早的两次不准,还需要调试。