新手上路
- 积分
- 20
- 金钱
- 20
- 注册时间
- 2020-10-8
- 在线时间
- 6 小时
|
3金钱
void TIM2_PWM_Init_JX(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); // 使能TIM2时钟 JOJO
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 使能GPIOA时钟
//定时器输出引脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//刷新值暂定 JOJO
GPIO_Init(GPIOA, &GPIO_InitStructure); // 初始化PA0、PA1
//初始化TIM1的计数模式、分频值、重装载值等
TIM_TimeBaseStructure.TIM_Period = 899; // 设置下一个更新事件后,装入自动重装载寄存器的值
TIM_TimeBaseStructure.TIM_Prescaler =0; // 设置TIM2时钟预分频值
TIM_TimeBaseStructure.TIM_ClockDivision = 0; // 设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 向上计数模式
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); // 根据参数初始化TIM2
//初始化TIM1_CH1-4的PWM
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; // 选择定时器模式:TIM脉冲宽度调制模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; // 比较输出使能
TIM_OCInitStructure.TIM_Pulse = 0; //jojo
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; // 输出极性:TIM输出比较极性高;
TIM_OC1Init(TIM2, &TIM_OCInitStructure); // 数初始化TIM2_OC1
TIM_OC2Init(TIM2, &TIM_OCInitStructure); // 数初始化TIM2_OC2
TIM_OC3Init(TIM2, &TIM_OCInitStructure); // 数初始化TIM2_OC3
TIM_OC4Init(TIM2, &TIM_OCInitStructure); // 数初始化TIM2_OC4
TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable); // 使能TIM1在OC1上的预装载寄存器
TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable); // 使能TIM1在OC2上的预装载寄存器
TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable); // 使能TIM1在OC3上的预装载寄存器
TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable); // 使能TIM1在OC4上的预装载寄存器
TIM_ARRPreloadConfig(TIM2,ENABLE); // 使能TIM2的自动重装载寄存器
TIM_CtrlPWMOutputs(TIM2,ENABLE); // 主输出使能
int main()
{
TIM2_PWM_Init_JX;
int dir=1;
int compare=0;
while(1)
{
delay(100);
if(dir==1) compare++;
else compare--;
if(compare>500) dir=0;
if(compare==1) dir=1;
TIM_SetCompare4(TIM2,compare);
}
}
|
|