gpt4 book ai didi

arm - STM32F103 TIM1 脉宽调制输出

转载 作者:行者123 更新时间:2023-12-02 07:02:47 25 4
gpt4 key购买 nike

我想我在初始化TIM1的PWM时做错了什么。我需要在 PA8 上获取信号,但我的代码(适用于 TIM2-TIM5)不适用于 TIM1。下面的设置有错误吗?

首先我以为这是因为我没有调用TIM_OCStructInit(),但是添加它后我仍然在PA8上得到低电平并且没有信号。它配置为 AF_PP,并且我没有重新映射 TIM1..

... {.tim = TIM1, .id = RCC_APB2Periph_TIM1, 
.channels = {
{.gpio = GPIOA, .gpio_pin = GPIO_Pin_8, },
{.gpio = GPIOA, .gpio_pin = GPIO_Pin_9, },
{.gpio = GPIOA, .gpio_pin = GPIO_Pin_10, },
{.gpio = GPIOA, .gpio_pin = GPIO_Pin_11, }
}
} ...

.....

RCC_APB1PeriphClockCmd(_timers[tim_id].id, ENABLE);

TIM_TimeBaseInitTypeDef timerInitStructure;
TIM_OCInitTypeDef outputChannelInit;

TIM_TimeBaseStructInit(&timerInitStructure);

timerInitStructure.TIM_Prescaler = F_CPU/1000000UL; // set 1us resolution
timerInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
timerInitStructure.TIM_Period = period;
timerInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
timerInitStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIMx, &timerInitStructure);

TIM_OCStructInit(&outputChannelInit);

outputChannelInit.TIM_OCMode = TIM_OCMode_PWM1;
outputChannelInit.TIM_Pulse = def_width;
outputChannelInit.TIM_OutputState = TIM_OutputState_Enable;
outputChannelInit.TIM_OCPolarity = TIM_OCPolarity_High;


switch((chan & 0x3)){
case 0:
TIM_OC1Init(TIMx, &outputChannelInit);
TIM_OC1PreloadConfig(TIMx, TIM_OCPreload_Enable);
break;
case 1:
TIM_OC2Init(TIMx, &outputChannelInit);
TIM_OC2PreloadConfig(TIMx, TIM_OCPreload_Enable);
break;
case 2:
TIM_OC3Init(TIMx, &outputChannelInit);
TIM_OC3PreloadConfig(TIMx, TIM_OCPreload_Enable);
break;
case 3:
TIM_OC4Init(TIMx, &outputChannelInit);
TIM_OC4PreloadConfig(TIMx, TIM_OCPreload_Enable);
break;
};

//TIM_ARRPreloadConfig(TIMx, ENABLE);
TIM_CtrlPWMOutputs(TIMx, ENABLE);
TIM_Cmd(TIMx, ENABLE);

GPIO_InitTypeDef gpioStructure;
gpioStructure.GPIO_Pin = _timers[tim_id].channels[chan & 0x3].gpio_pin;
gpioStructure.GPIO_Mode = GPIO_Mode_AF_PP;
gpioStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(_timers[tim_id].channels[chan & 0x3].gpio, &gpioStructure);

最佳答案

明白了!当我应该对 TIM1 使用 RCC_APB2PeriphClockCmd 时,我对所有计时器使用了 RCC_APB1PeriphClockCmd。现在一切都很好!

关于arm - STM32F103 TIM1 脉宽调制输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28327472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com