[STM32F4] 在同一段代码中使用“HAL_TIM_PWM_Start”和“HAL_Delay”时遇到问题

[复制链接]
 楼主| 铁头电子player 发表于 2025-7-22 10:25 | 显示全部楼层 |阅读模式
本帖最后由 铁头电子player 于 2025-7-28 23:01 编辑

我正在用以下程序:以速度“1”运行直流电机(使用PWM命令),等待5秒,然后以速度“2”运行并等待5秒,之后电机停止。
问题是电机一直处于循环中:启动约1秒后就停止。(它没有保持5秒的运行时间)。
我使用的是STM32F4,电机引脚为C7。
我的项目是用STM32CubeIDE配置的。
#include "main.h"    TIM_HandleTypeDef htim3;    int puls ;    float duty ;    UART_HandleTypeDef huart2;    void SystemClock_Config(void);    static void MX_GPIO_Init(void);    static void MX_USART2_UART_Init(void);    static void MX_TIM3_Init(void);        int main(void)    {      HAL_Init();      SystemClock_Config();      MX_GPIO_Init();      MX_USART2_UART_Init();      MX_TIM3_Init();      /* USER CODE BEGIN 2 */    HAL_TIM_Base_Start(&htim3);    HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);      while (1)      {puls=150 ; // motor with speed 1       duty =(puls*100)/31999;             MX_TIM3_Init();            HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);            HAL_Delay(5000);          puls=300 ; //motor with  speed  2        duty =(puls*100)/31999;        MX_TIM3_Init();        HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);        HAL_Delay(5000);        HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_2);           }        }static void MX_TIM3_Init(void){  TIM_ClockConfigTypeDef sClockSourceConfig = {0};  TIM_MasterConfigTypeDef sMasterConfig = {0};  TIM_OC_InitTypeDef sConfigOC = {0};  htim3.Instance = TIM3;  htim3.Init.Prescaler = 31999;  htim3.Init.CounterMode = TIM_COUNTERMODE_UP;  htim3.Init.Period = 65535;  htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;  htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;  if (HAL_TIM_Base_Init(&htim3) != HAL_OK)  {    Error_Handler();  }  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;  if (HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig) != HAL_OK)  {    Error_Handler();  }  if (HAL_TIM_PWM_Init(&htim3) != HAL_OK)  {    Error_Handler();  }  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;  if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)  {    Error_Handler();  }  sConfigOC.OCMode = TIM_OCMODE_PWM1;  sConfigOC.Pulse = puls;  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;  if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)  {    Error_Handler();  }    HAL_TIM_MspPostInit(&htim3); }
LOVEEVER 发表于 2025-7-29 23:08 | 显示全部楼层
HAL_TIM_PWM_Start标准KU文件应该还需要确认一下配置
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

38

帖子

0

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