STM32 使用同一个程序复位后会出现不一样频率的PWM波

2019-12-12 18:08发布

正在做一个用TIM1 生成6路PWM波的程序,用到了Hal库和CubeMX,代码基本已经成型。
现在出现一个问题,我复位之后重启代码,有时会出现不一样频率的PWM波。
两张图是重启之后的不同情况,100us的周期是设计需要的,但是不知道什么情况造成另一种频率出现。
之后有加按键开关,但是仍然不能解决问题,希望大佬指点一下问题所在。
主要代码在下面附上
  1. int main(void)
  2. {
  3.   /* USER CODE BEGIN 1 */
  4.                 uint16_t dutycycle = 0;
  5.   /* USER CODE END 1 */

  6.   /* MCU Configuration--------------------------------------------------------*/

  7.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  8.   HAL_Init();

  9.   /* USER CODE BEGIN Init */

  10.   /* USER CODE END Init */

  11.   /* Configure the system clock */
  12.   SystemClock_Config();

  13.   /* USER CODE BEGIN SysInit */

  14.        
  15.   /* USER CODE END SysInit */

  16.   /* Initialize all configured peripherals */
  17. //  HAL_TIM_Base_DeInit(&htim1);
  18.         MX_GPIO_Init();
  19.           MX_TIM1_Init();
  20.   /* USER CODE BEGIN 2 */
  21. //        HAL_TIM_Base_Start_IT(&htim1);
  22. //        HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
  23. //        HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);
  24. //        HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3);

  25. //        HAL_TIM_Base_Start_IT(&htim3);
  26.        
  27.   /* USER CODE END 2 */

  28.   /* Infinite loop */
  29.   /* USER CODE BEGIN WHILE */
  30.        
  31.   while (1)
  32.         {

  33.     /* USER CODE END WHILE */

  34.     /* USER CODE BEGIN 3 */
  35.          }
  36.   /* USER CODE END 3 */
  37. }
复制代码
按键开关
  1. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
  2. {
  3.         if(GPIO_Pin == GPIO_PIN_14)
  4.         {
  5.                         MX_TIM1_Init();
  6.                         HAL_TIM_Base_Start_IT(&htim1);
  7.                         HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
  8.                         HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);
  9.                         HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3);
  10.         }
  11.         if (GPIO_Pin == GPIO_PIN_15)
  12.         {               
  13.                         HAL_TIM_Base_DeInit(&htim1);
  14.                         HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_1);
  15.                         HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_1);
  16.                         HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_1);
  17.                         HAL_TIM_Base_Stop_IT(&htim1);
  18.         }
  19. }
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
PICTURE
1楼-- · 2019-12-12 19:55
定时器是否在复位后初始化失败了引起时序不正确。可以在问题出现的时候做一个触发条件(比如按键)再执行一次初始化定时器,来查看是否初始化时出问题。
wangmengqiwo
2楼-- · 2019-12-13 01:41
PICTURE 发表于 2019-4-25 10:25
定时器是否在复位后初始化失败了引起时序不正确。可以在问题出现的时候做一个触发条件(比如按键)再执行一 ...

我之前也在考虑是这个问题,首先不知道是什么原因可能造成初始化失败,然后我想试试看能不能用递归函数解决,有没有具体的意见,非常感谢
wangmengqiwo
3楼-- · 2019-12-13 02:54
PICTURE 发表于 2019-4-25 10:25
定时器是否在复位后初始化失败了引起时序不正确。可以在问题出现的时候做一个触发条件(比如按键)再执行一 ...

按键重置初始化我一会试试看
kebaojun305
4楼-- · 2019-12-13 05:52
定时器初始化之前 先复位下定时器。
wangmengqiwo
5楼-- · 2019-12-13 07:57
 精彩回答 2  元偷偷看……

一周热门 更多>