|
本文講述的是如何從零開始,使用keil建立一個簡單的STM32的工程,并閃爍LED燈,給小白看。 第零步,當然首先你得有一個STM32的板子,其IO口上接了一個LED。。。 第一步,建立一個文件夾0.0
第二步,打開keil,建立工程
在彈出來的對話框中選擇你所用的STM32的芯片。
在接下來彈出來的對話框中選擇是,這樣keil就幫我們建立好了啟動文件。
第三步,新建一個main.c文件,并添加到工程中。 點擊New按鈕,建立一個文本文件。
在建立的文本文件中輸入C中的main函數(shù)
點擊保存
保存后,將文件添加到工程中
第四步,點擊編譯
可以看到keil有報錯
錯誤信息為:沒有定義的符號SystemInit,這是因為在啟動文件中有調(diào)用SystemInit函數(shù),但是我們沒有定義它,如下圖:
暫時不用理會上述啟動文件中匯編的含義,只需在main.c中添加該函數(shù)即可消除該錯誤。
修改后再編譯,程序沒有報錯了。至此,一個STM32的工程就建立完成了。 第五步,將下面的代碼復(fù)制粘貼
下面一段是對代碼的簡單講解,可不用太深入。 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// STM32 GPIO輸出高低電平的完整流程如下: 配置時鐘→配置IO口→IO口輸出高地電平 1,STM32的時鐘是可以PLL的。但是我這里為了簡化操作,就不配置,只使用默認的時鐘----內(nèi)部8MZH振蕩器。 2,硬件上,我的LED燈是接到PA8。那么,我要怎么控制PA8呢? STM32不能像單片機一樣,一上來就能操作IO口。要操作STM32的IO口,首先要配置IO口。 void LEDInit(void) { RCC->APB2ENR|=1<<2; GPIOA->CRH&=0XFFFFFFF0; GPIOA->CRH|=0X00000003; } 其中RCC->APB2ENR|=1<<2;是使能GPIOA的時鐘。若是要使能GPIOB的時鐘則是RCC->APB2ENR|=1<<3;其他的以此類推。 GPIOA->CRH&=0XFFFFFFF0; GPIOA->CRH|=0X00000003; 是配置PA8為推挽輸出,50MHZ。 若是要設(shè)置PA9則是: GPIOA->CRH&=0XFFFFFF0F; GPIOA->CRH|=0X00000030; 其他的以此類推,若是PA0~PA7則將CRH改為CRL就行。 若是要配置其他GPIO口,將GPIOA改成GPIOB,GPIOC。。。就行。, 3,我們知道51單片機是可以單獨控制每個IO口的,STM32也可以做到,這個機制叫做Bit-Bond。 參考《Cortex-M3權(quán)威指南》可知道,只要找到PA8輸出寄存器在Bit-Bond的地址,即可操作PA8的輸出。地址的計算方法如下圖:
《Cortex-M3權(quán)威指南》還給出了C語言宏定義的方法,我們可以直接使用。
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 將上述代碼輸入后,點開配置選項,配置如下:
勾上 Create HEX File
選擇J-Link下載工具
再次build,然后下載就大功告成啦。
綜上可以看出,若是不配置STM32的PLL,那么相對于51單片機,STM32閃爍LED燈只不過多了一個步驟----配置GPIO口為輸出而已。 |
|
|
來自: wenming044 > 《單片機》