PWM输出实验调节输出频率

2019-07-21 03:31发布

 根据       如果我想设置输出频率为4KHz,那么输出代码就应该是这样的: TIM1_PWM_Init(17999,0);//不分频。PWM频率=72000/(17999+1)=4Khz  LED0_PWM_VAL=450; 但是输出不成功! 是不是因为超过了65535,要分频,如果分频的话怎么设置? 下面是对应的代码,为什么不分频也要设置?怎样更改psc的值? void TIM3_IRQHandler(void)
{                 
 if(TIM3->SR&0X0001)//溢出中断
 {
  LED1=!LED1;                             
 }      
 TIM3->SR&=~(1<<0);//清除中断标志位     
}
//通用定时器中断初始化
//这里时钟选择为APB1的2倍,而APB1为36M
//arr:自动重装值。
//psc:时钟预分频数
//这里使用的是定时器3!
void TIM3_Int_Init(u16 arr,u16 psc)
{
 RCC->APB1ENR|=1<<1; //TIM3时钟使能   
  TIM3->ARR=arr;   //设定计数器自动重装值
 TIM3->SC=psc;   //预分频器设置
 TIM3->DIER|=1<<0;   //允许更新中断    
 TIM3->CR1|=0x01;    //使能定时器3
   MY_NVIC_Init(1,3,TIM3_IRQn,2);//抢占1,子优先级3,组2         
}
//TIM1_CH1 PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void TIM1_PWM_Init(u16 arr,u16 psc)
{        
 //此部分需手动修改IO口设置
 RCC->APB2ENR|=1<<11;  //TIM1时钟使能   
 GPIOA->CRH&=0XFFFFFFF0; //PA8清除之前的设置
 GPIOA->CRH|=0X0000000B; //复用功能输出
 
 TIM1->ARR=arr;   //设定计数器自动重装值
 TIM1->SC=psc;   //预分频器设置
 
 TIM1->CCMR1|=7<<4;   //CH1 PWM2模式  
 TIM1->CCMR1|=1<<3;   //CH1预装载使能 
  TIM1->CCER|=1<<0;    //OC1 输出使能   
 TIM1->BDTR|=1<<15;    //MOE 主输出使能     TIM1->CR1=0x0080;    //ARPE使能
 TIM1->CR1|=0x01;     //使能定时器1            


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
佚居士
1楼-- · 2019-07-21 20:23
回复【7楼】zuozhongkai:
---------------------------------
不好意思 !
佚居士
2楼-- · 2019-07-21 21:28
回复【6楼】lycreturn:
---------------------------------
自己忘记看仪看 了  !
佚居士
3楼-- · 2019-07-21 22:32
回复【6楼】lycreturn:
---------------------------------
不好意思,没看

一周热门 更多>