
以前用TIM8输出2路PWM正常,现在改为TIM2却没有输出,对照datasheet寄存器详细查了遍,没看出问题。先贴出了主要代码,哪位能看看有什么问题? 非常感谢。 static bool PWM_Init(void) { TimHandle2.Instance = TIM2; TimHandle2.Init.Prescaler = (uint32_t)(SystemCoreClock / 16000000) - 1; TimHandle2.Init.Period = 5000; TimHandle2.Init.ClockDivision = 0; TimHandle2.Init.CounterMode = TIM_COUNTERMODE_UP; TimHandle2.Init.RepetitionCounter = 0; if (HAL_TIM_PWM_Init(&TimHandle2) != HAL_OK) return false; // Configure PWM duty cycle for (int i = 2; i < 4; i++) { sConfig.Pulse = PWM_GetRealOutput(0); sConfig.OCMode = TIM_OCMODE_PWM1; sConfig.OCPolarity = TIM_OCPOLARITY_HIGH; sConfig.OCNPolarity = TIM_OCNPOLARITY_HIGH; sConfig.OCFastMode = TIM_OCFAST_DISABLE; sConfig.OCIdleState = TIM_OCIDLESTATE_RESET; sConfig.OCNIdleState = TIM_OCNIDLESTATE_RESET; uint32_t address = PWM_GetChannelAddress(i); if (address == -1) return false; if (HAL_TIM_PWM_ConfigChannel(&TimHandle2, &sConfig, address) != HAL_OK) return false; if (HAL_TIM_PWM_Start(&TimHandle2, address) != HAL_OK) return false; } } void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim) { GPIO_InitTypeDef GPIO_InitStruct; if (htim == &TimHandle2) { __HAL_RCC_SYSCFG_CLK_ENABLE(); __HAL_RCC_AFIO_CLK_ENABLE(); __HAL_RCC_TIM2_CLK_ENABLE(); __GPIOB_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_PIN_10 | GPIO_PIN_11; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Speed = GPIO_SPEED_HIGH; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); } } bool MOTOR_SetValue(uint8_t ao, float value) { uint32_t pulse = PWM_GetRealOutput(value); if (ao == 0) TimHandle2.Instance->CCR1 = pulse; else if (ao == 1) TimHandle2.Instance->CCR2 = pulse; else if (ao == 2) TimHandle2.Instance->CCR3 = pulse; else if (ao == 3) TimHandle2.Instance->CCR4 = pulse; else return false; return true; } |
http123s://electronics.stackexchange.com/questions/260757/timer1-remap-cause-debug-crash-on-stm32f103