本章為CW32F030C8T6時(shí)鐘的參考資料,面向初學(xué)者。
第一部分 默認(rèn)時(shí)鐘和啟動(dòng)文件
單片機(jī)內(nèi)部基本由內(nèi)核、總線、外設(shè)組成,這三部分作為數(shù)字電路,都需要開發(fā)者提供時(shí)鐘信號(hào)才能正常工作。所謂時(shí)鐘信號(hào),就是周期脈沖信號(hào),由電路分析可知RC振蕩電路可以產(chǎn)生穩(wěn)定的脈沖,故單片機(jī)的時(shí)鐘信號(hào)可以由RC振蕩器提供。但是RC振蕩器提供的時(shí)鐘信號(hào)質(zhì)量不高,而晶體振蕩器依靠壓電效應(yīng)提供穩(wěn)定的、高質(zhì)量的時(shí)鐘信號(hào)。以CW32F030C8T6單片機(jī)為例,他擁有2個(gè)內(nèi)部振蕩器,并且可以使用外部振蕩器輸入的脈沖信號(hào)作為時(shí)鐘。先說內(nèi)部振蕩器,有HSI(高速-high speed、內(nèi)部-internal)和LSI兩個(gè)震蕩器,這兩個(gè)振蕩器均為RC振蕩器,可以通過配置相關(guān)的寄存器來調(diào)整輸出頻率,一般單片機(jī)啟動(dòng)的時(shí)候都會(huì)使用內(nèi)部振蕩器提供的時(shí)鐘,這種RC振蕩器啟動(dòng)速度很快,價(jià)格低廉,非常時(shí)候作為啟動(dòng)時(shí)鐘。內(nèi)部低速振蕩器一般不作為內(nèi)核運(yùn)行的時(shí)鐘,而是作為部分外設(shè)的時(shí)鐘,如rtc定時(shí)器(實(shí)時(shí)時(shí)鐘)和看門狗。對(duì)于此款單片機(jī),可以通過下述辦法來判斷單片機(jī)上電之后的行為,提示:一般單片機(jī)上電之后都會(huì)配置主要的時(shí)鐘參數(shù),但配置之后工作狀態(tài)不同,后文會(huì)有對(duì)比。
1.找到單片機(jī)的啟動(dòng)文件,啟動(dòng)文件以“.s”后綴出現(xiàn),意為start_up。
2.啟動(dòng)文件由匯編語言編寫,單片機(jī)啟動(dòng)一定會(huì)從啟動(dòng)文件開始,而不是C語言下的main函數(shù)。
3.下圖為啟動(dòng)文件截圖。

4.在上方文件中找到那個(gè)叫SystemInit的東西,這是個(gè)函數(shù)名字,一般來講都可以在廠商提供的庫函數(shù)中找到,cw32的在下面這個(gè)圖的文件里

1.在執(zhí)行完SystemInit函數(shù)的這三行代碼之后,單片機(jī)會(huì)正常跳轉(zhuǎn)到main函數(shù)開始執(zhí)行,就像啟動(dòng)文件里面寫的那樣。
至此,啟動(dòng)文件主要部分及系統(tǒng)默認(rèn)的上電時(shí)鐘已講解完。
如果你看不懂C語言,那就去補(bǔ)習(xí)C語言。
如果你看不懂為什么這是在操作寄存器,下一部分會(huì)教你如何看寄存器。
第二部分 庫函數(shù)和寄存器
我們都知道計(jì)算機(jī)編程最早使用的是機(jī)器語言,也就是用打點(diǎn)紙帶來編程,后續(xù)出現(xiàn)了匯編語言,使用助記符來輔助編程,再到后來的C語言,高級(jí)語言誕生,軟件開發(fā)變得更加簡單。但是到計(jì)算機(jī)這一層,他依然是使用的數(shù)字電路來工作的,至少,開發(fā)者需要操作的東西就算不是數(shù)字電路,也是個(gè)寄存器。計(jì)算機(jī)發(fā)展中,寄存器被人們用“地址”這個(gè)東西來標(biāo)號(hào),翻開編程手冊(cè)(單片機(jī)至少有三個(gè)手冊(cè)是開發(fā)者需要看的,分別是:data_sheet user_program_guide core_program_guide),你會(huì)發(fā)現(xiàn)每個(gè)寄存器都會(huì)有一個(gè)地址,到目前為止,32位單片機(jī)擁有非常多的寄存器,這些寄存器地址已經(jīng)不會(huì)再用最直接的地址累加形式顯示出來(如0x00,0x01,0x02........)。稍微高級(jí)一些的單片機(jī)都會(huì)使用基地址+地址偏移量的形式指示寄存器的地址,如下圖所示:


如果開發(fā)者想要使用位于SYSCTRL這個(gè)寄存器組下的分寄存器,如總線時(shí)鐘或是PLL時(shí)鐘,就需要用基地址+地址偏移量的方式找到這個(gè)寄存器,并賦值寄存器來配置。所謂地址偏移量,就是這個(gè)寄存器有多少字節(jié)的容量,32位單片機(jī)就是4字節(jié),所以地址偏移量基本上就是4字節(jié)步進(jìn)來累加的,某些情況會(huì)有多個(gè)寄存器一起負(fù)責(zé)一個(gè)功能的情況,這個(gè)時(shí)候偏移量要酌情理解。那地址代表了寄存器,地址和庫函數(shù)有什么聯(lián)系?C語言最精髓的東西是什么?那必然是指針,指針就用的是這種“以地址指示參數(shù)位置”的辦法,所以你可以在庫函數(shù)看到如下一系列的
宏定義:

基地址。

地址強(qiáng)制轉(zhuǎn)換為結(jié)構(gòu)體指針。

上面那個(gè)東西又會(huì)被定義成開發(fā)者可以直接操作的寄存器。
有朋友肯定會(huì)問,這里只有一個(gè)基地址,為什么可以用CW_SYSCTRL->REG的形式操作很多寄存器呢?由于每個(gè)寄存器都是32位的,也就是4字節(jié),由C語言聯(lián)合體和結(jié)構(gòu)體的特性,內(nèi)部的地址是基地址累加的,只需要一個(gè)寄存器累加固定的偏移量,就能把結(jié)構(gòu)體成員和單片機(jī)內(nèi)的寄存器一一對(duì)應(yīng)起來,這就是寄存器與庫函數(shù)的聯(lián)系。一旦想通寄存器和庫函數(shù)是怎么聯(lián)系起來的,單片機(jī)編程就會(huì)變成一個(gè)非常簡單的事情,因?yàn)閹旌瘮?shù)本質(zhì)上就是在用地址操作去賦值、改寫寄存器,全世界的單片機(jī)庫函數(shù)都是如此。在任何時(shí)候,開發(fā)者都可以通過直接賦值寄存器的辦法去完成自己期望的配置?,F(xiàn)在我們回頭看cw32系統(tǒng)初始化函數(shù)的最后兩行,最開始的就是基地址指針,這個(gè)是一個(gè)結(jié)構(gòu)體指針,結(jié)構(gòu)體由很多聯(lián)合體構(gòu)成,指針選擇結(jié)構(gòu)體成員,結(jié)構(gòu)體成員是聯(lián)合體,所以用‘.’的方式選擇了TRIM成員進(jìn)行賦值,賦的值就是等號(hào)右邊的部分。細(xì)說等號(hào)右邊的含義。RCC是一個(gè)十六進(jìn)制數(shù),他被強(qiáng)制轉(zhuǎn)化為了16位指針類型,并在賦值之前解引用被變成了本身的值,即前文提到的十六進(jìn)制數(shù),根據(jù)編程手冊(cè),這個(gè)十六進(jìn)制數(shù)表示了RC振蕩器對(duì)應(yīng)48MHz輸出的校準(zhǔn)值。


至此,關(guān)于第二部分的寄存器-庫函數(shù)聯(lián)系已講解完成,如有錯(cuò)誤或遺漏,歡迎指正和補(bǔ)充。
總結(jié):
1.單片機(jī)啟動(dòng)并不是從main函數(shù)開始執(zhí)行的,而是從啟動(dòng)文件規(guī)定的函數(shù)開始執(zhí)行的
2.大部分單片機(jī)都會(huì)上電自動(dòng)配置時(shí)鐘保證單片機(jī)能夠正常工作
3.寄存器和庫函數(shù)通過地址這個(gè)東西聯(lián)系在一起,庫函數(shù)本質(zhì)就是在操作寄存器
審核編輯 黃宇
-
單片機(jī)
+關(guān)注
關(guān)注
6074文章
45316瀏覽量
662750 -
寄存器
+關(guān)注
關(guān)注
31文章
5583瀏覽量
128965 -
時(shí)鐘
+關(guān)注
關(guān)注
11文章
1950瀏覽量
134508 -
庫函數(shù)
+關(guān)注
關(guān)注
0文章
177瀏覽量
34934 -
CW32
+關(guān)注
關(guān)注
1文章
281瀏覽量
1665
發(fā)布評(píng)論請(qǐng)先 登錄
在使用Saiyuan的CW32單片機(jī)時(shí),頻率調(diào)整導(dǎo)致系統(tǒng)跑飛,影響正常運(yùn)行,怎么解決?
deepseek來分析CW32單片機(jī)的特點(diǎn)
使用J-Flash來編程CW32 MCU
使用芯源CW32的CW32L012開發(fā)評(píng)估板做了spi屏幕驅(qū)動(dòng)
CW32在MOSFET切換時(shí)頻繁重啟,怎么解決?
單片機(jī)啟動(dòng)&庫函數(shù)的構(gòu)成
CW32 MCU用什么IDE開發(fā)?
CW32 MCU有哪些系列?
CW32 MCU用什么仿真器開發(fā)?
第1章 如何學(xué)習(xí)單片機(jī)
代碼格式化工具Clang-Format提升你的CW32工程質(zhì)量
【教程】手把手教你用CLion進(jìn)行CW32開發(fā)
51單片機(jī)筆記(建議收藏?。?/a>
代碼+案例+生態(tài):武漢芯源半導(dǎo)體CW32嵌入式開發(fā)實(shí)戰(zhàn)正式出版

【有那么點(diǎn)詳細(xì)的CW32學(xué)習(xí)筆記】單片機(jī)啟動(dòng)\庫函數(shù)構(gòu)成
評(píng)論