STM32-如何使用引脚复用功能输出PWM

#define LED0_PWM_VAL TIM3->CCR2 //比较寄存器(TIM3通道2),可以调节PWM占空比,

int main(void)

{
  u16 led0pwmval=0;
u8 dir=1;
  Stm32_Clock_Init(9); //系统时钟设置
delay_init(72);     //延时初始化
PWM_Init(900,0); //设置PWM频率,不分频
    while(1)

  delay_ms(10);  
if(dir)led0pwmval++;
else led0pwmval--;


  if(led0pwmval>300)dir=0;
if(led0pwmval==0)dir=1;
 
LED0_PWM_VAL=led0pwmval; //呼吸灯(改变比较寄存器的值)  
}  

}


void PWM_Init(u16 arr,u16 psc)
{

        
RCC->APB2ENR|=1<<2;    //开启GPIOA使能    
RCC->APB2ENR|=1<<5;    //开启GPIOD使能
RCC->APB2ENR|=1<<4;    //开启GPIOC使能

RCC->APB1ENR|=1<<1;       //TIM3使能


GPIOA->CRH&=0XFFFFFFF0;//PA8输入(LED灯引脚,记得与PA7或PC7用杜邦线连接,PA7默认,PC7复用功能)
GPIOA->CRH|=0X00000004;//浮空输入
 
GPIOA->CRL&=0X0FFFFFFF;//PA7输出
GPIOA->CRL|=0XB0000000;//复用功能输出 
GPIOA->ODR|=1<<7;//PA7上拉
  /*   //如果需要使用复用功能,及用PC7控制呼吸灯,取消注释,不然默认PA7输出PWM

        RCC->APB2ENR|=1<<0;    //AFIO时钟使能,一定要开,找了半天才找到这个问题,开启才可以使用复用功能
AFIO->MAPR|=3<<10;       //PC7为全复用,不写的话不能使用使用复用功能 
        GPIOC->CRL&=0X0FFFFFFF;//PC7输出
GPIOC->CRL|=0XB0000000;//复用功能输出  
GPIOC->ODR|=1<<7;//PC7上拉
*/

TIM3->ARR=arr;//设置定时器自动重装值
TIM3->PSC=psc;//预分频不分频

TIM3->CCMR1|=7<<12;  //CH2 PWM2模式 
TIM3->CCMR1|=1<<11; //CH2预装载使能


TIM3->CCER|=1<<4;   //OC2输出使能


TIM3->CR1=0x0080;   //ARPE使能,好像没有多大用,写不写都可以运行
TIM3->CR1|=0x01;    //定时器3使能  
}    

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值