TIM定时器(TIM3为例)

初始化:

A:结构体TIM_HandleTypeDef的成员:

1、*Instance:类型为TIM_TypeDef,即对TIM的寄存器的映射,通过这个成员可以操作寄存器

2、Init:类型为TIM_Base_InitTypeDef,对定时器特性进行配置,成员有

Prescaler:定时器预分频

CounterMode:向上计数、向下计数、中间对齐

Period:周期

ClockDivision:

RepetitionCounter:

AutoReloadPreload:自动重装立即有效/中断更新有效

Tout=(Period+1) * ((Prescaler+1)/Ft) us:Ft步长,即TIM依赖的时钟频率

3、Channel:类型为HAL_TIM_ActiveChannel,设置定时器通道

4、*hdma[7]:DMA相关

5、Lock:定时器锁,为HAL_LOCKHAL_UNLOCK一般和State搭配用

6、State:定时器状态,常用HAL_TIM_STATE_BUSYHAL_TIM_STATE_READY

上述参数配置后通过HAL_TIM_Base_Init(&htim3)传入完成配置

B:结构体TIM_ClockConfigTypeDefTIM_MasterConfigTypeDef

1、TIM_ClockConfigTypeDef是对TIM依赖的时钟进行配置,默认情况下TIM 挂在APB时钟上,若需要使用外部时钟,可对成员ClockSource进行配置

2、TIM_MasterConfigTypeDef是当需要使用到定时器的级联时内部输出通道及SlaveMode的配置,默认都是否

TIM_HandleTypeDef htim3;

void MX_TIM3_Init(void)
{
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0}; htim3.Instance = TIM3;
htim3.Init.Prescaler = 8999;
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
htim3.Init.Period = 4999;
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
{
Error_Handler();
}
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
}

C:HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)

1、使能TIM时钟,设置并使能中断NVIC

2、如果有输出的话,配置对应GPIO输出

void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
{ if(tim_baseHandle->Instance==TIM3)
{
__HAL_RCC_TIM3_CLK_ENABLE(); HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(TIM3_IRQn);
}
}

启动并触发:

启动:HAL_TIM_Base_Start_IT(&htim3)主函数中直接调用启动定时器或直接htim->State = HAL_TIM_STATE_READY

触发:同样的有中断服务函数TIM3_IRQHandler(void),内调用公用的HAL_TIM_IRQHandler(&htim3)在这将htim3的参数传入

回调:

重写weak函数void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim),在Callback里判断定时器类型以及写需要执行的内容,实际上从这个Callback的命名可以看出,TIM有很多种Callback

【STM32】TIM定时器的更多相关文章

  1. STM32 TIM高级定时器死区时间的计算

    STM32 TIM高级定时器的互补PWM支持插入死区时间,本文将介绍如何计算以及配置正确的死区时间. 文章目录 什么是死区时间? 数据手册的参数 如何计算合理的死区时间? STM32中配置死区时间 什 ...

  2. STM32通用定时器(转载)

    STM32的定时器功能很强大,学习起来也很费劲儿. 其实手册讲的还是挺全面的,只是无奈TIMER的功能太复杂,所以显得手册很难懂,我就是通过这样看手册:while(!SUCCESS){看手册-}才搞明 ...

  3. Stm32高级定时器(三)

    Stm32高级定时器(三) 1 互补输出和死区插入 1.1 死区:某个处于相对无效状态的时间或空间 本来OCX信号与OCXREF时序同相同步,OCXN信号与OCXREF时序反相同步.但为了安全考虑,以 ...

  4. STM32 基于定时器的PWM发生器

    脉冲宽度调制(PWM),是英文"Pulse Width Modulation" 的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术.简单一点,就 ...

  5. 基于STM8的TIM定时器操作---STM8-第三章

    1. 综述 STM8S提供三种类型的 TIM 定时器:高级控制型(TIM1).通用型(TIM2/TIM3/TIM5)和基本型定时器(TIM4/TIM6).它们虽有不同功能但都基于共同的架构.此共同的架 ...

  6. STM32 通用定时器的几种配置方式

    STM32 通用定时器的几种配置方式 //------------------------------------------------------------------------------ ...

  7. STM32 TIM 编码器模式采集编码器信号

    layout: post tags: [STM32] comments: true 文章目录 @[toc] 什么是正交解码? 编码器接口模式 标准库接口 TIM_TimeBaseInitTypeDef ...

  8. Stm32高级定时器(四)

    Stm32高级定时器(四) 1 编码器接口模式 1.1 编码器原理 什么是正交?如果两个信号相位相差90度,则这两个信号称为正交.由于两个信号相差90度,因此可以根据两个信号哪个先哪个后来判断方向.根 ...

  9. Stm32高级定时器(二)

    Stm32高级定时器(二) 1 主从模式:主?从? 谈论主从,可知至少有两个以上的触发或者驱动信号,stm32内部有多个定时器,可以相互之间驱动或者控制. 主模式:定时器使能只受驱动时钟控制或者输出控 ...

  10. Stm32高级定时器(一)

    Stm32高级定时器(一) 1 定时器的用途 2 高级定时器框图 3 时基单元 4 通道 1 定时器的用途 已知一个波形求另一个未知波形(信号长度和占空比) 已知波形的信号长度和占空比产生一个相应的波 ...

随机推荐

  1. Go组件库总结之事件注册唤醒

    本篇文章我们用Go实现一个自定义事件注册并等待唤醒的机制,其中涉及到的链表操作可以参考上一篇文章.文章参考自:https://github.com/brewlin/net-protocol 1.自定义 ...

  2. 23_webpack_TreeShaking

    什么是TreeShaking TreeShaking,是一个术语,表示消除死代码(dead_code) JS的Tree Shaking 对JS进行TreeShaking是源自打包工具rollup这是因 ...

  3. Bat命令进行压缩X文件夹下的文件夹及文件

    输出日志 echo off for /d %%i in (D:\project101\trunk\x_client\xProject\Assets\AssetBundles\Android~\*.) ...

  4. 攻防世界-fileclude

    攻防世界的一道文件包含题目 include("文件名"):会将文件中的内容视为代码块接入include所在代码中,输出的只是执行后的结果,文件中的注释.定义等无法查看. 本题中可以 ...

  5. js简单的图片上传

    <input id="file" type="file" name="name" @change="aaa"> ...

  6. Python——01.环境及安装

    Python介绍 -- Python是解释型,面向对象的语言,程序结构简洁,清晰 -- Python解释器分类: CPython(官方解释器):用C语言编写的Python解释器 PyPy:用Pytho ...

  7. gitee 上传远程仓库失败

    1:添加本地id_rsa.pub文件内容到gitee SSH Keys (添加公开密钥) 2:设置本地的邮箱和用户名 git config --global user.name "MARS& ...

  8. Efficient training of physics-informed neural networks via importance sampling

    因为看着作者是英伟达的,便看了一下.总体感觉没有什么新意,改进幅度也很小,但是理论推导可以看一下.可以借鉴一下. 本文通过重要性采样对PINN进行高效计算,本文提出的方法很简单,也很直观,但效果提升有 ...

  9. docker-compose 搭建 redis 集群

    准备配置文件 bind 0.0.0.0 # redis端口 port ${PORT} requirepass redispwd # 关闭保护模式 protected-mode no # 开启集群 cl ...

  10. /usr/bin/install: cannot create regular file `/usr/local/jpeg6/include/jconfig.h'

    出现下列异常: /usr/bin/install -c -m 644 jconfig.h /usr/local/jpeg6/include/jconfig.h /usr/bin/install: ca ...