[其他ST产品] STM32 库函数学习 TIM篇

[复制链接]
 楼主| c17 发表于 2023-1-30 16:25 | 显示全部楼层 |阅读模式

HAL_StatusTypeDef HAL_TIM_Base_Init (TIM_HandleTypeDef * htim)

这个函数属于定时器使用基本的定时功能的初始化函数,它的输入参数为自定义的定时器指针。

  1. <p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; overflow: auto hidden; line-height: 24px !important;"><font color="#4d4d4d" face="-apple-system, SF UI Text, Arial, PingFang SC, Hiragino Sans GB, Microsoft YaHei, WenQuanYi Micro Hei, sans-serif, SimHei, SimSun">TIM_HandleTypeDef TIM3_Handler;      //定时器句柄 </font></p><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; overflow: auto hidden; line-height: 24px !important;"><font color="#4d4d4d" face="-apple-system, SF UI Text, Arial, PingFang SC, Hiragino Sans GB, Microsoft YaHei, WenQuanYi Micro Hei, sans-serif, SimHei, SimSun">void TIM3_Init(u16 arr,u16 psc)</font></p><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; overflow: auto hidden; line-height: 24px !important;"><font color="#4d4d4d" face="-apple-system, SF UI Text, Arial, PingFang SC, Hiragino Sans GB, Microsoft YaHei, WenQuanYi Micro Hei, sans-serif, SimHei, SimSun">{  </font></p><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; overflow: auto hidden; line-height: 24px !important;"><font color="#4d4d4d" face="-apple-system, SF UI Text, Arial, PingFang SC, Hiragino Sans GB, Microsoft YaHei, WenQuanYi Micro Hei, sans-serif, SimHei, SimSun">    TIM3_Handler.Instance=TIM3;                          //通用定时器3</font></p><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; overflow: auto hidden; line-height: 24px !important;"><font color="#4d4d4d" face="-apple-system, SF UI Text, Arial, PingFang SC, Hiragino Sans GB, Microsoft YaHei, WenQuanYi Micro Hei, sans-serif, SimHei, SimSun">    TIM3_Handler.Init.Prescaler=psc;                     //分频</font></p><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; overflow: auto hidden; line-height: 24px !important;"><font color="#4d4d4d" face="-apple-system, SF UI Text, Arial, PingFang SC, Hiragino Sans GB, Microsoft YaHei, WenQuanYi Micro Hei, sans-serif, SimHei, SimSun">    TIM3_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;    //向上计数器</font></p><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; overflow: auto hidden; line-height: 24px !important;"><font color="#4d4d4d" face="-apple-system, SF UI Text, Arial, PingFang SC, Hiragino Sans GB, Microsoft YaHei, WenQuanYi Micro Hei, sans-serif, SimHei, SimSun">    TIM3_Handler.Init.Period=arr;                        //自动装载值</font></p><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; overflow: auto hidden; line-height: 24px !important;"><font color="#4d4d4d" face="-apple-system, SF UI Text, Arial, PingFang SC, Hiragino Sans GB, Microsoft YaHei, WenQuanYi Micro Hei, sans-serif, SimHei, SimSun">    TIM3_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;//时钟分频因子</font></p><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; overflow: auto hidden; line-height: 24px !important;"><font color="#4d4d4d" face="-apple-system, SF UI Text, Arial, PingFang SC, Hiragino Sans GB, Microsoft YaHei, WenQuanYi Micro Hei, sans-serif, SimHei, SimSun">    HAL_TIM_Base_Init(&TIM3_Handler);</font></p><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; overflow: auto hidden; line-height: 24px !important;"><font color="#4d4d4d" face="-apple-system, SF UI Text, Arial, PingFang SC, Hiragino Sans GB, Microsoft YaHei, WenQuanYi Micro Hei, sans-serif, SimHei, SimSun">    </font></p><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; overflow: auto hidden; line-height: 24px !important;"><font color="#4d4d4d" face="-apple-system, SF UI Text, Arial, PingFang SC, Hiragino Sans GB, Microsoft YaHei, WenQuanYi Micro Hei, sans-serif, SimHei, SimSun">    </font></p><p style="box-sizing: border-box; outline: 0px; margin-bottom: 16px; overflow: auto hidden; line-height: 24px !important;"><font color="#4d4d4d" face="-apple-system, SF UI Text, Arial, PingFang SC, Hiragino Sans GB, Microsoft YaHei, WenQuanYi Micro Hei, sans-serif, SimHei, SimSun">}</font></p>


评论

c17
———————————————— 版权声明:本文为CSDN博主「似是燕归来」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/s2014201506/article/details/117838129  发表于 2023-1-30 16:34
 楼主| c17 发表于 2023-1-30 16:28 | 显示全部楼层
HAL_StatusTypeDef HAL_TIM_Base_DeInit (TIM_HandleTypeDef * htim)

复位指定的定时器。使用方法和第一个一样。
 楼主| c17 发表于 2023-1-30 16:28 | 显示全部楼层
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)

定时器初始化的回调函数,用来处理优先级和开启定时器时钟等作用。它会自动被第一个函数调用。
  1. void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
  2. {
  3.     if(htim->Instance==TIM3)
  4.         {
  5.                 __HAL_RCC_TIM3_CLK_ENABLE();            //使能TIM3时钟
  6.                 HAL_NVIC_SetPriority(TIM3_IRQn,1,3);    //设置中断优先级,抢占优先级1,子优先级3
  7.                 HAL_NVIC_EnableIRQ(TIM3_IRQn);          //开启ITM3中断   
  8.         }  
  9. }
 楼主| c17 发表于 2023-1-30 16:28 | 显示全部楼层
void HAL_TIM_Base_MspDeInit (TIM_HandleTypeDef * htim)

复位指定的定时器的回调函数。使用方法和第三个一样。
 楼主| c17 发表于 2023-1-30 16:29 | 显示全部楼层
HAL_StatusTypeDef HAL_TIM_Base_Start (TIM_HandleTypeDef * htim)

开启定时器的计时功能,打开定时器。

  1. TIM_HandleTypeDef TIM3_Handler;      //定时器句柄
  2. HAL_TIM_Base_Start(&TIM3_Handler);  //开启定时器
 楼主| c17 发表于 2023-1-30 16:30 | 显示全部楼层
HAL_StatusTypeDef HAL_TIM_Base_Stop (TIM_HandleTypeDef * htim)

关闭定时器使用方法和函数5一样,功能相反。
 楼主| c17 发表于 2023-1-30 16:30 | 显示全部楼层
HAL_StatusTypeDef HAL_TIM_Base_Start_IT (TIM_HandleTypeDef * htim)

开启定时器的中断功能,这个中断指的是定时器计数更新中断,最常见的中断。
  1. HAL_TIM_Base_Start_IT(&TIM3_Handler); //使能定时器3和定时器3更新中断:TIM_IT_UPDATE   

 楼主| c17 发表于 2023-1-30 16:31 | 显示全部楼层
HAL_StatusTypeDef HAL_TIM_Base_Stop_IT (TIM_HandleTypeDef * htim)

关闭定时器的中断功能,使用方法和函数七一样。
 楼主| c17 发表于 2023-1-30 16:31 | 显示全部楼层
HAL_StatusTypeDef HAL_TIM_Base_Start_DMA (TIM_HandleTypeDef * htim, uint32_t * pData, uint16_t Length)

使用DMA的方式进行计数。
 楼主| c17 发表于 2023-1-30 16:32 | 显示全部楼层
HAL_StatusTypeDef HAL_TIM_Base_Stop_DMA (TIM_HandleTypeDef * htim)

停止DMA的方式进行计数
 楼主| c17 发表于 2023-1-30 16:32 | 显示全部楼层
HAL_StatusTypeDef HAL_TIM_OC_Init (TIM_HandleTypeDef * htim)

STM32输出比较模式初始化函数。
  1. HAL_TIM_OC_Init(&htim3)

 楼主| c17 发表于 2023-1-30 16:33 | 显示全部楼层
HAL_StatusTypeDef HAL_TIM_OC_Start (TIM_HandleTypeDef * htim, uint32_t Channel)

开启输出比较功能,输出比较常见于PWM功能和输出翻转信号。输出GPIO定时翻转信号的时候需要注意频率为最终50%。如果需要配置一个50毫秒的GPIO翻转信号,需要将定时器的一次完整计数周期设置为100毫秒。
 楼主| c17 发表于 2023-1-30 16:33 | 显示全部楼层
  1.   htim3.Instance = TIM3;
  2.   htim3.Init.Prescaler = 24000-1;
  3.   htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
  4.   htim3.Init.Period = 1000-1;                 //一百毫秒
  5.   htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  6.   htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  7.   if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
  8.   {
  9.     Error_Handler();
  10.   }
  11. .............
  12.   sConfigOC.OCMode = TIM_OCMODE_TOGGLE;
  13.   sConfigOC.Pulse = 500-1;  //50毫秒计时
  14.   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  15.   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  16.   if (HAL_TIM_OC_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
  17.   {
  18.     Error_Handler();
  19.   }
  20.   /* USER CODE BEGIN TIM3_Init 2 */
  21.         HAL_TIM_OC_Start(&htim3,TIM_CHANNEL_4);
 楼主| c17 发表于 2023-1-30 16:34 | 显示全部楼层
HAL_StatusTypeDef HAL_TIM_OC_Stop (TIM_HandleTypeDef * htim, uint32_t Channel)

停止输出比较功能,输入参数和函数12一样。
 楼主| c17 发表于 2023-1-30 16:35 | 显示全部楼层
HAL_StatusTypeDef HAL_TIM_OC_Start_IT (TIM_HandleTypeDef * htim, uint32_t Channel)

打开输出比较模式的中断,使用中断的方式使用比较输出的模式。他的对应中断回调函数 HAL_TIM_OC_DelayElapsedCallback。
 楼主| c17 发表于 2023-1-30 16:36 | 显示全部楼层
  1. HAL_TIM_OC_Start_IT(&htim3,TIM_CHANNEL_4);
  2. ....
  3. void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef * htim)
  4. {
  5.         if(htim == &htim3)
  6.         {
  7.                 //操作逻辑
  8.         }
  9. }
 楼主| c17 发表于 2023-1-30 16:36 | 显示全部楼层
HAL_StatusTypeDef HAL_TIM_OC_Stop_IT (TIM_HandleTypeDef * htim, uint32_t Channel)

关闭输出比较模式的中断,使用方法和函数14一样。
 楼主| c17 发表于 2023-1-30 16:38 | 显示全部楼层
HAL_StatusTypeDef HAL_TIM_OC_Start_DMA (TIM_HandleTypeDef * htim, uint32_t Channel, uint32_t *pData, uint16_t Length)

开启DMA模式的输出比较功能,此处的pData和长度,可以设置为数据数组为1和长度为1.
 楼主| c17 发表于 2023-1-30 16:38 | 显示全部楼层
  1. uint32_t pdata[1];
  2. HAL_TIM_OC_Start_DMA(&htim3,TIM_CHANNEL_4,pdata,1);
 楼主| c17 发表于 2023-1-30 16:41 | 显示全部楼层
HAL_StatusTypeDef HAL_TIM_OC_Stop_DMA (TIM_HandleTypeDef * htim, uint32_t Channel)

关闭DMA模式的输出比较功能。关闭DMA不需要属于四个参数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

c17

40

主题

312

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部