stm32f103 TIM2 PWM没有输出?
以前用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_InitTypeDefGPIO_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;
}
:L 找到原因,需要REMAP __HAL_AFIO_REMAP_TIM2_ENABLE(); __HAL_AFIO_REMAP_TIM2_ENABLE() 这类操作有bug. 解决方法:
http123s://electronics.stackexchange.com/questions/260757/timer1-remap-cause-debug-crash-on-stm32f103 先base start再PWM start
页:
[1]