输出pwm的频率周期很不准确
可能是因为没有外部晶振的稳定晶振周期有关。
使用的示波器出现操作失误
在使用小型示波器的过程中发现集成了信号发生器和示波器的连接端口是不同的。刚开始把示波器测试口错插入了信号发生器的接口,困扰好一会儿,幸好用一个led的亮度变化(不同占空比的pwm)检测到确实输出了pwm
程序
主要设置的寄存器包含两大部分:1,GPIO的工作模式和复用引脚的确定。2,pwm寄存器赋值(特别注意清零位的变化)
下面是分频器寄存器作用
端口输出模式
设置占空比
void pwm_init()
{
PIN_FUNC |= bPWM1_PIN_X; //引脚复用功能
P3_MOD_OC &= 0xFE;P3_DIR_PU |= 0x01; //定义3。0推挽输出
PWM_CK_SE = 0x01; //分频除数24,机械周期24mhz
PWM_CTRL |= bPWM1_OUT_EN; //使能pwm1输出
PWM_CTRL &= ~bPWM_CLR_ALL; //不置零会清除PWM计数值,否则导致不能工作
}
void main(void){
CfgFsys( ); //修改实际时钟24MHZ
mDelaymS(10); //延时让设置的晶振稳定
pwm_init();
PWM_DATA1 = 0x7f; //50%占空比
while(1);
}
结果分析
通过改变分频数发现:发出的pwm频率不精准,误差很大,但占空比比较准确。一般不是使用精准频率的控制还是可以用的。