STM32F407定时器延时功能

使用定时器tim12用于延时函数计时。

摘自中文参考手册,各个定时器所在的总线APB1,APB2

使用定时器12作为延时定时器。查看时钟树时钟频率APB2总线,168Mhz,APB1总线84Mhz,以此为依据设置定时器的预分频值。

配置代码如下

#include "delay.h"

TIM_HandleTypeDef htim9;


void delay_init(void)
{

{

  /* USER CODE BEGIN TIM12_Init 0 */

  /* USER CODE END TIM12_Init 0 */

  TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  TIM_SlaveConfigTypeDef sSlaveConfig = {0};

  /* USER CODE BEGIN TIM12_Init 1 */
__HAL_RCC_TIM12_CLK_ENABLE();
  /* USER CODE END TIM12_Init 1 */
  htim12.Instance = TIM12;
  htim12.Init.Prescaler = 84-1; // 设置预分频器,使得计数频率为1MHz
  htim12.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim12.Init.Period = 30000;
  htim12.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim12.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  if (HAL_TIM_Base_Init(&htim12) != HAL_OK)
  {
    Error_Handler();
  }
  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  if (HAL_TIM_ConfigClockSource(&htim12, &sClockSourceConfig) != HAL_OK)
  {
    Error_Handler();
  }
  sSlaveConfig.SlaveMode = TIM_SLAVEMODE_RESET;
  sSlaveConfig.InputTrigger = TIM_TS_ITR0;
  if (HAL_TIM_SlaveConfigSynchro(&htim12, &sSlaveConfig) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN TIM12_Init 2 */

  /* USER CODE END TIM12_Init 2 */

}
}


void delay_us(uint16_t us)
{
    __HAL_TIM_SET_COUNTER(&htim12, 0); // 将TIM12的计数器值设置为0
    __HAL_TIM_ENABLE(&htim12);//(&htim12); // 启动定时器

    while (__HAL_TIM_GET_COUNTER(&htim12) < us) {
        // 等待计数器达到指定的延时时间
    }

    __HAL_TIM_DISABLE(&htim12);//HAL_TIM_Base_Stop(&htim12); // 停止定时器
}
void delay_ms(uint32_t ms)
{
    while (ms > 0) {
        delay_us(1000);
        ms--;
    }
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
stm32f407 定时器例程是针对STM32F407系列微控制器的定时器功能的一个示例代码。通过使用定时器,我们可以实现诸如延时、定时触发中断、PWM等功能。 在使用stm32f407 定时器例程之前,我们需要先配置定时器的工作模式、时钟源和频率等参数。具体步骤如下: 1. 引入头文件和库文件:在代码开头引入相关的头文件和库文件,以便后续使用定时器相关的函数和宏定义。 2. 配置定时器:使用相关函数配置定时器的模式、时钟源和频率等参数。比如可以选择定时器的工作模式(如定时模式、输入捕获模式、输出比较模式等)、时钟源(内部时钟源、外部时钟源等)和定时器频率(如设置分频系数)。 3. 开启定时器:使用相关函数开启定时器。这样,定时器就开始按照配置的频率工作了。 4. 定时中断处理函数:如果需要定时触发中断,可以编写一个定时中断处理函数。当定时器满足设定的时间后,会自动触发中断,并执行中断处理函数。 5. 使用定时器:根据需求使用定时器。可以利用定时器进行延时操作,或者生成PWM信号等。具体操作可以根据具体需求进行编写。 6. 关闭定时器:在使用完定时器后,可以使用相关函数关闭定时器,以释放资源。 以上就是关于stm32f407定时器例程的大致流程。具体的实现步骤和代码可以参考ST官方提供的例程或者相关教程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值