文章目录

  • 前言
  • 一、cubeMX定时器介绍
  • 二、 通用寄存器
  • 三、 PWM模式
  • 四、LL库 PWM模式(定时器14为例)
  • 1.结构体说明
  • 2.LL库代码



前言

一、cubeMX定时器介绍

lua 设置定时器 lueabb定时器说明书_单片机


lua 设置定时器 lueabb定时器说明书_lua 设置定时器_02


Slave Mode 模式用于两个定时器相互控制:当主定时器的信号出现上升沿或者下降沿时,会触发从定时器的相应动作

复位模式:

主定时器出现信号后-从定时器计数器复位并产生一个中断

门控模式:

主定时器出现信号后-从定时器计数器开始工作

主定时器信号结束后-从定时器计数器停止工作并产生中断

触发模式

主定时器出现信号后-从定时器计数器开始工作,并且不会停止

触发模式主定时器只是提供了一个启动从定时器开始时间的控制,并不会有其他效果

lua 设置定时器 lueabb定时器说明书_lua 设置定时器_03

lua 设置定时器 lueabb定时器说明书_stm32_04


lua 设置定时器 lueabb定时器说明书_stm32_05


lua 设置定时器 lueabb定时器说明书_单片机_06


lua 设置定时器 lueabb定时器说明书_stm32_07


lua 设置定时器 lueabb定时器说明书_单片机_08


lua 设置定时器 lueabb定时器说明书_单片机_09


lua 设置定时器 lueabb定时器说明书_单片机_10


lua 设置定时器 lueabb定时器说明书_寄存器_11


lua 设置定时器 lueabb定时器说明书_stm32_12

lua 设置定时器 lueabb定时器说明书_lua 设置定时器_13

二、 通用寄存器

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

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模式

lua 设置定时器 lueabb定时器说明书_通用寄存器_14

lua 设置定时器 lueabb定时器说明书_stm32_15


lua 设置定时器 lueabb定时器说明书_寄存器_16

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

lua 设置定时器 lueabb定时器说明书_单片机_17

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-模式说明

lua 设置定时器 lueabb定时器说明书_stm32_18


lua 设置定时器 lueabb定时器说明书_stm32_19


TIM_OC_InitStruct->OCState-捕获/比较1输出使能,寄存器CCER

lua 设置定时器 lueabb定时器说明书_通用寄存器_20


TIM_OC_InitStruct.OCPolarity-捕获/比较1输出极性,寄存器CCER

lua 设置定时器 lueabb定时器说明书_lua 设置定时器_21


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).