ISSUE:STM32学习板RTC晶振不起振、起振慢,以及串口通信混乱的问题排查

根据教程配置STM32F103的RTC实时时钟
运行后,一直停留在

while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET);

等待晶振起振时间长达30秒到1分钟左右,并且走时不准
后来发现我买的学习板结构是这样的:
STM32F103VCT6学习板
他的PC14,PC15两个IO暴露在外面左侧双排针上,而我又是用双排母排线去接这个双排针的。
经过查询手册,PC14,PC15原来是外部RTC时钟使用的32.768KHz晶振,一旦我接上排线,相当于把这两个晶振引脚加了个非常长的天线,晶振当然很难起振。
解决办法:

  1. 弃用排线,用一根一根的杜邦线连接外部面包板(会很难看)
  2. 使用右侧双排针脚(会影响到PA9,PA10两个USART针脚,导致串口数据混乱)
  3. 剪断PC14,PC15两个针脚(这种方法一劳永逸,但会影响日后学习板的使用,今后不想使用RTC而想利用PC14,PC15作为GPIO时就尴尬了)

总之没有完美的解决办法,自己评估一下利弊做选择吧,最终产品设计PCB板时不会出现这种问题。

同样的问题:USART1串口通信混乱
就是因为我是用了上述第二种方法,将排线接到了右侧针脚上,而右侧恰恰有PA9,PA10两个USART1的针脚,万用表一量,这两个针脚与学习板上的RXD、TXD是连通的,用双排线接上去,相当于给串口引脚加了两个天线,当然传输会出错。

解决办法:评估了RTC和USART两大功能的实用程度,果断剪断了PA9,PA10两个引脚,保留了PC14,PC15.这样RTC和串口都能用了,日后RTC也能换成GPIO,而UART功能应该是必要的,没有特殊情况是不会将UART换成GPIO的。