初级会员

- 积分
- 116
- 金钱
- 116
- 注册时间
- 2019-10-16
- 在线时间
- 18 小时
|
通用定时器所用引脚可以从原理图上看到,配置过程几乎一致:
pwm.h
- #ifndef __PWM_H
- #define __PWM_H
- #include "sys.h"
- void TIM3_PWM_Init(u16 arr,u16 psc);//可以设置为TIM2/3/4/5
- #endif
复制代码
pwm.c
- #include "pwm.h"
- void TIM3_PWM_Init(u16 arr,u16 psc)
- {
-
- GPIO_InitTypeDef GPIO_InitStructure;
- TIM_TimeBaseInitTypeDef TIM_TimeBaseInitstruct;
- TIM_OCInitTypeDef TIM_OCInitStructure;
-
-
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);//改变相应的引脚号和时钟号,就能有不同的引脚PWM输出,此处是PA.7,TIM3_CH1没有重映射
- //RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //是否启用重映射
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
-
-
- GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
- GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;
- GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
- GPIO_Init(GPIOA,&GPIO_InitStructure);
- //GPIO_SetBits(GPIOA,GPIO_Pin_1);//初始为低电平,可有可无
-
- //GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);//是否启用重映射
-
- TIM_TimeBaseInitstruct.TIM_ClockDivision=TIM_CKD_DIV1;
- TIM_TimeBaseInitstruct.TIM_CounterMode=TIM_CounterMode_Up;
- TIM_TimeBaseInitstruct.TIM_Period=arr;
- TIM_TimeBaseInitstruct.TIM_Prescaler=psc;
- TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitstruct);
-
- TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择 PWM 模式 2
- TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
- TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性高
- TIM_OC2Init(TIM3, &TIM_OCInitStructure); //初始化 TIM3 OC1
-
- TIM_Cmd(TIM3, ENABLE);
-
- TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
- //TIM_ARRPreloadConfig(TIM3,ENABLE);//为什么正点原子的教程里没有加这个函数,可没有这个除了例程别的引脚都没法动,加了一次之后就不需要要能控制舵机了(楼主遇到的// //小错误没有可以忽略)
- }
复制代码
main.c
- #include "stm32f10x.h"
- #include "delay.h"
- #include "pwm.h"
- int main()
- {
- u16 delay_time = 500;
- u16 angle=195;
- u8 i;
- delay_init();
-
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
- TIM3_PWM_Init(199,7199);
- while(1)
- {
- for(i=0;i<4;i++)
- {
- delay_ms(delay_time);
- TIM_SetCompare2(TIM3,angle);
- angle-=5;
- }
- for(i=0;i<4;i++)
- {
- delay_ms(delay_time);
- TIM_SetCompare2(TIM3,angle);
- angle+=5;
- }
- }
-
- }
复制代码
|
|