关于定时器UIF标志位问题
本帖最后由 D罩杯恋人 于 2016-4-9 12:07 编辑问题:使用Cube库生存工程,想用TIM6做一个us延时,但是初始化时会自动开启更新事件标志UIF位。导致轮询时经常可以获得一个事件标志位。正常情况下,应该等到计数上溢或下溢才会更新这个标志位的,但是使用Cube已初始化,执行到: HAL_TIM_Base_Start(&htim6);或者HAL_StatusTypeDef HAL_TIM_Base_Start_IT(&htim6)都会去置位这个标志位!
以下为初始化代码:
void Timer_DelayUs(uint32_t Iu32DelayUs)
{
TIM_HandleTypeDef htim6;
uint8_t u8ReturnStatus=0;
TIM_Base_InitTypeDef Tim6_Init;
Tim6_Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;
Tim6_Init.CounterMode=TIM_COUNTERMODE_UP;
Tim6_Init.Period=Iu32DelayUs;
Tim6_Init.Prescaler=72;
Tim6_Init.RepetitionCounter=0;
htim6.Instance = TIM6;
htim6.Init.Prescaler = 72;
htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
htim6.Init.Period = 10000;
TIM_Base_SetConfig(TIM6,&Tim6_Init);
HAL_TIM_Base_MspInit(&htim6);
//__HAL_TIM_CLEAR_IT(&htim6,TIM_FLAG_UPDATE);
HAL_TIM_Base_Start(&htim6);
while(1)
{
if((__HAL_TIM_GET_FLAG(&htim6, TIM_FLAG_UPDATE) != RESET))
break;
}
__HAL_TIM_CLEAR_IT(&htim6,TIM_FLAG_UPDATE);
//HAL_TIM_Base_Stop_IT(&htim6);
HAL_TIM_Base_Stop(&htim6);
}
目前解决方法:只有一开始禁止更新时间(将UDIS置1),才不至于一初始化就会有事件标志位UIF置1,但问题是Cube定时器库函数没有设置UDIS的函数。
求解:大家在遇到这个问题是怎么解决的,是不是有什么更好的解决办法?
有遇到过。
你试试调整配置顺序看看。
这里有一相关文章你可以了解下。STM32 定时器有时一开启就进中断的话题 困扰了我很久,我以为理解错了 MX_TIM6_Init();
...
...
...
__HAL_TIM_CLEAR_IT(&htim6, TIM_IT_UPDATE);
__HAL_TIM_ENABLE_IT(&htim6,TIM_IT_UPDATE);
页:
[1]