一、最近做了一个关于自动转速测试仪的项目,其中用到了STM32的RTC时钟的功能,然后开始写代码,并且成功的跑了起来,于是将自己的板子放到桌面上让它跑了一个晚上看下误差,结果发现经过一晚上,误差并不是很大,这点说明STM32的时钟系统还是做的非常强大的,但是在我好奇的将板子上的备用电池拆下来想看看还有多少电,在将电池装回去后。发现一样的程序,什么都没改,RTC时钟却变慢了一倍,后面干脆就不走了,而且用的显示屏不显示了,于是在网上搜了下,期许别人会有类似情况出现,果然,强大的百度瞬间给我找出了一大堆回复,最后经过查找,发现所有的词条都指向了STM32的RTC外部低速晶振(32.768k),具体是说晶振因为旁路电容的问题导致不起振,最佳匹配电容是6PF,其他旁路电容不能保证稳定性,开始验证,先是屏幕不显示,猜测是因为RTC初始化没完成,我将RTC初始化给注释掉,屏幕成功显示,但时间的参数都先是不出来,当然是意料之中的,下一步,既然是晶振问题,我将外部低速晶振换成用外部高速晶振128分频,再将时钟RTC_SetPrescaler(62499); //设置RTC预分频的值设置为62499,更改后下载到板子上,结果正确显示时间,且时间增长时间同步,至此,基本能够确定是外部32.768晶振没有起振的问题。
虽然我用外部高速晶振提供频率操作成功,但是这种方法有个坏处是掉电后时钟系统不能再运行,这就造成每次断电后都要重新设置时间,所以最后还是决定用外接一个时钟芯片DS1302。
二、关于PWM输出脚输出停止后的控制管脚输出电平高低问题,因为PWM输出停止时间是不定的,所以如果没有配置,在关闭PWM输出后,会出现管脚电平有时停留在高电平,有时停留在低电平,这就造成如果是通过npn三极管控制电机转速的情况下,PWM停止输出后就必须停留在低电平状态,解决这一问题的方法现有如下三个:
1、在关闭PWM输出后,设置管脚强制输出为低电平。
2、如果没有强制输出功能,则可以在PWM输出结束后,将管脚配置为输入状态。
3、PWM的产生是因为中断,可以在中断里面检测到PWM为低时,再将PWM关闭。