本帖最后由 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的函数。 求解:大家在遇到这个问题是怎么解决的,是不是有什么更好的解决办法? |
UIFæ å¿ä½ä¼å¨å¼å¯å°±ç½®ä½ä¸º1
你试试调整配置顺序看看。
这里有一相关文章你可以了解下。STM32 定时器有时一开启就进中断的话题