銀??是這個(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是真搞控制的 |
|