用RVCT編譯STM32點亮LED

2021-06-20 16:17:30 字數 3267 閱讀 3017

板子用的微芯力科的三合一微控制器開發評估套件,要點亮的兩個led接在pb5,pb6上。

先寫main.c了:

#define rcc_apb2enr *(volatile unsigned long *)0x40021018   //時鐘使能暫存器

#define gpiob_crl *(volatile unsigned long *)0x40010c00 //gpiob控制暫存器

#define gpiob_odr *(volatile unsigned long *)0x40010c0c //gpiob資料暫存器

int main(void)

if(flag)

else

flag = !flag;

}}

還會用到乙個startup_stm32f10x_md.s,這個彙編**,直接用標準庫里的**,不用修改。其中做了一些初始化工作,還有中斷向量表等。裡面呼叫了乙個函式systeminit,這個可以寫個空函式,我比較懶,把標準庫里的system_stm32f10x.c放當前目錄就ok了,這個**裡有systeminit。

需要的幾個標頭檔案:

core_cm3.h

stm32f10x.h

system_stm32f10x.h

都在標準庫的**裡有。

然後就可以編譯了,乙個乙個編,最後連線也可以,寫個make直接搞完當然更好:

******_path_name=progra~1

full_path_name =program files

arm_home =$(subst \,/,$(subst $(full_path_name),$(******_path_name),$(rvct31bin)))

armcc ="$(arm_home)/armcc"

cc ="$(arm_home)/tcc"

cpp ="$(arm_home)/tcpp"

asm ="$(arm_home)/armasm"

link ="$(arm_home)/armlink"

ar ="$(arm_home)/armar"

fromelf ="$(arm_home)/fromelf"

target = stm32_1

t_fn =$(strip $(target))

cflags = -c --cpu cortex-m3 -d__eval -g -o0 --apcs=interwork -dstm32f10x_md

aflags = --cpu cortex-m3 --pd "__eval seta 1" -g --apcs=interwork --xref

lflags = --cpu cortex-m3 --ro-base 0x08000000 --entry 0x08000000 --rw-base 0x20000000 --entry reset_handler --first __vectors --strict --summary_stderr --info summarysizes --map --xref --callgraph --symbols --info sizes --info totals --info unused --info veneers

iflags = -i.\

cflags += $(iflags)

csrcs = $(wildcard *.c)

asrcs = $(wildcard *.s)

cobjs = $(csrcs:.c=.o)

aobjs = $(asrcs:.s=.o)

objs = $(cobjs) $(aobjs)

all: $(t_fn).axf

$(fromelf) -c --i32 $(t_fn).axf --output $(t_fn).hex

$(t_fn).axf: $(objs)

$(link) $(lflags) --list ".\$(t_fn).map" $(objs) -o $@

startup_stm32f10x_md.o: startup_stm32f10x_md.s

$(asm) $(aflags) startup_stm32f10x_md.s -o $@

sinclude $(csrcs:.c=.d)

%d: %c

$(armcc) --md $(cflags) $<

@c:\python33\python d_post.py $@

%o: %c %d

$(armcc) $(cflags) --depend "$*d" -o $@ $<

clean :

del *.o

del *.d

del *.axf

del *.hex

makefile裡的python程式是用來處理生成的依賴檔案的,因為c:\program files\*** 這種路徑有空格會編譯失敗。

如果覺得上面makefile比較難理解,就看看下面我這個初期版本:

all: $(t_fn).axf 

$(fromelf) -c --i32 $(t_fn).axf --output $(t_fn).hex

$(t_fn).axf: startup_stm32f10x_md.o main.o subfun.o system_stm32f10x.o

$(link) $(lflags) --list ".\$(t_fn).map" startup_stm32f10x_md.o main.o subfun.o system_stm32f10x.o -o $@

startup_stm32f10x_md.o: startup_stm32f10x_md.s

$(asm) $(aflags) startup_stm32f10x_md.s -o $@

main.o: main.c

$(armcc) $(cflags) main.c -o $@

system_stm32f10x.o: system_stm32f10x.c stm32f10x.h

$(armcc) $(cflags) system_stm32f10x.c -o $@

儘管使用st的外設標準庫里的兩個檔案,main.c裡是直接操作暫存器點亮兩個led的,沒有使用lib。

STM32點亮跑馬燈

day1 庫函式點亮跑馬燈!s1 開啟 apb2的使能 韌體庫stm32f10x rcc.c stm 32f10x.rcc.h 呼叫rcc apb2periphclockcmd 其第乙個引數是io組,第二個是使能狀態 s2 初始化所需操作的埠引數 韌體庫stm32f10x.rcc.c stm 32f...

STM32點亮LED(熟中新認識)

stm32點亮led步驟案例 準備 1 硬體 stm32開發板,jlink 器 用於燒入程式 2 軟體 a 整合開發環境keil,我用的是keil4 b jlink驅動setup jlink v490.exe 驅動jlink 器 準備妥當,go go go 點亮led燈的步驟如下 1.安裝keil軟...

STM32點亮乙個LED

圖 i o埠位的基本結構 stm32f103c8t6共有2組gpio埠 pa pb,每組16個埠。每個埠有兩個32位配置暫存器 gpiox crl,gpiox crh 兩個32位資料暫存器 gpiox idr,gpiox odr 乙個32位置位 復位暫存器 gpiox bsrr 乙個16位復位暫存器...