在设定PWM时候,TIMx_CNT寄存器的值是否要自己重新写。在原子的例程没有找到对
TIMx_CNT 寄存器赋值,但是寄存器初始值为0.
void PWM_Init(u16 arr,u16 psc)
{
//此部分需手动修改 IO口设置
RCC->APB1ENR|=1<<1; //TIM3 时钟使能
GPIOA->CRH&=0XFFFFFFF0;//PA8输出
GPIOA->CRH|=0X00000004;//浮空输入
GPIOA->CRL&=0X0FFFFFFF;//PA7输出
GPIOA->CRL|=0XB0000000;//复用功能输出
GPIOA->ODR|=1<<7;//PA7上拉
TIM3->ARR=arr;//设定计数器自动重装值
TIM3->  SC=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
}
int main(void)
{
u16 led0pwmval=0;
u8 dir=1;
Stm32_Clock_Init(9); // 系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口初始化
LED_Init(); //初始化与 LED 连接的硬件接口
   WM_Init(900,0); // 不分频。PWM 频率=72000/900=8Khz
while(1)
{
delay_ms(10);
if(dir)led0pwmval++;
else led0pwmval--;
if(led0pwmval>300)dir=0;
if(led0pwmval==0)dir=1;
LED0_PWM_VAL=led0pwmval;
}
}
|