硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5466|回复: 1
收起左侧

[技术讨论] STM32 HAL库 定时器比较翻转 一直配置不成功

[复制链接]

9

主题

78

回帖

105

积分

初级会员

积分
105
发表于 2021-1-7 10:32:23 | 显示全部楼层 |阅读模式
如题所示,使用HAL库,配置定时器比较翻转模式,一直输出不成功,是哪个地方除了问题呢?请教各位大神,以前使用标准库是没有问题的.
  1. /* TIM1 init function */

  2. void MS_TIM_Init(void)
  3. {
  4.     TIM_ClockConfigTypeDef sClockSourceConfig = { 0 };
  5.     TIM_MasterConfigTypeDef sMasterConfig = { 0 };
  6.     TIM_OC_InitTypeDef sConfigOC = { 0 };

  7.     htim4.Instance = TIM4;
  8.     htim4.Init.Prescaler = 44;
  9.     htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
  10.     htim4.Init.Period = 24;
  11.     htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  12.     htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  13.     if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
  14.     {
  15.         Error_Handler();
  16.     }
  17.     sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  18.     if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK)
  19.     {
  20.         Error_Handler();
  21.     }
  22.     if (HAL_TIM_OC_Init(&htim4) != HAL_OK)
  23.     {
  24.         Error_Handler();
  25.     }
  26.     sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  27.     sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  28.     if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK)
  29.     {
  30.         Error_Handler();
  31.     }
  32.     sConfigOC.OCMode = TIM_OCMODE_TOGGLE;
  33.     sConfigOC.Pulse = 200;
  34.     sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  35.     sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  36.     if (HAL_TIM_OC_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
  37.     {
  38.         Error_Handler();
  39.     }

  40. //    __HAL_TIM_ENABLE_OCxPRELOAD(&htim4, TIM_CHANNEL_1);

  41.     HAL_TIM_MspPostInit(&htim4);

  42. }

  43. void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
  44. {

  45.     if (tim_baseHandle->Instance == TIM4)
  46.     {
  47.         /* USER CODE BEGIN TIM1_MspInit 0 */

  48.         /* USER CODE END TIM1_MspInit 0 */
  49.         /* TIM1 clock enable */
  50.         __HAL_RCC_TIM4_CLK_ENABLE()
  51.         ;
  52.         /* USER CODE BEGIN TIM1_MspInit 1 */

  53.         /* USER CODE END TIM1_MspInit 1 */
  54.     }
  55. }

  56. void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
  57. {

  58.     GPIO_InitTypeDef GPIO_InitStruct = { 0 };
  59.     if (timHandle->Instance == TIM4)
  60.     {
  61.         /* USER CODE BEGIN TIM1_MspPostInit 0 */

  62.         /* USER CODE END TIM1_MspPostInit 0 */

  63.         __HAL_RCC_GPIOB_CLK_ENABLE()
  64.         ;
  65.         /**TIM1 GPIO Configuration
  66.          PA8     ------> TIM1_CH1
  67.          */
  68.         GPIO_InitStruct.Pin = GPIO_PIN_6;
  69.         GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  70.         GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  71.         HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  72.         /* USER CODE BEGIN TIM1_MspPostInit 1 */

  73.         /* USER CODE END TIM1_MspPostInit 1 */
  74.     }

  75. }

  76. void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
  77. {

  78.     if (tim_baseHandle->Instance == TIM4)
  79.     {
  80.         /* USER CODE BEGIN TIM1_MspDeInit 0 */

  81.         /* USER CODE END TIM1_MspDeInit 0 */
  82.         /* Peripheral clock disable */
  83.         __HAL_RCC_TIM4_CLK_DISABLE();
  84.         /* USER CODE BEGIN TIM1_MspDeInit 1 */

  85.         /* USER CODE END TIM1_MspDeInit 1 */
  86.     }
  87. }
复制代码
如果修改为pwm模式没有问题,在比较翻转模式,修改pulse的值,当pulse值大于arr值,不输出,当pulse值小于arr值输出,但是输出的是arr的周期值
回复

使用道具 举报

9

主题

78

回帖

105

积分

初级会员

积分
105
 楼主| 发表于 2021-1-7 14:04:41 | 显示全部楼层
额,问题解决了,我的中断函数写错了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-29 16:08 , Processed in 0.143090 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表