新手上路
- 积分
- 47
- 金钱
- 47
- 注册时间
- 2019-7-29
- 在线时间
- 12 小时
|
在原子哥的PWM实验中,TIM3_PWM_Init(899,0); //不分频,PWM 频率=72000/900=80Khz;但是在定时器实验中有说明,APB1能输出最大的频率是36M。其中矛盾请各位指正。
源码:
void TIMER3_PWM_Init(u16 arr,u16 psc){
TIM_TimeBaseInitTypeDef TIM3_TimeBaseInitTypeDef;
GPIO_InitTypeDef GPIO_PWM_InitStructure;
TIM_OCInitTypeDef TIM3_OCInitTypeDef;
/*开始定时器和IO口时钟*/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);
/*重映射PWM IO口 TIMER3_CH2->PB5*/
GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);
/*初始化IO口配置*/
GPIO_PWM_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; //复用推挽
GPIO_PWM_InitStructure.GPIO_Pin=GPIO_Pin_5;
GPIO_PWM_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_PWM_InitStructure);
/*初始化定时器*/
TIM3_TimeBaseInitTypeDef.TIM_ClockDivision=TIM_CKD_DIV1;
TIM3_TimeBaseInitTypeDef.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
TIM3_TimeBaseInitTypeDef.TIM_Period=arr; //自动装载值
TIM3_TimeBaseInitTypeDef.TIM_Prescaler=psc; //预分频系数
TIM_TimeBaseInit(TIM3,&TIM3_TimeBaseInitTypeDef);
/*初始化输出比较参数*/
TIM3_OCInitTypeDef.TIM_OCMode=TIM_OCMode_PWM2; //cnt<CCR比较值无效
TIM3_OCInitTypeDef.TIM_OCPolarity=TIM_OCPolarity_High; //cnt>CCR,有效值为高电平
TIM3_OCInitTypeDef.TIM_OutputState=TIM_OutputState_Enable;
TIM_OC2Init(TIM3,&TIM3_OCInitTypeDef);
/*使能预装载寄存器*/
TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);
/*使能定时器*/
TIM_Cmd(TIM3,ENABLE);
}
主程序:
int main(void)
{
u16 led0pwmval=0;
u8 dir=1;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置 NVIC 中断分组 2
uart_init(115200); //串口初始化波特率为 115200
LED_Init(); //LED 端口初始化
TIM3_PWM_Init(899,0); //不分频,PWM 频率=72000/900=80Khz
while(1)
{
delay_ms(10);
if(dir)led0pwmval++;
else led0pwmval--;
if(led0pwmval>300)dir=0;
if(led0pwmval==0)dir=1;
TIM_SetCompare2(TIM3,led0pwmval);
}
}
|
-
-
|