STM32 输出 PWM

定时器8属于高级定时器,只存在于大容量产品的103系列中,定时器8输出PWM波形时与通用定时器2、3、4、5不同,必须同时开启主输出(TIM8->BDTR|=0x8000;)才能产生PWM波,其配置如下:

/*********************************************
    函数名称:void TIM4_PWM_Init(u16 arr,u16 psc)
    功        能:通用TIM4 CH1(PB6) CH2(PB7)PWM输出初始化
    入        参:arr:自动重装值。
                        psc:时钟预分频数
    返        回:无
【说明】Frq = 72Mhz / ( psc + 1 ) / ( arr + 1 )
*********************************************/
void TIM4_PWM_Init(u16 arr,u16 psc)
{
    RCC->APB1ENR|=1<<2;         //TIM4时钟使能    
    RCC->APB2ENR|=1<<3;        //使能PORTB时钟    
           
    GPIOB->CRL&=0X00FFFFFF;    //PB6 7 输出
    GPIOB->CRL|=0XBB000000;    //复用功能输出       
 
    TIM4->ARR=arr;                //设定计数器自动重装值 
    TIM4->PSC=psc;                //预分频器分频设置
    
    TIM4->CCMR1|=6<<4;      //CH1 PWM1模式
                                                //6: PWM1模式, 正脉冲
                                                //7: PWM2模式, 负脉冲
    TIM4->CCMR1|=1<<3;         //CH1 预装载使能       
    TIM4->CCER|=1<<0;       //OC1 输出使能       
    
    TIM4->CCMR1|=6<<12;      //CH2 PWM1模式
    TIM4->CCMR1|=1<<11;     //CH2 预装载使能       
    TIM4->CCER|=1<<4;       //OC2 输出使能

    TIM4->CR1=0x0080;       //ARPE使能 
    TIM4->CR1|=0x01;        //使能定时器4
}
/*********************************************
    函数名称:TIM8_PWM_Init
    功        能:通用TIM8 CH1(PC6) CH2(PC7)PWM输出初始化
    入        参:arr:自动重装值。
                        psc:时钟预分频数
    返        回:无
【说明】Frq = 72Mhz / ( psc + 1 ) / ( arr + 1 )
*********************************************/
void TIM8_PWM_Init(u16 arr,u16 psc)
{
    RCC->APB2ENR|=1<<13;         //TIM8时钟使能
    RCC->APB2ENR|=1<<4;        //使能PORTC时钟    
           
    GPIOC->CRL&=0X00FFFFFF;    //PC6 7 输出
    GPIOC->CRL|=0XBB000000;    //复用功能输出       
 
    TIM8->ARR=arr;                //设定计数器自动重装值 
    TIM8->PSC=psc;                //预分频器分频设置
    
    TIM8->CCMR1|=6<<4;      //CH1 PWM1模式
                                                //6: PWM1模式, 正脉冲
                                                //7: PWM2模式, 负脉冲
    TIM8->CCMR1|=1<<3;         //CH1 预装载使能       
    TIM8->CCER|=1<<0;       //OC1 输出使能       
    
    TIM8->CCMR1|=6<<12;      //CH2 PWM1模式
    TIM8->CCMR1|=1<<11;     //CH2 预装载使能       
    TIM8->CCER|=1<<4;       //OC2 输出使能

    TIM8->CR1=0x0080;       //ARPE使能
    TIM8->BDTR|=0x8000;        //主输出使能
    TIM8->CR1|=0x01;        //使能定时器8
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32可以通过定时器产生PWM输出。除了基本定时器TIM6和TIM7之外,其他的定时器都可以产生PWM输出。高级定时器TIM1和TIM8可以同时产生7路PWM输出,而通用定时器可以同时产生4路PWM输出,因此STM32最多可以同时输出30路PWM输出。\[1\] 在STM32中,可以使用输出比较结构体来配置PWM输出的参数。比较输出结构体包括比较输出模式、比较输出使能、比较互补输出使能、脉冲宽度、输出极性、互补输出极性、空闲状态下比较输出状态和空闲状态下比较互补输出状态等参数。通过配置这些参数,可以实现不同的PWM输出效果。\[2\] 在main函数中,可以使用TIM_SetCompare函数来设置PWM输出的占空比。通过改变TIM_SetCompare函数的第二个参数,即pwmval的值,可以调整PWM输出的占空比。在循环中可以通过改变pwmval的值来实现PWM输出的变化。\[3\] #### 引用[.reference_title] - *1* *3* [stm32pwm输出](https://blog.csdn.net/weixin_46098612/article/details/115597823)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [stm32输出PWM](https://blog.csdn.net/m0_47329175/article/details/121066593)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值