本章為CW32F030C8T6時鐘的參考資料,面向初學者。
第一部分 默認時鐘和啟動文件
單片機內部基本由內核、總線、外設組成,這三部分作為數(shù)字電路,都需要開發(fā)者提供時鐘信號才能正常工作。所謂時鐘信號,就是周期脈沖信號,由電路分析可知RC振蕩電路可以產(chǎn)生穩(wěn)定的脈沖,故單片機的時鐘信號可以由RC振蕩器提供。但是RC振蕩器提供的時鐘信號質量不高,而晶體振蕩器依靠壓電效應提供穩(wěn)定的、高質量的時鐘信號。以CW32F030C8T6單片機為例,他擁有2個內部振蕩器,并且可以使用外部振蕩器輸入的脈沖信號作為時鐘。先說內部振蕩器,有HSI(高速-high speed、內部-internal)和LSI兩個震蕩器,這兩個振蕩器均為RC振蕩器,可以通過配置相關的寄存器來調整輸出頻率,一般單片機啟動的時候都會使用內部振蕩器提供的時鐘,這種RC振蕩器啟動速度很快,價格低廉,非常時候作為啟動時鐘。內部低速振蕩器一般不作為內核運行的時鐘,而是作為部分外設的時鐘,如rtc定時器(實時時鐘)和看門狗。對于此款單片機,可以通過下述辦法來判斷單片機上電之后的行為,提示:一般單片機上電之后都會配置主要的時鐘參數(shù),但配置之后工作狀態(tài)不同,后文會有對比。
1.找到單片機的啟動文件,啟動文件以“.s”后綴出現(xiàn),意為start_up。
2.啟動文件由匯編語言編寫,單片機啟動一定會從啟動文件開始,而不是C語言下的main函數(shù)。
3.下圖為啟動文件截圖。
4.在上方文件中找到那個叫SystemInit的東西,這是個函數(shù)名字,一般來講都可以在廠商提供的庫函數(shù)中找到,cw32的在下面這個圖的文件里
1.在執(zhí)行完SystemInit函數(shù)的這三行代碼之后,單片機會正常跳轉到main函數(shù)開始執(zhí)行,就像啟動文件里面寫的那樣。
至此,啟動文件主要部分及系統(tǒng)默認的上電時鐘已講解完。
如果你看不懂C語言,那就去補習C語言。
如果你看不懂為什么這是在操作寄存器,下一部分會教你如何看寄存器。
第二部分 庫函數(shù)和寄存器
我們都知道計算機編程最早使用的是機器語言,也就是用打點紙帶來編程,后續(xù)出現(xiàn)了匯編語言,使用助記符來輔助編程,再到后來的C語言,高級語言誕生,軟件開發(fā)變得更加簡單。但是到計算機這一層,他依然是使用的數(shù)字電路來工作的,至少,開發(fā)者需要操作的東西就算不是數(shù)字電路,也是個寄存器。計算機發(fā)展中,寄存器被人們用“地址”這個東西來標號,翻開編程手冊(單片機至少有三個手冊是開發(fā)者需要看的,分別是:data_sheet user_program_guide core_program_guide),你會發(fā)現(xiàn)每個寄存器都會有一個地址,到目前為止,32位單片機擁有非常多的寄存器,這些寄存器地址已經(jīng)不會再用最直接的地址累加形式顯示出來(如0x00,0x01,0x02........)。稍微高級一些的單片機都會使用基地址+地址偏移量的形式指示寄存器的地址,如下圖所示:
如果開發(fā)者想要使用位于SYSCTRL這個寄存器組下的分寄存器,如總線時鐘或是PLL時鐘,就需要用基地址+地址偏移量的方式找到這個寄存器,并賦值寄存器來配置。所謂地址偏移量,就是這個寄存器有多少字節(jié)的容量,32位單片機就是4字節(jié),所以地址偏移量基本上就是4字節(jié)步進來累加的,某些情況會有多個寄存器一起負責一個功能的情況,這個時候偏移量要酌情理解。那地址代表了寄存器,地址和庫函數(shù)有什么聯(lián)系?C語言最精髓的東西是什么?那必然是指針,指針就用的是這種“以地址指示參數(shù)位置”的辦法,所以你可以在庫函數(shù)看到如下一系列的
宏定義:
基地址。
地址強制轉換為結構體指針。
上面那個東西又會被定義成開發(fā)者可以直接操作的寄存器。
有朋友肯定會問,這里只有一個基地址,為什么可以用CW_SYSCTRL->REG的形式操作很多寄存器呢?由于每個寄存器都是32位的,也就是4字節(jié),由C語言聯(lián)合體和結構體的特性,內部的地址是基地址累加的,只需要一個寄存器累加固定的偏移量,就能把結構體成員和單片機內的寄存器一一對應起來,這就是寄存器與庫函數(shù)的聯(lián)系。一旦想通寄存器和庫函數(shù)是怎么聯(lián)系起來的,單片機編程就會變成一個非常簡單的事情,因為庫函數(shù)本質上就是在用地址操作去賦值、改寫寄存器,全世界的單片機庫函數(shù)都是如此。在任何時候,開發(fā)者都可以通過直接賦值寄存器的辦法去完成自己期望的配置?,F(xiàn)在我們回頭看cw32系統(tǒng)初始化函數(shù)的最后兩行,最開始的就是基地址指針,這個是一個結構體指針,結構體由很多聯(lián)合體構成,指針選擇結構體成員,結構體成員是聯(lián)合體,所以用‘.’的方式選擇了TRIM成員進行賦值,賦的值就是等號右邊的部分。細說等號右邊的含義。RCC是一個十六進制數(shù),他被強制轉化為了16位指針類型,并在賦值之前解引用被變成了本身的值,即前文提到的十六進制數(shù),根據(jù)編程手冊,這個十六進制數(shù)表示了RC振蕩器對應48MHz輸出的校準值。
至此,關于第二部分的寄存器-庫函數(shù)聯(lián)系已講解完成,如有錯誤或遺漏,歡迎指正和補充。
總結:
1.單片機啟動并不是從main函數(shù)開始執(zhí)行的,而是從啟動文件規(guī)定的函數(shù)開始執(zhí)行的
2.大部分單片機都會上電自動配置時鐘保證單片機能夠正常工作
3.寄存器和庫函數(shù)通過地址這個東西聯(lián)系在一起,庫函數(shù)本質就是在操作寄存器
審核編輯 黃宇
-
單片機
+關注
關注
6067文章
44992瀏覽量
650616 -
寄存器
+關注
關注
31文章
5434瀏覽量
124551 -
時鐘
+關注
關注
11文章
1901瀏覽量
133242 -
庫函數(shù)
+關注
關注
0文章
177瀏覽量
34429 -
CW32
+關注
關注
1文章
255瀏覽量
1254
發(fā)布評論請先 登錄
如何使用新版本J-Flash編程CW32 MCU?

單片機和伺服有什么區(qū)別
51單片機筆記(建議收藏?。?/a>
PLC和單片機到底有什么區(qū)別?

代碼+案例+生態(tài):武漢芯源半導體CW32嵌入式開發(fā)實戰(zhàn)正式出版

代碼+案例+生態(tài):武漢芯源半導體CW32嵌入式開發(fā)實戰(zhàn)正式出版
單片機編程語言有哪些選擇
武漢芯源半導體CW32芯片重慶地區(qū)線下技術交流會成功舉辦
單片機的中斷機制
單片機圖形化編程軟件有哪些
單片機boot0和boot1怎么設置
第19.1 章-星瞳科技 OpenMV視覺循跡功能 超詳細OpenMV與STM32單片機通信

評論