[STM32F1] 定时器做延时

[复制链接]
 楼主| geraldbetty 发表于 2024-2-23 16:51 | 显示全部楼层 |阅读模式

是从0开始计数 计数到counter值为止

所以在while里面要判断计数值不为us

没用到中断 所以不用开启定时器中断

  1. void TIM_Delay_us(uint16_t us,TIM_HandleTypeDef* htim)
  2. {
  3.         TIM_Base_InitTypeDef TIM_Str={0};
  4.         TIM_Str.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_DISABLE;
  5.         TIM_Str.Prescaler=50-1;
  6.         TIM_Str.Period=us;
  7.         TIM_Str.CounterMode=TIM_COUNTERMODE_UP;       
  8.   TIM_Base_SetConfig(htim->Instance,&TIM_Str);
  9.        
  10.         HAL_TIM_Base_Start(htim);
  11.         while(__HAL_TIM_GET_COUNTER(htim)!=us);
  12.         HAL_TIM_Base_Stop(htim);
  13. }

  14. void TIM_Delay_ms(uint16_t ms,TIM_HandleTypeDef* htim)
  15. {
  16.         TIM_Base_InitTypeDef TIM_Str={0};
  17.         TIM_Str.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_DISABLE;
  18.         TIM_Str.Prescaler=50000-1;
  19.         TIM_Str.Period=ms;
  20.         TIM_Str.CounterMode=TIM_COUNTERMODE_UP;       
  21.   TIM_Base_SetConfig(htim->Instance,&TIM_Str);
  22.        
  23.         HAL_TIM_Base_Start(htim);
  24.         while(__HAL_TIM_GET_COUNTER(htim)!=ms);
  25.         HAL_TIM_Base_Stop(htim);
  26. }


原来是wjc 发表于 2024-2-24 21:52 | 显示全部楼层
你设置的预分频值分别是50和50000。这两个值是怎么选择的呢?是否考虑了系统时钟的频率以及延时的要求?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

1611

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

36

主题

1611

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部