1. 程式人生 > >Linux下開發stm32(三) | 暫存器工程開發

Linux下開發stm32(三) | 暫存器工程開發

先來回顧一下,前兩篇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.hsystem_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原始檔,啟動檔案的編譯和連結都和之前一樣。
標頭檔案不用編譯,但是要注意

  1. 在編譯含有該標頭檔案的原始檔時,如果標頭檔案和原始檔不在一個資料夾裡,需要用-I
    (大寫i)引數宣告標頭檔案路徑;
  2. 標頭檔案經常通過判斷使用者是否有巨集定義來進行一些選擇編譯,可以使用-D引數進行巨集定義;

接下來修改makefile,編譯我們建立的工程:

  • 使用命令make編譯生成elf檔案;
  • 使用命令make bin將elf檔案轉化生成bin檔案;
  • 使用命令make hex將elf檔案轉化生成hex檔案;
  • 使用命令make clean即可清除掉所有編譯產生的檔案。

上一篇Linux下開發stm32(二) | 使用openocd下載與除錯
下一篇