STM32F103RC TIM3不工作

STM32F103RC TIM3不工作,c,timer,stm32,keil,C,Timer,Stm32,Keil,我想用TIM3来控制伺服系统。我已经在两个伺服系统中使用了TIM2 CH1CH2,但我还需要四个。问题是我发现引脚中没有PWM输出。 下面是我的代码,我很困惑,只要TIM2已经在工作,它怎么可能是错误的。会有任何冲突吗?我已经检查了我的项目,确信我没有在其他任何地方使用过TIM3 GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_O

我想用TIM3来控制伺服系统。我已经在两个伺服系统中使用了TIM2 CH1CH2,但我还需要四个。问题是我发现引脚中没有PWM输出。 下面是我的代码,我很困惑,只要TIM2已经在工作,它怎么可能是错误的。会有任何冲突吗?我已经检查了我的项目,确信我没有在其他任何地方使用过TIM3

GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_OCInitTypeDef  TIM_OCInitStructure;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
TIM_DeInit(TIM2);
TIM_DeInit(TIM3);
/* Time base configuration */
TIM_TimeBaseStructure.TIM_Period =  500;
TIM_TimeBaseStructure.TIM_ClockDivision =  TIM_CKD_DIV2;
TIM_TimeBaseStructure.TIM_Prescaler = 7199; // 50 Hz
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

/* PWM1 Mode configuration: Channel 1 */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;           //produce output when counter < CCR
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;   //set "high" to be effective output
TIM_OCInitStructure.TIM_Pulse = 0;                          // ccr_val
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

TIM_OC1Init(TIM2, &TIM_OCInitStructure);
TIM_OC2Init(TIM2, &TIM_OCInitStructure);

TIM_OC1Init(TIM3, &TIM_OCInitStructure);
TIM_OC2Init(TIM3, &TIM_OCInitStructure);
TIM_OC3Init(TIM3, &TIM_OCInitStructure);
TIM_OC4Init(TIM3, &TIM_OCInitStructure);

TIM_ARRPreloadConfig(TIM2, ENABLE);
TIM_ARRPreloadConfig(TIM3, ENABLE);

TIM_Cmd(TIM2, ENABLE);
TIM_Cmd(TIM3, ENABLE);

TIM_CtrlPWMOutputs(TIM2, ENABLE);
TIM_CtrlPWMOutputs(TIM3, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCINITYPE定义TIM_OCINITYPE结构;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA和GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0 | GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB和GPIO_InitStructure);
蒂姆·迪尼特(TIM2);
蒂姆·迪尼特(TIM3);
/*时基配置*/
TIM_TimeBaseStructure.TIM_Period=500;
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV2;
TIM_TimeBaseStructure.TIM_预分频器=7199;//50赫兹
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode\u Up;
TIM_TimeBaseInit(TIM2和TIM_TimeBaseStructure);
TIM_TimeBaseInit(TIM3和TIM_TimeBaseStructure);
/*PWM1模式配置:通道1*/
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1//当计数器
问题已解决。我使用以下方法打开了所有RCC时钟:

RCC_APB1PeriphClockCmd(((uint32_t)0xFFFFFFFF,ENABLE);
RCC_APB2PeriphClockCmd(((uint32_t)0xFFFFFFFF),ENABLE);
但是,在PA6,7上,SPI(以及一些我尚未验证的其他外围设备)和TIM3之间存在冲突。

是冲突导致了问题。

请确定,您是否使用RCC外围设备启用了TIM3的时钟?当然,还有GPIOA和GPIOB的时钟。如果你提供文档的直接链接,你可以为每个帮助你的人节省很多时间。@BenVoigt,@Étienne:这是无用的。我们需要的是数据表,而不是零件数据表。也许也是。(我要求OP提供这些资料的原因之一是必须对这些资料进行分类)@BenVoigt参考手册在这里,我同意你的观点,最好提供问题,只是想帮助: