小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

說好的讀源碼變成了學(xué)習(xí)教程(無刷銀劍固件)

 云深無際 2021-12-15
本來是想寫個(gè)源碼分析的,結(jié)果分析了半道發(fā)現(xiàn)和我想的不一樣,就當(dāng)一個(gè)STM32的學(xué)習(xí)指南了。

銀??是這個(gè)芯片,我沒有安裝

這是固件的代碼組織形式,源碼+驅(qū)動(dòng)+芯片標(biāo)準(zhǔn)庫

這些是編譯時(shí)候加的目錄,我覺得看源碼這個(gè)是很重要的

外設(shè)

驅(qū)動(dòng)

源碼

我們可以去我提供的網(wǎng)站下載對(duì)應(yīng)的pack包

http://www.armfly.com/armbbs/bbs/96992/Keil.STM32F0xx_DFP.2.1.0.pack

下載的位置

https://cloud.tencent.com/developer/article/1605195

這里提供MDK的下載版本

多線程快

一開始沒有

安裝

再這里安裝

然后就有了

CMSIS是什么?

ARM Cortex 微控制器軟件接口標(biāo)準(zhǔn)(CMSIS:Cortex Microcontroller Software Interface Standard) 是 Cortex-M 處理器系列的與供應(yīng)商無關(guān)的硬件抽象層(英文原文為:a vendor-independent hardware abstraction layer for the Cortex-M processor series and defines generic tool interfaces--來自ARM官方定義)。使用CMSIS,可以為處理器和外設(shè)實(shí)現(xiàn)一致且簡單的軟件接口,從而簡化軟件的重用、縮短微控制器新開發(fā)人員的學(xué)習(xí)過程,并縮短新設(shè)備的上市時(shí)間。軟件的創(chuàng)建被嵌入式行業(yè)公認(rèn)為主要成本系數(shù)。通過在所有Cortex-M 芯片供應(yīng)商產(chǎn)品中標(biāo)準(zhǔn)化軟件接口,這一成本會(huì)明顯降低,尤其是在創(chuàng)建新項(xiàng)目或?qū)F(xiàn)有軟件遷移到新設(shè)備時(shí)。

這個(gè)東西就好像是我們一聽見說一個(gè)芯片是ARM內(nèi)核的,其實(shí)這個(gè)ARM內(nèi)核就是對(duì)應(yīng)的CMSIS,就好像是一個(gè)底層的構(gòu)件。

https://arm-software.github.io/CMSIS_5/General/html/index.html

CMSIS 的創(chuàng)建是為了幫助行業(yè)實(shí)現(xiàn)標(biāo)準(zhǔn)化。它支持跨各種開發(fā)工具和微控制器的一致軟件層和設(shè)備支持。CMSIS 并不是一個(gè)巨大的軟件層,它引入了開銷并且沒有定義標(biāo)準(zhǔn)外設(shè)。因此,硅行業(yè)可以使用此通用標(biāo)準(zhǔn)支持各種基于 Arm Cortex 處理器的設(shè)備。

標(biāo)準(zhǔn)化其實(shí)是一種強(qiáng)制手段,一家多大叫標(biāo)準(zhǔn)化,不過標(biāo)準(zhǔn)化了好啊,學(xué)一個(gè)就行,你居然不高興?

這是驅(qū)動(dòng)芯片的所有文件

HAL 庫

??HAL是 Hardware Abstraction Layer 的縮寫,中文名:硬件抽象層。HAL 庫是 ST 為 STM32 最新推出的抽象層嵌入式軟件,可以更好的確???STM32 產(chǎn)品的最大可移植性。該庫提供了一整套一致的中間件組件,如 RTOS,USB,TCP/IP 和 圖形 等。

??HAL 庫是基于一個(gè)非限制性的 BSD 許可協(xié)議(Berkeley Software Distribution)而發(fā)布的開源代碼。ST 制作的中間件堆棧(USB 主機(jī)和設(shè)備庫,STemWin)帶有允許輕松重用的許可模式, 只要是在 ST 公司的 MCU 芯片上使用,庫中的中間件(USB 主機(jī)/設(shè)備庫,STemWin)協(xié)議棧即被允許隨便修改,并可以反復(fù)使用。至于基于其它著名的開源解決方案商的中間件(FreeRTOS,F(xiàn)atFs,LwIP和PolarSSL)也都具有友好的用戶許可條款。作為目前 ST 主推的外設(shè)庫,HAL庫相關(guān)的文檔還是非常詳細(xì)的。

好幾天忙別的,源碼都沒有讀,今天就讀會(huì)兒,累了就到了文章尾部了~

讀法粗糙,因?yàn)檫@個(gè)是STM32的代碼,而且是裸機(jī)的,就直接從main文件開始讀了。

一開始是固件的初始化

先看main文件里面的函數(shù)調(diào)用,基本上就是初始化+循環(huán)

值得注意的是debug的結(jié)構(gòu)體就是這么簡單。注意看里面的變量名的意思

時(shí)鐘+IMU+Flash初始化

時(shí)鐘的初始化

IMU的初始化

加載參數(shù)

還在讀

各種常量

這個(gè)飛控里面沒有什么GUI的參數(shù)設(shè)置軟件,只能改代碼,通過該這個(gè)config里面的宏。

就是這樣

在main文件里面引入

你看宏定義

這個(gè)是超頻

在config的配置是這樣的

就可以超頻了

延時(shí)函數(shù)

這些是時(shí)間的函數(shù)

GPIO就兩個(gè)函數(shù),但是內(nèi)容豐富

下面是FPV引腳,沒有搞懂是什么

PWM設(shè)置

初始化后繼續(xù)設(shè)置初值

四個(gè)電機(jī)的定義

通道數(shù)?

陀螺儀初始化

bayang的協(xié)議

接收

CMSIS庫

重要的CM頭

各種編譯器的宏定義

這里某種情況

C:\Keil_v5\ARM

這是ARMCC的庫文件

里面的類型定義,但是是keil的頭,使用的

如果直接查是微軟的

從keil復(fù)制一個(gè)出來

這些是真正使用的定義

__IO定義

注釋

這個(gè)頭有趣極了,我給你講

把這個(gè)文件稱之為對(duì)芯片的封裝也不為過,這個(gè)文件是ST公司給的,遵守CMSIS守則。可以簡化ARM_CM3的移植難度。

主要的內(nèi)容是定義寄存器的地址以及使用的結(jié)構(gòu)體封裝。

接下來看的就是這些文件

不過我要多嘴一句,這個(gè)文件是設(shè)備外設(shè)的訪問層,主要配置時(shí)鐘頻率

人家也寫了

看這里會(huì)使用extern,在外面使用

然后跳到這里

這個(gè)文件在這里被定義

里面的注釋

這個(gè)是所有函數(shù)的定義

這些是實(shí)現(xiàn)

上面的函數(shù)體又在這里被定義了一下

看它寫的意思是,這些文件是啟動(dòng)文件,都是匯編的,根據(jù)芯片選一個(gè)

VSCode覺得我需要看匯編了

嘖,這個(gè)顏色,變得

系統(tǒng)得初始化從匯編代碼開始

這是匯編寫的東西

分配??臻g,stack就是棧

堆空間也安排點(diǎn),雨露均沾

從這里開始就進(jìn)入我們C的 世界了

我以前也沒有用過STM32,然后正經(jīng)的課也沒有上過,就看過火哥的書,看了一點(diǎn)點(diǎn),正好借著這個(gè)飛控就驗(yàn)證一下是不是像書中說的那樣,體驗(yàn)一下封裝的快樂。

file:///C:/Users/yunswj/Downloads/Silverware-master/Silverware-master/Libraries/CMSIS/Device/ST/STM32F0xx/Include/stm32f0xx.h

這些就是寄存器的地址定義了,我就截圖了一些

外設(shè)樹,請(qǐng)?jiān)试S我這樣叫它

時(shí)鐘相關(guān)的東西,定時(shí)器,RTC,看門狗什么的

SPI,串口,I2C,CAN

DMA

GPIO組

限于篇幅(其實(shí)不是篇幅,是我沒有耐心,只能走馬觀花的看一遍了)

沒有MPU的功能

這里是中斷的定義區(qū)

可以看到是enumerate

對(duì)應(yīng)的意思

GPIO,必不可少

I2C的結(jié)構(gòu)體定義

上面文件接著下面,上面這些就是所謂的位定義

接著跳轉(zhuǎn)

這些是我們用的實(shí)現(xiàn)

對(duì)于GPIO來說,就似乎這些函數(shù)了

這里就看一個(gè)配置端口功能,但是不全面

這個(gè)功能是GPIO的初始化

這里是GPIO

內(nèi)存的映射的開始

這個(gè)初始化的函數(shù)傳入兩個(gè)參數(shù)

一開始我就說這個(gè)結(jié)構(gòu)體了,對(duì)GPIO做了封裝

另外一個(gè)GPIO的初始的結(jié)構(gòu)體封裝

IO的輸出速率

這是上面的翻譯

這種東西其實(shí)看懂了,也不過如此,芯片再高端又怎么樣?不就是多點(diǎn)宏定義,多點(diǎn)結(jié)構(gòu)體,索然無味了~

在這里就是我們打交最多的地方了,各種外設(shè)功能都在這里實(shí)現(xiàn)

CMSIS就是芯片+地址映射的活,STD才是我們接觸的東西

名字叫“標(biāo)準(zhǔn)外設(shè)驅(qū)動(dòng)程序”

以后叫對(duì)名字。

如果你的程序要寫啥中斷的話,這個(gè)頭文件一定要加

看這個(gè)conf,就是頭文件的管理器

用到的都有

這是配置要不要使用斷言,調(diào)試的時(shí)候使用

這里參數(shù)的意思

這個(gè)文件夾里面,加了一些廢話

common是屏幕的接線定義,LCD屏幕。

具體看這里

至于這個(gè)Nucleo看上去是個(gè)開發(fā)板。

確實(shí)是

等小張有錢,買一個(gè)玩,看來這個(gè)nucleo就是個(gè)系列

一般來說開發(fā),就是main,conf,it.h,it.c,就是主文件,頭的配置文件,中斷程序,這么多了~

注意我們得有一個(gè)參考手冊(cè),本崽的是中文的

STM32是真搞控制的

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多