[STM32H5] 【STM32 Nucleo-64 测评】基于通用定时器产生PWM

[复制链接]
772|4
 楼主| yinxiangxv 发表于 2024-8-8 15:13 | 显示全部楼层 |阅读模式
本帖最后由 yinxiangxv 于 2024-8-13 18:53 编辑

首先还是按照一般的 流程,用cube mx进行代码的生成:
选择相关芯片,进行相关时钟的配置,然后在定时器的通道,并使能相关的引脚,使其产生pwm信号。
具体操作过程和代码如下:
9887366bb399e7835f.png
可以根据自己的需要开启调试接口
3973266bb39cf14f6e.png
关于系统时钟,可以采用默认的,也可以自行设置一下,hclk设置为250也可以.
2725066bb3a489ef05.png
在tim.c文件中实现相关的函数:
  1. /* USER CODE BEGIN 1 */
  2. void UpdataFreData(int value)
  3. {

  4.                 TIM_MasterConfigTypeDef sMasterConfig = {0};
  5.                 TIM_OC_InitTypeDef sConfigOC = {0};
  6.                
  7.                 htim2.Instance = TIM2;
  8.                 htim2.Init.Prescaler = 24;
  9.                 htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  10.                 htim2.Init.Period = value;
  11.                 htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  12.                 htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;

  13.         if (HAL_TIM_OC_Init(&htim2) != HAL_OK)
  14.                 {
  15.                         Error_Handler();
  16.                 }
  17.                
  18.                 sConfigOC.OCMode = TIM_OCMODE_PWM1;
  19.                 sConfigOC.Pulse = htim2.Init.Period/2;
  20.                 sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  21.                 sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  22.                
  23.         if (HAL_TIM_OC_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
  24.                 {
  25.                         Error_Handler();
  26.                 }
  27.                
  28.                         HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
  29.                 }

  30.                
  31.                
  32. void UpdataDutyData(int value)
  33. {
  34.                 TIM_MasterConfigTypeDef sMasterConfig = {0};
  35.                 TIM_OC_InitTypeDef sConfigOC = {0};

  36.                 htim2.Instance = TIM2;
  37.                 htim2.Init.Prescaler = 24;
  38.                 htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  39.                 htim2.Init.Period = 1999;
  40.                 htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  41. htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;

  42. if (HAL_TIM_OC_Init(&htim2) != HAL_OK)
  43. {
  44.         Error_Handler();
  45. }

  46.                 sConfigOC.OCMode = TIM_OCMODE_PWM1;
  47.                 sConfigOC.Pulse = 1999 * value/100 ;
  48.                 sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  49.                 sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;

  50. if (HAL_TIM_OC_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
  51. {
  52.         Error_Handler();
  53. }
  54.         HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
  55. }
  56. /* USER CODE END 1 */
并在头文件中进行声明
最后在main.c中进行调用

5402666bb39c26e836.png

tim2_pwm.rar

6.53 MB, 下载次数: 0

而服务器人 发表于 2024-8-14 15:10 | 显示全部楼层
确保TIM2的时钟源正确配置,Prescaler、Period、Pulse等设置是否符合预期。HCLK设置为250可能需要确保系统时钟配置匹配。
狄克爱老虎油 发表于 2024-8-17 23:41 来自手机 | 显示全部楼层
不开调试是不是下载一次就不能用了
 楼主| yinxiangxv 发表于 2024-8-26 16:49 | 显示全部楼层
嗯 我的好好看看手册,但是 有没有群,技术群啊 ,方便交流
 楼主| yinxiangxv 发表于 2024-8-26 16:49 | 显示全部楼层
而服务器人 发表于 2024-8-14 15:10
确保TIM2的时钟源正确配置,Prescaler、Period、Pulse等设置是否符合预期。HCLK设置为250可能需要确保系统 ...

嗯 我的好好看看手册,但是 有没有群,技术群啊 ,方便交流
您需要登录后才可以回帖 登录 | 注册

本版积分规则

50

主题

348

帖子

0

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