91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

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

jf_08851166 ? 來源:jf_08851166 ? 作者:jf_08851166 ? 2023-08-10 11:13 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

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

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

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

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

wKgaomTUVG2ANVRbAA577myiy30508.png

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

wKgaomTUVHmAHDVCAAR5wOr0_So903.png

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

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

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

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

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

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

wKgaomTUVIqAKew6AAOye9Ke2Qg952.png

wKgZomTUVJOAER-zAAGlCpcQCFM007.png

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

宏定義:

wKgaomTUVLKARhguAAAZ25INjIA560.png

基地址。

wKgZomTUVMCAWo8aAAAnaEHxftY641.png

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

wKgZomTUVM-AW74dAAAa51KWBdQ481.png

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

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

wKgaomTUVHmAHDVCAAR5wOr0_So903.png

wKgZomTUVQiAR4D3AAOXuFbjEbU405.png

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

總結(jié):

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

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

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

審核編輯 黃宇

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

    關(guān)注

    6076

    文章

    45495

    瀏覽量

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

    關(guān)注

    31

    文章

    5608

    瀏覽量

    129968
  • 時鐘
    +關(guān)注

    關(guān)注

    11

    文章

    1971

    瀏覽量

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

    關(guān)注

    0

    文章

    177

    瀏覽量

    35128
  • CW32
    +關(guān)注

    關(guān)注

    1

    文章

    299

    瀏覽量

    1846
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    CW32單片機支持哪幾種開發(fā)環(huán)境,比較常用的MDK支持嗎?

    CW32單片機支持哪幾種開發(fā)環(huán)境,比較常用的MDK支持嗎。 若使用MDK開發(fā),是否也需要下載芯片包,導(dǎo)入到MDK中?xxx32的庫可以用嗎。
    發(fā)表于 01-26 06:14

    CW32芯片哪些外設(shè)接口?

    CW32芯片哪些外設(shè)接口
    發(fā)表于 12-29 07:23

    請問CW32的code加密方法哪些?

    芯源的CW32單片機芯片,對于code加密方法和手段都有哪些方式?
    發(fā)表于 12-26 08:09

    請問CW32芯片的特性哪些?

    CW32芯片的特性哪些?
    發(fā)表于 12-26 06:14

    請問CW32微控制器是否提供軟件開發(fā)工具和庫函數(shù)支持?

    CW32微控制器是否提供軟件開發(fā)工具和庫函數(shù)支持?
    發(fā)表于 12-16 08:11

    CW32系統(tǒng)發(fā)啟動過程

    CW32支持 2 種不同的啟動模式,通過 BOOT 引腳狀態(tài)進行選擇,啟動模式選擇電路只在芯片解復(fù)位時刻采樣 BOOT 引腳狀態(tài),因此在芯片解復(fù)位前用戶必須根據(jù)需要設(shè)置好BOOT 引腳的電平狀態(tài),以
    發(fā)表于 12-15 07:54

    CW32系統(tǒng)哪些常見問題?

    CW32系統(tǒng)中,可能會遇到一些常見問題,包括但不限于: 重復(fù)定義函數(shù):例如在a.c里定義了函數(shù)void func(),在b.c里也定義了一個void func()。這會導(dǎo)致編譯時出現(xiàn)錯誤,需要
    發(fā)表于 12-15 06:47

    CW32學(xué)習(xí)筆記,通用異步收發(fā)器之中斷接收

    。再看CW32這種32位單片機,使用cortex-M0+內(nèi)核,擁有可編程的中斷控制器,單片機上會有很多個中斷源,但這是內(nèi)核可以使用和管理的部分,芯片制造廠使用這一款內(nèi)核制造單片機,并不
    發(fā)表于 12-12 07:45

    CW32單片機如何讓生活更便捷

    體驗 - 溫度感應(yīng)與控制今年廣東的冬天,你是否煩惱過冬天馬桶座圈的冰冷?CW32單片機,這將不再是問題。在智能馬桶內(nèi)的溫度傳感器握有控制權(quán),它通過CW32
    發(fā)表于 12-11 06:11

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

    1.溫度感應(yīng)與控制 智能馬桶內(nèi)設(shè)有溫度傳感器,通過CW32單片機的處理,可以實時感知到用戶所需的座圈溫度并根據(jù)用戶的設(shè)定進行調(diào)節(jié)。當(dāng)溫度過高或過低時,單片機將發(fā)出信號,通過控制模塊對座圈的加熱或制冷
    發(fā)表于 12-04 08:01

    基于芯源CW32 MCU的LED閃爍示例及代碼分析

    準(zhǔn)備: 芯源CW32開發(fā)板 一個LED 電阻及基礎(chǔ)連接線 開發(fā)環(huán)境:我使用的是Keil作為開發(fā)環(huán)境,同時利用官方提供的CW32庫函數(shù),這使得代碼更加簡潔清晰。 代碼實現(xiàn):這段代碼實現(xiàn)的是控制板
    發(fā)表于 12-04 06:52

    在使用Saiyuan的CW32單片機時,頻率調(diào)整導(dǎo)致系統(tǒng)跑飛,影響正常運行,怎么解決?

    在使用Saiyuan的CW32單片機時,頻率調(diào)整導(dǎo)致系統(tǒng)跑飛,影響正常運行。該怎么做?
    發(fā)表于 11-28 08:09

    deepseek來分析CW32單片機的特點

    國產(chǎn)化優(yōu)勢 作為國產(chǎn)單片機,CW32系列在供應(yīng)鏈安全、技術(shù)支持、成本控制等方面具有優(yōu)勢。 提供本地化的技術(shù)支持和文檔資源。 典型型號示例 CW32F030:基于Cortex-M0,適合成本敏感型
    發(fā)表于 11-26 06:33

    單片機啟動&庫函數(shù)構(gòu)成

    文件中找到那個叫SystemInit的東西,這是個函數(shù)名字,一般來講都可以在廠商提供的庫函數(shù)中找到,cw32的在下面這個圖的文件里 5.在執(zhí)行完SystemInit函數(shù)的這三行
    發(fā)表于 11-18 08:15

    CW32 MCU哪些系列?

    目前CW32 MCU通用高性能MCU、安全低功耗MCU、無線射頻MCU等3個系列。其中射頻MCU集成了無線收發(fā)器,主要包括CW32R031(2.4GHz BLE-Lite)系列和CW
    發(fā)表于 11-12 07:34