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 05:21
如果占空比为50%,也超过65535,用不用分频,该怎么作? 新手求回复!
lycreturn
2楼-- · 2019-07-21 05:52
占空比太小了,pwm输出高点电平了,led是低电平点亮,试着把LED0_PWM_VAL改到10000试试
佚居士
3楼-- · 2019-07-21 07:11
用示波器看,没有输出,老师说可能是17999超过65536!
正点原子
4楼-- · 2019-07-21 11:23
回复【4楼】佚居士:
---------------------------------
17999怎么会超过65536...
lycreturn
5楼-- · 2019-07-21 13:26
 精彩回答 2  元偷偷看……
taizonglai
6楼-- · 2019-07-21 15:40
回复【4楼】佚居士:
---------------------------------
我小学的时候每学期都是三好学生,努力学习考上了我们那里的好初中,又努力的学习考上了我们市最好的高中,但是高中没有好好学习,没有考上好的大学,但还是考上了一个大学,努力的完成了学习,为什么要说这些呢,因为要告诉你,我其实是读了很多书的,所以我很负责任的告诉你:17999超过65536是不可能滴!!!说了,我读书很多的。

一周热门 更多>