From:http://bbs.elecfans.com/jishu_1102996_1_2.html
概述
STM32
系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的
ARM Cortex-M3
内核,CM3
采用了[url=]哈佛结构[/url]
[Ecube1]
,拥有独立的指令总线和数据总线,可以让取指与数据访
问并行不悖。
STM32F103
系列主频最高72MHz
,是一个32
位处理器内核,内部的数据路径、寄存器、存储器接口均为32
位。
而对于STM32
的开发方式来说,可以分为寄存器方式和库函数方式,这两种的开发方式各有优缺点,寄存器方式相对来说配置起来比较麻烦,程序的可读性比较差,不利于维护,而库函数方式开发相对来说让我们告别了繁琐的寄存器配置,增加了程序的可读性、便于后期维护。但是相对来说库函数不如寄存器方式效率高。
对于STM32
官方库这里说一下,STM32
开发可以采用库函数也可以采用寄存器方式,寄存器方式相对于库函数来说比较复杂,因为STM32
的寄存器相对非常多,但是对于寄存器更能非常详细的了解原理。所以我们采用寄存器的开发方式。
下面我们搭建一下寄存器开发的IDE
环境,MDK
的安装不做过多的介绍,因为比较简单,值得注意的是在安装完成MDK
以后需要安装Keil.STM32F1xx_DFP.2.1.0.pack
。下面我们主要介绍一下工程项目的建立,我们新建文件夹example
,然后在里面建立StartUp
、Bsp
、Project
、App
,如图1-1
:
图1-1example文件夹
然后我们从ST
的官方网站下载库函数,然后将库函数的启动文件startup_stm32f10x_hd.S(startup_stm32f10x_md.S
、startup_stm32f10x_ld.S)
拷贝到我们新建工程文件夹StartUp
里面如图1-2
:
图
1-2 StartUp
文件夹
在App
文件夹里面新建main.c
如图1-3
:
图
1-3 App
文件夹
图
1-4 Bsp
文件夹
下面我们打开MDK
,新建工程,我们把工程存放在文件夹Project
文件里面,Device
选择STM32F103RC,
点击OK
,如图1-5
:
图
1-5 Device
选择
然后点击Cancel
关闭弹出的对话框,如图1-6
:
图
1-6
关闭
Manage Run-TimeEnvironment
点击ManageProject Items
,修改Project Targets
和Groups
后点击OK
,如图1-7
:
图
1-7
修改
ManageProject Items
工程树如图1-8
:
图
1-8
工程树
图
1-9
晶振的设置
图
1-10 HEX
文件的创建
图
1-11
宏定义及头文件路径的设置
图
1-12 Debug
设置
当每一次下载的时候需要设计JTAG
,如图1-13
所示,如果是JTAG
下载那么在黑色的框中选择的是JTAG
,如果是SWD
下载那么就选择SWD
:
图
1-13 JTAG
设置
设置下载完成
reset
,因为当下载完成以后必须手动按下
reset
按键才能使程序运行,如果勾选图中的框住部分则不需要手动按下
reset
按键,设置如图
1-14
:
图
1-14 Flash Download
设置
点击OK
退出,在Groups
里面添加相应的C
语言文件,我们先包含进头文件编译一下,如图1-15
:
图
1-15 main
函数编译测试
点击Rebuild
,根据报错提示可以知道缺少头文件core_cm3.h
,如图1-16
,为了方便下一次使用,我们将库函数里面的core_cm3.h
存放到安装路径下面和stm32f10x.h
相同的文件夹里面,G:\Program Files\MDK521\ARM\PACK\Keil\STM32F1xx_DFP\2.1.0\Device\Include
这个路径根据安装MDK
的路径不同而改变,如图1-17
:
图
1-16
错误提示
图
1-17
拷贝
core_cm3.h
然后在次编译,查看报错信息,如图1-18
,知道在.s
文件里调用了SystemInit
函数,但是并没有发现函数的定义。所以我们修改.s
文件,如图1-19
、1-20
:
图
1-18
报错信息
图1-19 startup_stm32f10x_hd.s
文件修改前
图1-20 startup_stm32f10x_hd.s
修改后
再次编译没有错误,至此我们的工程新建完毕。
[Ecube1]
哈佛结构:
将程序指令存储和数据指令存储分开的处理器结构,执行效率较高,哈佛结构的计算机有CPU
、程序存储器和数据存储器,有较高的数字信号处理能力;另外一种是冯·
诺依曼结构(
普林斯顿结构
),它是将程序和数据存储在一起,程序指令存储地址和数据存储地址指向同一存储器的不同物理地址。
|