RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
//复用GPIOA_PO引脚 输出PMW
//复用GPIOA_PO引脚 输出PMW ,经过查引脚定义,PAO的复用功能有TIM2_CH1_ETR
//TIM2_CH1 _ETR,意思是这个TIM2的CH1和ETR都复用到了这个位置
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStruct);
//CK_PSC = 72M
//CCR = TIM_OCInitStruct.TIM_Pulse
//PWM频率Freq = CK_PSC/PSC+1/ARR=1 = 72M/
//PWM占空比Duty = CCR/ARR+1
//PWM分辨率Reso = 1/ARR+1
//产生频率为1khz,占空比50% 分辨率1%PWM波形计算方法
//1/ARR+1 = 1%; ARR+1=100
//CCR/ARR+1 = 50% = CCR/100 = CCR = 50;
//CK_PSC/PSC+1/ARR+1 = 1Khz = 72M/PSC+1/100 = 1000HZ = PSC =720
//定时1s = 72M/(7200)/10000
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInitStruct.TIM_Period = 100-1; //arr
TIM_TimeBaseInitStruct.TIM_Prescaler = 720-1; //psc
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStruct);
TIM_OCInitTypeDef TIM_OCInitStruct;
TIM_OCStructInit(&TIM_OCInitStruct);
TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStruct.TIM_OCNPolarity = TIM_OCNPolarity_High;
TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStruct.TIM_Pulse = 50; //CCR
TIM_OC1Init(TIM2, &TIM_OCInitStruct);//ch1通道pwm
TIM_Cmd(TIM2,ENABLE);
复用GPIOA_PO引脚 输出PMW计算公式
于 2023-11-07 10:15:54 首次发布