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