【stm32定时器配置步骤和相关概念解析——LL库】

系列文章目录



前言

一、cubeMX定时器介绍

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
在这里插入图片描述
Slave Mode 模式用于两个定时器相互控制:当主定时器的信号出现上升沿或者下降沿时,会触发从定时器的相应动作
复位模式:
主定时器出现信号后-从定时器计数器复位并产生一个中断
门控模式:
主定时器出现信号后-从定时器计数器开始工作
主定时器信号结束后-从定时器计数器停止工作并产生中断
触发模式
主定时器出现信号后-从定时器计数器开始工作,并且不会停止
触发模式主定时器只是提供了一个启动从定时器开始时间的控制,并不会有其他效果
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

二、 通用寄存器

配置通用寄存器即可实现最基本的定时功能

void LL_TIM_StructInit(LL_TIM_InitTypeDef *TIM_InitStruct)
{
  /* Set the default configuration */
  TIM_InitStruct->Prescaler         = (uint16_t)0x0000;//预分频系数,寄存器PSC
  TIM_InitStruct->CounterMode       = LL_TIM_COUNTERMODE_UP;//计数模式,寄存器CR1
  TIM_InitStruct->Autoreload        = 0xFFFFFFFFU;//自动重载值,寄存器ARR
  TIM_InitStruct->ClockDivision     = LL_TIM_CLOCKDIVISION_DIV1;//时钟分频
}
时间计算
arr:自动重装值。
psc:时钟预分频数
定时器溢出时间计算方法:Tout=((arr+1)*(psc+1))/Ft us.
Ft=定时器工作频率,单位:Mhz
举例:
TIM3_Int_Init(5000-1,8400-1);	//定时器时钟84M,分频系数8400,所以84M/8400=10Khz(0.1ms)的计数频率,10Khz/5000=2Hz(500ms)计数5000次为500ms    

三、 PWM模式

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

四、LL库 PWM模式(定时器14为例)

在这里插入图片描述

1.结构体说明

代码如下(示例):

void LL_TIM_OC_StructInit(LL_TIM_OC_InitTypeDef *TIM_OC_InitStruct)
{
  TIM_OC_InitStruct.OCMode = LL_TIM_OCMODE_PWM1;//输出比较模式1,寄存器CCMR1
  TIM_OC_InitStruct.OCState = LL_TIM_OCSTATE_DISABLE;//捕获/比较1输出使能,寄存器CCER
  TIM_OC_InitStruct.OCNState = LL_TIM_OCSTATE_DISABLE;
  TIM_OC_InitStruct.CompareValue = 0;//捕获/比较寄存器 1值
  TIM_OC_InitStruct.OCPolarity = LL_TIM_OCPOLARITY_LOW;//捕获/比较1输出极性,寄存器CCER
  LL_TIM_OC_Init(TIM14, LL_TIM_CHANNEL_CH1, &TIM_OC_InitStruct);
}
注意:输出比较模式1代表1通道,其他通道为对应值

TIM_OC_InitStruct->OCMode-模式说明
在这里插入图片描述
在这里插入图片描述
TIM_OC_InitStruct->OCState-捕获/比较1输出使能,寄存器CCER
在这里插入图片描述
TIM_OC_InitStruct.OCPolarity-捕获/比较1输出极性,寄存器CCER

在这里插入图片描述
TIM_OC_InitStruct.CompareValue-捕获/比较寄存器值

2.LL库代码

cubeMX配置后代码不能直接运行,需要添加一定的代码
代码如下(示例):

oid MX_TIM14_Init(void)
{
  LL_TIM_InitTypeDef TIM_InitStruct = {0};
  LL_TIM_OC_InitTypeDef TIM_OC_InitStruct = {0};

  LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
  /* Peripheral clock enable */
  LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM14);
  /* USER CODE BEGIN TIM14_Init 1 */
  /* USER CODE END TIM14_Init 1 */
  TIM_InitStruct.Prescaler = 83;
  TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP;
  TIM_InitStruct.Autoreload = 499;
  TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1;
  LL_TIM_Init(TIM14, &TIM_InitStruct);
  LL_TIM_EnableARRPreload(TIM14);
  LL_TIM_OC_EnablePreload(TIM14, LL_TIM_CHANNEL_CH1);
  TIM_OC_InitStruct.OCMode = LL_TIM_OCMODE_PWM1;
  TIM_OC_InitStruct.OCState = LL_TIM_OCSTATE_DISABLE;
  TIM_OC_InitStruct.OCNState = LL_TIM_OCSTATE_DISABLE;
  TIM_OC_InitStruct.CompareValue = 0;
  TIM_OC_InitStruct.OCPolarity = LL_TIM_OCPOLARITY_LOW;
  LL_TIM_OC_Init(TIM14, LL_TIM_CHANNEL_CH1, &TIM_OC_InitStruct);
  LL_TIM_OC_EnableFast(TIM14, LL_TIM_CHANNEL_CH1);
  LL_TIM_OC_DisablePreload(TIM14, LL_TIM_CHANNEL_CH1);
  /* USER CODE BEGIN TIM14_Init 2 */
  //加入代码,使能计数器
  LL_TIM_EnableCounter(TIM14);
  /* USER CODE END TIM14_Init 2 */
  
  LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOF);
    /**TIM14 GPIO Configuration
    PF9     ------> TIM14_CH1
    */
  GPIO_InitStruct.Pin = LL_GPIO_PIN_9;
  GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
  GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
  GPIO_InitStruct.Alternate = LL_GPIO_AF_9;
  LL_GPIO_Init(GPIOF, &GPIO_InitStruct);

}
PWM频率:
TIM14_PWM_Init(500-1,84-1);	//84M/84=1Mhz的计数频率,重装载值500,所以PWM频率为 1M/500=2Khz(0.5ms).   

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值