STM32的編程模型
假如使用C語言的方式寫了一段程序,這段程序首先會被燒錄到芯片當中(Flash存儲器中),Flash存儲器中的程序會逐條的進入CPU里面去執行。
CPU相當于人的一個大腦,雖然能執行運算和執行指令,但不能去做一些具體的任務(比如大腦想看到某樣東西,它需要眼睛;想要說話,就需要嘴巴)。對于CPU同理,想要完成某個具體的功能,就需要借助CPU周圍的一些模塊(模塊負責執行一些具體的任務)。
故程序的目的就是控制CPU周圍的模塊,去執行一些具體的功能。
寄存器和寄存器編程
寄存器:由若干個比特位組成,讀寫這些比特位可以控制這些模塊。CPU通過控制寄存器,來操控這些模塊,從而來實現具體功能。
想對芯片周圍的這些模塊進行編程(使用模塊),就需要操作模塊的寄存器組,直接去讀寫操作寄存器的代碼,為寄存器編程。
假設CPU周圍有一個模塊,叫做GPIO,可以管理芯片周圍的16個引腳。其模塊內部有寄存器組,包含兩個寄存器:輸入寄存器(IDR)和輸出寄存器(ODR),均有16個比特位,對應GPIO所管理的16個引腳。則可對其進行寄存器編程:
int main() {GPIO->ODR = 0xFFFF; //所以引腳輸出高電平GPIO->ODR = 0x0000; //所有引腳輸出低電平GPIO->ODR |= 0x01; //1號引腳輸出高電平GPIO->ODR &= ~0x01; //1號引腳輸出低電平 }
這種寄存器的編程方式比較繁瑣。
庫函數編程
將操作寄存器的代碼包裝成一條條函數,在實際編程中,直接調用這些包裝好的函數來控制寄存器。
標準庫:由ST官方提供的庫,對寄存器的簡單封裝。
如下所示,為庫函數編程:
void GPIO_Init(...);
void GPIO_Write(...);
void GPIO_WriteBit(...);
void GPIO_SetBits(...);
void GPIO_ResetBits(...);int main()
{GPIO_Write(...,0xFFFF); //所以引腳輸出高電平GPIO_Write(...,0x0000); //所以引腳輸出低電平GPIO_WriteBit(...,1,1); //1號引腳輸出高電平GPIO_WriteBit(...,1,0); //1號引腳輸出低電平
}
安裝DFP
要想使用標準庫函數,需要安裝DFP(開發固件包)。安裝了DFP,就相當于把標準庫安裝到了我們的電腦上。
?安裝ARMCC編譯器
雖然Keil5是集成開發環境,具備編譯器的功能。但我們的標準庫是一個比較古老的庫,對于新版的Keil5軟件來說,不支持標準庫的編譯,需要安裝一個舊版的編譯器,即ARMCC編譯器,來讓我們的標準庫能夠在Keil5軟件上跑起來。
可在軟件中查看是否安裝ARMCC: