Linux下開發stm32(三) | 暫存器工程開發
阿新 • • 發佈:2018-12-29
先來回顧一下,前兩篇Linux下開發stm32(一) | 使用gcc-arm-none-eabi工具鏈編譯和Linux下開發stm32(二) | 使用openocd下載與除錯中,我們介紹瞭如何建立一個空的裸機工程(只有啟動檔案和main檔案),並編譯工程生成elf檔案,然後將其轉為bin格式或hex格式,使用openocd下載,最後編寫了一個makefile雛形,併成功點亮了一個LED~
但是這個LED我們是通過指標直接操作暫存器地址來完成的,接下來,我們在此基礎上,引入stm32標頭檔案,其中包含了暫存器的巨集定義,也就是使用暫存器進行開發~
1.建立暫存器工程
首先將上一節中建立的裸機工程00-template-reg
01-led-reg
:將其中空的stm32f10x.h
檔案刪掉,從韌體庫中複製一份,然後因為標頭檔案中使用了core_cm3.h
和system_stm32f10x.h
中的一些定義,包含了這兩個標頭檔案,所以將這兩個檔案也複製過來:
接下來編寫main.c
檔案:
#include "stm32f10x.h"
int main()
{
/* 開啟GPIOB時鐘 */
//*(unsigned int*)(0x40021000+0x18) |= 1<<3;
RCC->APB2ENR |= 1<<3;
/* 配置PB0為推輓輸出 */
//*(unsigned int*)(0x40010c00+0x00) |= 1<<(4*0);
GPIOB->CRL |= 1<<(4*0);
/* PB0輸出低電平,點亮綠色LED */
//*(unsigned int*)(0x40010c00+0x0c) &= ~(1<<0);
GPIOB->ODR &= ~(1<<0);
while(1);
}
void SystemInit(void)
{
}
至此,暫存器工程建立完畢,接下來開始編譯~
2.編譯&下載暫存器工程
編譯暫存器工程的重點就在於C標頭檔案和C原始檔,啟動檔案的編譯和連結都和之前一樣。
標頭檔案不用編譯,但是要注意
- 在編譯含有該標頭檔案的原始檔時,如果標頭檔案和原始檔不在一個資料夾裡,需要用
-I
- 標頭檔案經常通過判斷使用者是否有巨集定義來進行一些選擇編譯,可以使用
-D
引數進行巨集定義;
接下來修改makefile,編譯我們建立的工程:
- 使用命令
make
編譯生成elf檔案; - 使用命令
make bin
將elf檔案轉化生成bin檔案; - 使用命令
make hex
將elf檔案轉化生成hex檔案; - 使用命令
make clean
即可清除掉所有編譯產生的檔案。
上一篇:Linux下開發stm32(二) | 使用openocd下載與除錯
下一篇: