你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32f103 TIM2 PWM没有输出?

[复制链接]
winamp123 提问时间:2020-8-16 12:05 /
以前用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;
}



收藏 评论3 发布时间:2020-8-16 12:05

举报

3个回答
winamp123 回答时间:2020-8-16 14:35:40
找到原因,需要REMAP __HAL_AFIO_REMAP_TIM2_ENABLE();
winamp123 回答时间:2020-8-16 18:23:52
__HAL_AFIO_REMAP_TIM2_ENABLE() 这类操作有bug. 解决方法:
http123s://electronics.stackexchange.com/questions/260757/timer1-remap-cause-debug-crash-on-stm32f103
lebment 回答时间:2020-8-17 10:54:33
先base start再PWM start

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版