根据
如果我想设置输出频率为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
}
---------------------------------
我小学的时候每学期都是三好学生,努力学习考上了我们那里的好初中,又努力的学习考上了我们市最好的高中,但是高中没有好好学习,没有考上好的大学,但还是考上了一个大学,努力的完成了学习,为什么要说这些呢,因为要告诉你,我其实是读了很多书的,所以我很负责任的告诉你:17999超过65536是不可能滴!!!说了,我读书很多的。
一周热门 更多>