你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于定时器UIF标志位问题

[复制链接]
D罩杯恋人 提问时间:2016-4-9 12:04 /
本帖最后由 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

UIF标志位会在开启就置位为1
收藏 1 评论3 发布时间:2016-4-9 12:04

举报

3个回答
xmshao 回答时间:2016-4-9 22:10:38
有遇到过。

你试试调整配置顺序看看。
这里有一相关文章你可以了解下。STM32 定时器有时一开启就进中断的话题
D罩杯恋人 回答时间:2016-4-9 22:59:48
困扰了我很久,我以为理解错了
疯狂的指头 回答时间:2016-4-10 20:14:06
  1. MX_TIM6_Init();
  2. ...
  3. ...
  4. ...
  5. __HAL_TIM_CLEAR_IT(&htim6, TIM_IT_UPDATE);
  6. __HAL_TIM_ENABLE_IT(&htim6,TIM_IT_UPDATE);
复制代码

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版