0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

jf_08851166 ? 來源:jf_08851166 ? 作者:jf_08851166 ? 2023-08-10 11:13 ? 次閱讀

本章為CW32F030C8T6時(shí)鐘參考資料,面向初學(xué)者。

第一部分 默認(rèn)時(shí)鐘和啟動文件

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

1.找到單片機(jī)的啟動文件,啟動文件以“.s”后綴出現(xiàn),意為start_up。

2.啟動文件由匯編語言編寫,單片機(jī)啟動一定會從啟動文件開始,而不是C語言下的main函數(shù)。

3.下圖為啟動文件截圖。

wKgaomTUVG2ANVRbAA577myiy30508.png

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

wKgaomTUVHmAHDVCAAR5wOr0_So903.png

1.在執(zhí)行完SystemInit函數(shù)的這三行代碼之后,單片機(jī)會正常跳轉(zhuǎn)到main函數(shù)開始執(zhí)行,就像啟動文件里面寫的那樣。

至此,啟動文件主要部分及系統(tǒng)默認(rèn)的上電時(shí)鐘已講解完。

如果你看不懂C語言,那就去補(bǔ)習(xí)C語言。

如果你看不懂為什么這是在操作寄存器,下一部分會教你如何看寄存器。

第二部分 庫函數(shù)和寄存器

我們都知道計(jì)算機(jī)編程最早使用的是機(jī)器語言,也就是用打點(diǎn)紙帶來編程,后續(xù)出現(xiàn)了匯編語言,使用助記符來輔助編程,再到后來的C語言,高級語言誕生,軟件開發(fā)變得更加簡單。但是到計(jì)算機(jī)這一層,他依然是使用的數(shù)字電路來工作的,至少,開發(fā)者需要操作的東西就算不是數(shù)字電路,也是個(gè)寄存器。計(jì)算機(jī)發(fā)展中,寄存器被人們用“地址”這個(gè)東西來標(biāo)號,翻開編程手冊(單片機(jī)至少有三個(gè)手冊是開發(fā)者需要看的,分別是:data_sheet user_program_guide core_program_guide),你會發(fā)現(xiàn)每個(gè)寄存器都會有一個(gè)地址,到目前為止,32位單片機(jī)擁有非常多的寄存器,這些寄存器地址已經(jīng)不會再用最直接的地址累加形式顯示出來(如0x00,0x01,0x02........)。稍微高級一些的單片機(jī)都會使用基地址+地址偏移量的形式指示寄存器的地址,如下圖所示:

wKgaomTUVIqAKew6AAOye9Ke2Qg952.png

wKgZomTUVJOAER-zAAGlCpcQCFM007.png

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

宏定義:

wKgaomTUVLKARhguAAAZ25INjIA560.png

基地址。

wKgZomTUVMCAWo8aAAAnaEHxftY641.png

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

wKgZomTUVM-AW74dAAAa51KWBdQ481.png

上面那個(gè)東西又會被定義成開發(fā)者可以直接操作的寄存器。

有朋友肯定會問,這里只有一個(gè)基地址,為什么可以用CW_SYSCTRL->REG的形式操作很多寄存器呢?由于每個(gè)寄存器都是32位的,也就是4字節(jié),由C語言聯(lián)合體和結(jié)構(gòu)體的特性,內(nèi)部的地址是基地址累加的,只需要一個(gè)寄存器累加固定的偏移量,就能把結(jié)構(gòu)體成員和單片機(jī)內(nèi)的寄存器一一對應(yīng)起來,這就是寄存器與庫函數(shù)的聯(lián)系。一旦想通寄存器和庫函數(shù)是怎么聯(lián)系起來的,單片機(jī)編程就會變成一個(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)行賦值,賦的值就是等號右邊的部分。細(xì)說等號右邊的含義。RCC是一個(gè)十六進(jìn)制數(shù),他被強(qiáng)制轉(zhuǎn)化為了16位指針類型,并在賦值之前解引用被變成了本身的值,即前文提到的十六進(jìn)制數(shù),根據(jù)編程手冊,這個(gè)十六進(jìn)制數(shù)表示了RC振蕩器對應(yīng)48MHz輸出的校準(zhǔn)值。

wKgaomTUVHmAHDVCAAR5wOr0_So903.png

wKgZomTUVQiAR4D3AAOXuFbjEbU405.png

至此,關(guān)于第二部分的寄存器-庫函數(shù)聯(lián)系已講解完成,如有錯(cuò)誤或遺漏,歡迎指正和補(bǔ)充。

總結(jié):

1.單片機(jī)啟動并不是從main函數(shù)開始執(zhí)行的,而是從啟動文件規(guī)定的函數(shù)開始執(zhí)行的

2.大部分單片機(jī)都會上電自動配置時(shí)鐘保證單片機(jī)能夠正常工作

3.寄存器和庫函數(shù)通過地址這個(gè)東西聯(lián)系在一起,庫函數(shù)本質(zhì)就是在操作寄存器

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6026

    文章

    44452

    瀏覽量

    630820
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5268

    瀏覽量

    119646
  • 時(shí)鐘
    +關(guān)注

    關(guān)注

    10

    文章

    1700

    瀏覽量

    131182
  • 庫函數(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    177

    瀏覽量

    33929
  • CW32
    +關(guān)注

    關(guān)注

    1

    文章

    172

    瀏覽量

    525
收藏 人收藏

    評論

    相關(guān)推薦

    那么點(diǎn)詳細(xì)CW32學(xué)習(xí)筆記】ADC“自動模式”

    上個(gè)章節(jié)介紹了ADC的基本框架和用法,本章節(jié)會較為全面地講解如何靈活地使用ADC功能。 通常來說,外設(shè)執(zhí)行的各種命令都是由CPU發(fā)出的,比如我們需要進(jìn)行AD轉(zhuǎn)換,就通過某個(gè)寄存器標(biāo)志位啟動ADC
    的頭像 發(fā)表于 03-04 18:09 ?823次閱讀
    【<b class='flag-5'>有</b><b class='flag-5'>那么點(diǎn)</b><b class='flag-5'>詳細(xì)</b>的<b class='flag-5'>CW32</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>】ADC“自動模式”

    那么點(diǎn)詳細(xì)CW32學(xué)習(xí)筆記】模數(shù)轉(zhuǎn)換器

    來說,想要判斷大小就需要有對比,因此該數(shù)字指示的電壓大小實(shí)際上是一個(gè)比較的結(jié)果。 ADC將需要測量的電壓信號Ut與已知電壓的信號U作比較,并最終輸出一個(gè)數(shù)字表示Ut相當(dāng)于多少比例的U。 接下來就可以看看CW32的ADC外設(shè)結(jié)構(gòu)框圖了,
    的頭像 發(fā)表于 02-29 09:41 ?681次閱讀
    【<b class='flag-5'>有</b><b class='flag-5'>那么點(diǎn)</b><b class='flag-5'>詳細(xì)</b>的<b class='flag-5'>CW32</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>】模數(shù)轉(zhuǎn)換器

    那么點(diǎn)詳細(xì)CW32學(xué)習(xí)筆記】IIC接口-主機(jī)發(fā)送

    例程鏈接 : https://pan.baidu.com/s/1s1XwqDFkO8fK4SRSTKsNhA?pwd=mshk 提取碼 :mshk 本章將介紹CW32的IIC接口,并最終點(diǎn)亮一塊
    的頭像 發(fā)表于 01-11 09:53 ?497次閱讀
    【<b class='flag-5'>有</b><b class='flag-5'>那么點(diǎn)</b><b class='flag-5'>詳細(xì)</b>的<b class='flag-5'>CW32</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>】IIC接口-主機(jī)發(fā)送

    那么點(diǎn)詳細(xì)CW32學(xué)習(xí)筆記】IIC接口-OLED驅(qū)動

    ,實(shí)際上就是密集LED點(diǎn)陣,所以必定有用于控制大量LED燈的驅(qū)動器,本教學(xué)使用的OLED驅(qū)動是SSD1306,該驅(qū)動器多種通信接口,這里使用IIC接口(具體使用什么接口,數(shù)據(jù)手冊上會有詳細(xì)介紹) 根據(jù)SSD1306數(shù)據(jù)手冊的描述,該設(shè)備的從
    的頭像 發(fā)表于 01-11 09:49 ?621次閱讀
    【<b class='flag-5'>有</b><b class='flag-5'>那么點(diǎn)</b><b class='flag-5'>詳細(xì)</b>的<b class='flag-5'>CW32</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>】IIC接口-OLED驅(qū)動

    基于CW32的門禁綜合系統(tǒng)

    基于CW32單片機(jī)的門禁綜合系統(tǒng)是一款功能強(qiáng)大的智能門禁解決方案,它提供了三種開鎖方式:密碼開鎖、指紋開鎖和刷卡開鎖,為用戶提供方便、安全的門禁控制。該系統(tǒng)的核心控制器采用了CW32單片機(jī)
    的頭像 發(fā)表于 12-28 11:43 ?1604次閱讀
    基于<b class='flag-5'>CW32</b>的門禁綜合系統(tǒng)

    那么點(diǎn)詳細(xì)CW32學(xué)習(xí)筆記】通用定時(shí)器——輸出比較

    本章以CW32通用定時(shí)器為例介紹單片機(jī)定時(shí)器的用法。 定時(shí)器是單片機(jī)中一個(gè)非常傳統(tǒng)且重要的外設(shè),定時(shí)器的 本質(zhì)其實(shí)就是一個(gè)計(jì)數(shù)器 ,只不過被計(jì)數(shù)的對象是定時(shí)器的時(shí)鐘源。定時(shí)器要正常工作,需要這幾
    的頭像 發(fā)表于 12-28 11:24 ?1236次閱讀
    【<b class='flag-5'>有</b><b class='flag-5'>那么點(diǎn)</b><b class='flag-5'>詳細(xì)</b>的<b class='flag-5'>CW32</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>】通用定時(shí)器——輸出比較

    CW32單片機(jī)在智能馬桶的應(yīng)用介紹

    和調(diào)節(jié)。本文將介紹CW32單片機(jī)在智能馬桶的詳細(xì)應(yīng)用。圖:CW32的智能馬桶控制板CW32單片機(jī)
    的頭像 發(fā)表于 12-20 10:09 ?533次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>單片機(jī)</b>在智能馬桶的應(yīng)用介紹

    CW32單片機(jī)在智能馬桶的應(yīng)用介紹

    和調(diào)節(jié)。本文將介紹CW32單片機(jī)在智能馬桶的詳細(xì)應(yīng)用。 圖:CW32的智能馬桶控制板 CW32單片機(jī)
    發(fā)表于 12-20 10:06

    CW32單片機(jī)在智能馬桶的應(yīng)用介紹

    智能科技的迅速發(fā)展使得我們的日常生活變得更加便捷和舒適。智能馬桶作為其中一種智能家居產(chǎn)品,通過單片機(jī)接受和處理來自傳感器的數(shù)據(jù),然后通過控制模塊對智能馬桶的各項(xiàng)功能進(jìn)行控制,實(shí)現(xiàn)對智能馬桶的全面控制和調(diào)節(jié)。本文將介紹CW32單片機(jī)
    的頭像 發(fā)表于 12-20 10:02 ?664次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>單片機(jī)</b>在智能馬桶的應(yīng)用介紹

    那么點(diǎn)詳細(xì)CW32學(xué)習(xí)筆記】通用異步收發(fā)器—發(fā)送篇

    本章介紹CW32通用異步收發(fā)器的使用。 雖然大部分時(shí)候會被簡單稱為“串口”,但實(shí)際上 用“串口”來指代UART并不正確 。串口對應(yīng)并口的概念,在串口通信中,數(shù)據(jù)被以二進(jìn)制形式發(fā)送,并且每次發(fā)送都只
    的頭像 發(fā)表于 11-17 17:30 ?675次閱讀
    【<b class='flag-5'>有</b><b class='flag-5'>那么點(diǎn)</b><b class='flag-5'>詳細(xì)</b>的<b class='flag-5'>CW32</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>】通用異步收發(fā)器—發(fā)送篇

    那么點(diǎn)詳細(xì)CW32學(xué)習(xí)筆記】通用異步收發(fā)器—中斷接收篇

    上回說到單片機(jī)的Uart發(fā)送,我們編寫了一個(gè)發(fā)送函數(shù)循環(huán)發(fā)送固定的字符串,這回我們講Uart的中斷接收功能。 說一下中斷是什么 ,大概就是說,單片機(jī)只有一個(gè)核,就是只有一個(gè)大腦,他無法一核二用地做事
    的頭像 發(fā)表于 11-17 17:27 ?800次閱讀
    【<b class='flag-5'>有</b><b class='flag-5'>那么點(diǎn)</b><b class='flag-5'>詳細(xì)</b>的<b class='flag-5'>CW32</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>】通用異步收發(fā)器—中斷接收篇

    CW32單片機(jī)I2C接口讀寫EEPROM芯片介紹

    CW32單片機(jī)I2C接口讀寫EEPROM芯片介紹
    的頭像 發(fā)表于 11-09 17:42 ?943次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>單片機(jī)</b>I2C接口讀寫EEPROM芯片介紹

    使用CW32單片機(jī)通過ESP8266連接OneNET物聯(lián)網(wǎng)平臺

    這期視頻向大家介紹如何使用CW32單片機(jī)通過ESP8266連接OneNET物聯(lián)網(wǎng)平臺,發(fā)送溫濕度數(shù)據(jù)到平臺,并接受平臺的云控制。
    的頭像 發(fā)表于 11-09 14:32 ?1320次閱讀

    CW32單片機(jī)UART波特率設(shè)置介紹

    CW32單片機(jī)UART波特率設(shè)置介紹
    的頭像 發(fā)表于 10-24 17:35 ?803次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>單片機(jī)</b>UART波特率設(shè)置介紹

    CW32單片機(jī)UART基本數(shù)據(jù)收發(fā)功能介紹

    CW32單片機(jī)UART基本數(shù)據(jù)收發(fā)功能介紹
    的頭像 發(fā)表于 10-24 16:50 ?673次閱讀
    <b class='flag-5'>CW32</b><b class='flag-5'>單片機(jī)</b>UART基本數(shù)據(jù)收發(fā)功能介紹