一最近做了一个关于自动转速测试仪的项目, 其中用到了 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 输出结束后, 将管脚配置为输入状态
3PWM 的产生是因为中断, 可以在中断里面检测到 PWM 为低时, 再将 PWM 关闭
来源: http://www.bubuko.com/infodetail-2517025.html