stm32.pwm.相关难点(PWM四大模式)
pwm学习内容(这方面知识个人觉得直接上图配合文字更好理解)
·
pwm学习内容
STM32 的pwm输出极性问题:
如果是PWM1模式 :
如果设置
TIM_OCPolarity_High
TIMx_CNT<TIMx_CCR=输出为高电平
TIMx_CNT>TIMx_CCR=输出为低电平
如果设置
TIM_OCPolarity_Low
TIMx_CNT<TIMx_CCR输出就为低电平
TIMx_CNT>TIMx_CCR输出就为高电平
如果是PWM2模式 :
如果设置TIM_OCPolarity_Low
TIMx_CNT>TIMx_CCR输出就为低电平
TIMx_CNT<TIMx_CCR输出就为高电平
如果设置TIM_OCPolarity_High
TIMx_CNT>TIMx_CCR输出为高电平
TIMx_CNT<TIMx_CCR输出为低电平
pwm原理
(这方面知识个人觉得直接上图配合文字更好理解)
pwm配置
- 端口重映射(原因:TIM3_CH2默认接在PA7,DS0接在PB5上)
- 利用飞线把PA7和PB5接起来
- 重映射 AFIO_MAPR寄存器
RCC->APB2ENR|=1; //AFIO时钟
AFIO->MAPR|=2<<10; //重映射
- 捕获/比较使能寄存器(TIMx_CCER)
- 捕获/比较模式寄存器 1(TIMx_CCMR1)
void tim_pwm_init(u16 arr,u16 Psc)
{
// TIM_OCInitTypeDef TIM_OCInitTypeSTR;
RCC->APB2ENR|=1; //AFIO时钟
RCC->APB2ENR|=1<<3;// B时钟
RCC->APB1ENR|=1<<1; // 定时器4
GPIOB->CRH&=0XFFFFFFF0;
GPIOB->CRH|=0X0000000B; //GPIO模式
//AFIO->MAPR|=2<<10; //重映射
//GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE );
TIM4->ARR=arr; //自动重装载寄存器
TIM4->PSC=Psc; // 预分频器
TIM4->DIER|=1; //允许更新中断
TIM4->CR1|=0X01; //使能计数器
TIM4->CCMR2|=7<<4; //模式 2 cnt大于ccr2输出有效电频
TIM4->CCMR2|=1<<3; //:输出比较3预装载使能
TIM4->CCER|=1<<4;
TIM4->CCER|=1<<5; //有效电频输出低
TIM4->CR1|=~(1<<7); //:TIMx_ARR寄存器被装入缓冲器。
/*
TIM_OCInitTypeSTR.TIM_OCMode=TIM_OCMode_PWM2;
TIM_OCInitTypeSTR.TIM_OCNPolarity=TIM_OCPolarity_High;
TIM_OCInitTypeSTR.TIM_OutputState= TIM_OutputState_Enable;
TIM_OC2Init(TIM3,&TIM_OCInitTypeSTR);
TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);
TIM_Cmd(TIM3,ENABLE);*/
}
int main()
{
u16 a=0;
u8 b=1;
NVIC_PriorityGroupConfig( NVIC_PriorityGroup_2);
delay_init(); //延时初始化
led_init(); //初始化与LED连接的硬件接口
//tim_init(4999,7199);
tim_pwm_init(899,0);
while(1)
{
delay_ms(10);
if(b==1)a++;
else a--;
if(a>300)b=0;
if(a==0)b=1;
TIM3->CCR2 =a; //比较值 预装在值
}
}
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献4条内容
所有评论(0)