板子用的微芯力科的三合一微控制器開發評估套件,要點亮的兩個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位復位暫存器...