找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1141|回复: 0
收起左侧

STM32单片机PWM输出一直是高电平,怎么解决?

[复制链接]
ID:42292 发表于 2023-9-2 15:18 | 显示全部楼层 |阅读模式
100黑币
1、单片机:STM32L031G6U6
2、使用IO:PA6 TIM22 CH1   PA7 TIM22 CH2
3、时钟配置:1.048M
TIM22配置频率:晶振频率1.048Mhz  预分频系数为 0,自动重装载值为 99,定时器溢出频率,即PWM的周期,就是 1.048MHz/(0+1)/(99+1) = 10.048kHz
4、问题:不能输出PWM波形,示波器测试的

使能时输出高电平,不使能时输出低电平
HAL_TIM_PWM_Start(&htim22,TIM_CHANNEL_1);  //开启PWM输出
HAL_TIM_PWM_Start(&htim22,TIM_CHANNEL_2);  //开启PWM输出


TIM22初始化的代码

  1. static void MX_TIM22_Init(void)
  2. {

  3.   /* USER CODE BEGIN TIM22_Init 0 */
  4. __HAL_RCC_TIM22_CLK_ENABLE();
  5.   /* USER CODE END TIM22_Init 0 */
  6. __HAL_RCC_TIM22_CLK_ENABLE();
  7.   TIM_ClockConfigTypeDef sClockSourceConfig = {0};
  8.   TIM_MasterConfigTypeDef sMasterConfig = {0};
  9.   TIM_OC_InitTypeDef sConfigOC = {0};

  10.   /* USER CODE BEGIN TIM22_Init 1 */

  11.   /* USER CODE END TIM22_Init 1 */
  12.   htim22.Instance = TIM22;
  13.   htim22.Init.Prescaler = 0;//晶振频率1.048Mhz  预分频系数为 0,自动重装载值为 99,定时器溢出频率,即PWM的周期,就是 1.048MHz/(0+1)/(99+1) = 10.048kHz
  14.   htim22.Init.CounterMode = TIM_COUNTERMODE_UP;
  15.   htim22.Init.Period = 99;
  16.   htim22.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  17.   htim22.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;//自动重装载
  18.   if (HAL_TIM_Base_Init(&htim22) != HAL_OK)
  19.   {
  20.     Error_Handler();
  21.   }
  22.   sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  23.   if (HAL_TIM_ConfigClockSource(&htim22, &sClockSourceConfig) != HAL_OK)
  24.   {
  25.     Error_Handler();
  26.   }
  27.   if (HAL_TIM_PWM_Init(&htim22) != HAL_OK)
  28.   {
  29.     Error_Handler();
  30.   }
  31.   if (HAL_TIM_OnePulse_Init(&htim22, TIM_OPMODE_SINGLE) != HAL_OK)
  32.   {
  33.     Error_Handler();
  34.   }
  35.   sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  36.   sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  37.   if (HAL_TIMEx_MasterConfigSynchronization(&htim22, &sMasterConfig) != HAL_OK)
  38.   {
  39.     Error_Handler();
  40.   }
  41.   sConfigOC.OCMode = TIM_OCMODE_PWM1;// PWM模式1
  42.   sConfigOC.Pulse = 60;//初始化占空比
  43.   sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;//当定时器计数值小于CCR1_Val时为高电平*/
  44.   sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  45.   if (HAL_TIM_PWM_ConfigChannel(&htim22, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
  46.   {
  47.     Error_Handler();
  48.   }
  49.   if (HAL_TIM_PWM_ConfigChannel(&htim22, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
  50.   {
  51.     Error_Handler();
  52.   }
  53.   /* USER CODE BEGIN TIM22_Init 2 */

  54.   /* USER CODE END TIM22_Init 2 */
  55.     __HAL_RCC_GPIOA_CLK_ENABLE();
  56.     /**TIM22 GPIO Configuration
  57.     PA6     ------> TIM22_CH1
  58.     PA7     ------> TIM22_CH2
  59.     */
  60.           GPIO_InitTypeDef GPIO_InitStruct = {0};
  61.     GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
  62.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  63.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  64.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  65.     GPIO_InitStruct.Alternate = GPIO_AF5_TIM22;
  66.     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  67.                
  68.         
  69.   HAL_TIM_PWM_Start(&htim22,TIM_CHANNEL_1);  //开启PWM输出
  70.   //HAL_TIM_PWM_Start(&htim22,TIM_CHANNEL_2);  //开启PWM输出
  71.   __HAL_TIM_SET_COMPARE(&htim22,TIM_CHANNEL_1,50);  //设置默认的占空比值
  72.   //__HAL_TIM_SET_COMPARE(&htim22,TIM_CHANNEL_2,50);  //设置默认的占空比值
  73. }

复制代码
主函数调用初始化


  1. int main(void)
  2. {
  3.                 static U8 LedTimer;
  4.                 U8 temp;
  5.                 HAL_Init();

  6.                 SystemClock_Config();
  7.                 MX_ADC_Init();
  8.                 MX_GPIO_Init();

  9.                 MX_TIM2_Init();   
  10.                 MX_TIM21_Init();
  11.           MX_TIM22_Init();  
复制代码
主循环中持续输出:

  1.   while (1)
  2.                 {
  3.                           __HAL_TIM_SET_COMPARE(&htim22,TIM_CHANNEL_1,50);  //设置默认的占空比值
  4.                         led_blink();
复制代码



回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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