打印
[STM32F1]

定时器做延时

[复制链接]
433|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
geraldbetty|  楼主 | 2024-2-23 16:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

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

void TIM_Delay_us(uint16_t us,TIM_HandleTypeDef* htim)
{
        TIM_Base_InitTypeDef TIM_Str={0};
        TIM_Str.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_DISABLE;
        TIM_Str.Prescaler=50-1;
        TIM_Str.Period=us;
        TIM_Str.CounterMode=TIM_COUNTERMODE_UP;       
  TIM_Base_SetConfig(htim->Instance,&TIM_Str);
       
        HAL_TIM_Base_Start(htim);
        while(__HAL_TIM_GET_COUNTER(htim)!=us);
        HAL_TIM_Base_Stop(htim);
}

void TIM_Delay_ms(uint16_t ms,TIM_HandleTypeDef* htim)
{
        TIM_Base_InitTypeDef TIM_Str={0};
        TIM_Str.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_DISABLE;
        TIM_Str.Prescaler=50000-1;
        TIM_Str.Period=ms;
        TIM_Str.CounterMode=TIM_COUNTERMODE_UP;       
  TIM_Base_SetConfig(htim->Instance,&TIM_Str);
       
        HAL_TIM_Base_Start(htim);
        while(__HAL_TIM_GET_COUNTER(htim)!=ms);
        HAL_TIM_Base_Stop(htim);
}


使用特权

评论回复
沙发
原来是wjc| | 2024-2-24 21:52 | 只看该作者
你设置的预分频值分别是50和50000。这两个值是怎么选择的呢?是否考虑了系统时钟的频率以及延时的要求?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

1365

帖子

0

粉丝