系統(tǒng)時(shí)鐘是GD32 MCU的時(shí)基,可以理解為系統(tǒng)的心跳,片上所有的外設(shè)以及CPU最原始的時(shí)鐘都來自于系統(tǒng)時(shí)鐘,因而明確當(dāng)前系統(tǒng)時(shí)鐘是多少非常重要,只有明確了系統(tǒng)時(shí)鐘,才能夠?qū)崿F(xiàn)準(zhǔn)確的定時(shí)、準(zhǔn)確的采樣間隔以及準(zhǔn)確的通信速率等。
以GD32F303為例,其系統(tǒng)時(shí)鐘配置在system_gd32f30x.c中,如下圖所示,可以通過打開或者關(guān)閉相關(guān)的宏定義進(jìn)行時(shí)鐘配置,GD32以及提供了一些時(shí)鐘配置的函數(shù),可以通過宏定義開關(guān)進(jìn)行選擇。

確認(rèn)當(dāng)前系統(tǒng)時(shí)鐘有以下兩個(gè)方法:
1、軟件方式確認(rèn)
使用void SystemCoreClockUpdate(void)函數(shù)進(jìn)行更新當(dāng)前系統(tǒng)時(shí)鐘SystemCoreClock,該函數(shù)為根據(jù)當(dāng)前RCU模塊寄存器配置以及外部晶振等相關(guān)宏定義進(jìn)行計(jì)算,將計(jì)算的結(jié)果賦值給SystemCoreClock變量,因而調(diào)用該函數(shù)后,SystemCoreClock的值就是當(dāng)前系統(tǒng)時(shí)鐘的數(shù)值。

需要注意,如果外部晶振不是8M,則需要調(diào)整HXTAL的宏定義,否則可能會(huì)造成SystemCoreClock計(jì)算出錯(cuò)。

2、時(shí)鐘輸出確認(rèn)
另外一種最直接最準(zhǔn)確的方式,是將系統(tǒng)時(shí)鐘通過CKOUT引腳輸出,然后通過示波器進(jìn)行查看,如下圖所示,CK_SYS為系統(tǒng)時(shí)鐘,將CKOUT0SEL配置為100,就可以將系統(tǒng)時(shí)鐘輸出到CK_OUT0引腳上,這樣外部接示波器就可以查看當(dāng)前系統(tǒng)時(shí)鐘了。

另外也可以通過定時(shí)器或者通信頻率來進(jìn)行估算,希望大家在系統(tǒng)開發(fā)伊始有確認(rèn)系統(tǒng)時(shí)鐘的好習(xí)慣,避免由于系統(tǒng)時(shí)鐘配置出錯(cuò)導(dǎo)致的隱藏問題。
好的,今天就討論到這里,如有其他疑問,歡迎評(píng)論區(qū)討論。