本帖最后由 limitebee_1 于 2016-11-11 21:35 编辑
程序如下:
unsigned char pwm=0; //控制占空比
void delay_ms(unsigned int ms); //延时毫米数
void time_pwm_output(unsigned char x); //pwm输出函数
// 函数功能:主函数
// 初始化 GPIO 端口 PD0,驱动 PD0为高电平和低电平
main()
{
/*系统时钟配置为HSE,频率为1MHZ*/
CLK->ECKCR |=0x10;
CLK->ECKCR |=0X1; //开启外部时钟
while(!(CLK->ECKCR&0X2)); //等待外部时钟 rdy
CLK->CKDIVR &= 0X7; //CPU 预分频系数为2^8=16,系统时钟1MHZ
CLK->SWR = 0X04; //选择外部时钟
CLK->SWCR |=0X2; //使能外部时钟
while(1)
{
pwm++;
if(pwm>100)
{
pwm=0;
}
delay_ms(5);
time_pwm_output(pwm);
}
}
/* 初始化定时器4*/
void delay_ms(unsigned int ms)
{
unsigned char i;
while(ms != 0)
{
for(i=0;i<250;i++)
{
}
for(i=0;i<75;i++)
{
}
ms--;
}
}
void time_pwm_output(unsigned char x)
{
CLK->PCKENR1 |=0X02;//开启TIM3的外设时钟
TIM3->CR1=0X80;
TIM3->PSCR=0x00; //计数器预分频值为1,计数周期1us
TIM3->ARRH=0; //预装载值100,pwm周期为100us
TIM3->ARRL=100;
TIM3->CCMR2=0X70; //PWM模式1,使能CCR预装载
TIM3->CCR2H=0;
TIM3->CCR2L=x; //占空比
TIM3->CCER1=0x10; //开启TIM3的通道2输出,高电平有效
TIM3->BKR=0x80; //主输出使能
TIM3->EGR=0X01; //产生更新事件,初始化寄存器
TIM3->CR1|=0X01; //启动计数器
}
程序测试没有错误,用的是TIM3的通道2,选择这个的原因看了数据手册,发光二极管连接的就是此接口,但运行程序灯不亮。是定时器选错了还是引脚复用需要设置?截图是引脚定义,灯是连在PD0口上的。
|