初入電子坑之stm32篇
///插播一條:我自己在今年年初錄製了一套還比較系統的入門單片機教程,想要的同學找我拿就行了免費的,私信我就可以哦~點我頭像黑色字體加我地球呺也能領取哦。最近比較閒,帶做畢設,帶學生參加省級或以上比賽///
前言
可以看到,寄存器編程雖然消耗CPU性能少、速度快。但於我們開發應用來說,那就是刀耕火種中的刀耕火種。。。
晶片廠家也考慮到了這點,所以一般會提供一些基本的固件庫供開發人員使用。stm32的爸爸ST公司自然也不例外。
CMSIS標準
一種內核架構通常會被多家晶片廠家採用,而晶片廠家對於晶片內部的外設布置是有差異的,這就很容易導致軟體在同內核,不同外設的晶片上移植困難。
為了解決這個問題,設計架構的公司和使用架構的晶片廠商間就會制定一個標準,讓軟體可以適配同內核不同外設的晶片的情況。
而CMSIS標准(Cortex MicroController Software Interface Standard)就是 ARM與晶片廠商建立的一種標準實例。
CMSIS標準其實是一個軟體抽象層。
(上圖中,黃色部分是MCU硬體層面的東西,藍色CMSIS層其實就是程序。)
它的內容有兩個方面:
·內核函數層:內核寄存器的名字、地址定義。由ARM公司提供。
·設備外設層:片上核外外設的地址和中斷定義。有晶片生產商負責。
初識stm32固件庫
了解了CMSIS標準後,我們就可以很愉快的去stm32提供的官方固件庫找我們要的東西了。
打開固件庫文件夾我們可以看到有以下兩個文件夾:
從文件名就可以盲猜,一個是CMSIS標準相關的配置文件夾,一個是相對具體型號的晶片外設配置文件夾。
點進CMSIS可以發現,不出所料,就是內核的配置相關配置的源文件、stm3210x的時鐘配置文件還有啟動文件。
我們用的時候把它們複製到我們自己的工程里即可。
然後去隔壁 STM32F10x_StdPeriph_Driver文件夾瞄瞄,這個就很簡單粗暴了,一個inc(include)、一個src(source)。
隨便點進去就會發現ST官方按照不同的外設模塊,stm32f10x_xxx.c的方式給分門別類的放好了。(見下圖)
既然東西齊活了,下面就可以先愉快的建個固件庫工程模板,然後正式開啟固件庫編程之旅了~
下面結合實例敘述固件庫的編程方式。
實例:按鍵控制LED
首先,讓我們回憶一下,點燈的流程:
·開始GPIO口時鐘使能
·初始化GPIO
·選擇引腳IO口引腳
·並選擇需要的IO模式
·設置對應IO口的位值
如果有按鍵開關的話就是,就加上以下流程:
·判斷讀取開關對應IO口的值(IDR寄存器里)
·根據判斷情況做相應的動作
庫函數運用
上述流程動作,固件庫全都是給我們安排得妥妥,直接調用相關函數就可以了。
具體的相關函數都在對應外設的頭文件最下面,如我們即將使用的GPIO:
從上面兩圖可以看到:
·想要什麼基本操作?去對應外設的庫頭文件找啊!
·函數參數怎麼用?直接去找源碼看定義啊!
·不知道函數功能是啥?直接看源碼注釋啊