新手上路
- 积分
- 26
- 金钱
- 26
- 注册时间
- 2020-7-26
- 在线时间
- 6 小时
|
1金钱
- void TimeSteerMotorConfig(u32 arr,u32 psc)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
- TIM_OCInitTypeDef TIM_OCInitStructure;
-
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); //TIM4时钟使能
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); //使能GPIOB时钟
- GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_TIM4);
- GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_TIM4);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7; //GPIO
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度100MHz
- GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
- GPIO_Init(GPIOB,&GPIO_InitStructure);
-
- TIM_TimeBaseStructure.TIM_Prescaler=psc; //定时器分频
- TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
- TIM_TimeBaseStructure.TIM_Period=arr; //自动重装载值
- TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
- //TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0;//默认就为0
- TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure); //初始化定时器4
-
- //初始化TIM1 PWM模式
- //PWM 模式 1–– 在递增计数模式下,只要 TIMx_CNT<TIMx_CCR1,通道 1 便为有效状态,否则为无效状态。在递减计数模式下,
- TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //PWM1为正常占空比模式,PWM2为反极性模式
- TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性低,有效电平为低电平
- // TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset; //在空闲时输出 低,这里的设置可以改变TIM_OCPolarity 如果没这句,第1通道有问题
- TIM_OCInitStructure.TIM_Pulse = 2000; //输入通道1 CCR1(占空比数值)
- TIM_OC1Init(TIM4, &TIM_OCInitStructure); //Ch1初始化
- TIM_OC2Init(TIM4, &TIM_OCInitStructure); //TIM4中CH2初始化
-
- //TIM_OCInitStructure.TIM_Pulse = 5000;
- //TIM_OC4Init(TIM8, &TIM_OCInitStructure);//通道4
- TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable); //使能TIM1在CCR1上的预装载寄存器,CCR自动装载默认也是打开的
- TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable); //使能TIM4在CCR2上得预装载寄存器
- TIM_ARRPreloadConfig(TIM4,ENABLE); //ARPE使能
- TIM_Cmd(TIM4, ENABLE); //使能TIM1
- TIM_CtrlPWMOutputs(TIM4, ENABLE); //使能TIM1的PWM输出,TIM1与TIM8有效,如果没有这行会问题
- }
复制代码 在GPIO复用语句中 如果写成GPIO_PinAFConfig(GPIOB, GPIO_PinSource6|GPIO_PinSource7, GPIO_AF_TIM4);
会导致B6引脚无法正常输出PWM波,只有分开复用才能两个引脚都正常输出PWM波,这是为什么?
|
最佳答案
查看完整内容[请看2#楼]
如果下到寄存器去看 GPIO_PinSource6|GPIO_PinSource7 = 0x06 | 0x07 = 0x07 等于还是只有7被配置了
|