网上搜索了一些方法,汇总了下,挑选了一个可行的写出来,如下。
1、新建工程!Project → New uVision Project,保存。
2、选择芯片型号!。这里用:STM32F103C8。
3、提示是否拷贝,选择否!
4、新建文件夹!在工程文件根目录下新建几个文件夹:User、CMSIS、Lib、Obj、List(这里是为了养成良好的习惯!)User放置用户代码;CMSIS放置固件库的启动文件,Lib放置库文件
PS:普及(CMSIS:Cortex Microcontroller Software Interface Standard,是 ARM Cortex 微控制器软件接口标准,是ARM公司为芯片厂商提供的一套通用的且独立于芯片厂商的处理器软件接口。)
5、拷贝!把固件库的Libraries \ STM32F10x_StdPeriph_Driver目录下的inc和src这两个文件夹复制到刚才新建的Lib文件夹中。
将固件库的Libraries \ CMSIS \ Core \ CM3文件夹下的全部文件复制到刚才新建的CMSIS文件夹中,Startup / arm目录下一般有三个启动文件,分别为,startup_stm32f10x_ld.s,startup_stm32f10x_md.s,
startup_stm32f10x_hd.s,按顺序是小,中,大容量Flash单片机的启动文件。我们这里用的是
STM32F103C8有128 K Flash。所以,稍后,把startup_stm32f10x_md.s添加到我们的工程中。不同大小的Flash对应的启动文件不同,这点要注意。
最后,用户的代码(例如main.c)都放在User文件夹下。
6、建组!鼠标右击“Target1”→Manage Componets,弹出如下的对话框,在中间列依次建立:CMSIS、Lib、User文件夹,将原有的Source Group1改为startup,并在最右列依次添加所需要的文件。
Startup中startup_stm32f10x_md.s文件,在USER组里添加main.c,stm32f10x_it.c这两个文件,在FWlib组里面添加src里面的全部驱动文件。
PS:src里面的驱动文件,也可以需要哪个就添加哪个,这里全部添加,是为了后续开发的方便。并且,我们可以通过配置stm32f10x_conf.h文件来选择性添加,只有在stm32f10x_conf.h中被配置的文件才会被编译。
PS:注意,在组里面添加的,都是汇编文件和C文件 ( 即,以 .s和 .c为后缀的文件 ),即,都是源程序文件 ( 可能还有其它类型的文件,但是,都必须是源程序文件 ),并且,一般地,所有源程序文件都必须添加到组里面才行。但是,头文件是不需要添加到组里面的。
7、设置!右键“Target1”→Options For Target “Target1”,弹出下面的对话框。
①点击“Output”选项卡,点击“Select Folder for Objects”按钮,可以为编译时产生的输出文件,设置一个文件夹“Obj”,把这些输出文件都输出到该文件夹下。还可以把“Creat HEX File”选项框勾上,这样,就可以在编译时,输出16进制的可执行文件了。
②点击“Listing”选项卡,点击“Select Folder for Listings”按钮,可以为编译时产生的链接文件,设置一个文件夹“List”,把这些链接文件都输出到该文件夹下。
③点击“C / C++”选项卡,这里有两个设置很重要 (“Define”和“Include Paths”,如下图 ),设置不对,编译会出很多错误。另外,下图中的“One ELF Section per function”一般要选上。
Define是设置,预定义符号,在这里定义符号,相当于在程序文件中使用 #define 语句定义符号。这里一般要填入以下内容:USE_STDPERIPH_DRIVER, STM32F10X_HD, USE_STM3210E_EVAL其中,定义了USE_STDPERIPH_DRIVER就可以使用,标准外设驱动。定义了STM32F10X_HD,就可以对固件库进行条件编译。定义了USE_STM3210E_EVAL,就可以使用ST公司的官方评估板作为硬件来下载,调试程序,这个宏,一般可以不定义,因为我们很少使用ST公司的官方评估板。
PS:注意:定义STM32F10X_HD,是因为我们用的芯片是大容量的。添加了STM32F10X_MD这个宏以后,库文件里面为大容量芯片定义的寄存器,我们都可以使用了。芯片是小容量,或者,中容量时,宏要换成,STM32F10X_LD或者STM32F10X_HD。其实,不管什么容量,我们只要添加STM32F10X_HD这个宏即可。当我们用小,或者,中容量的芯片时,那些为大容量定义的寄存器,不去访问就是了,反正,也访问不了。
Include Paths是设置,头文件的搜索路径的。我们的工程中,用到的头文件在哪个路径,就把该路径添加进来。有时,也可以根据编译错误,发现哪些头文件,编译器找不到,再把这些头文件的路径添加进来。一般要填入的路径有以下一些,每个不同的路径以分号间隔:“ ..\ ”表示工程根目录。
例如:..\..\..\Libraries\STM32F10x_StdPeriph_Driver\inc;这里主要有几个必须要添加,一是inc的库,也就是头文件库;二是CMSIS的路径必须要添加!
PS:注意:因为编译器不会自动搜索指定目录的子文件夹,所以每个路径都要添加,就算,路径1是路径2的子目录,路径1和路径2都必须同时添加,才行。 在添加目录时要注意,在下图界面下,必须把蓝色条移到最后的空白处,再点击“OK”,最后一个路径才能被添加成功,否则,最后一个路径会丢失。
④点击“Debug”选项卡,选中左边的Use Simulator,就是使用软件仿真模式调试,选中右边的Use,就是使用硬件仿真,调试。由于我们多使用开发板加J-Link调试,所以选中“Cortex–M / R J-LINK / J-Trace”项,其它选项,默认即可。如下图。
⑤点击“Utilities”,选中“Use Target Driver for Flash Programming”,在它下面选择“Cortex–M / R J-LINK / J-Trace”项。其它设置,默认即可。如下图。
⑥在上图的界面中,点击“Settings”按钮,弹出下面的对话框,添加Flash。如果,已经有Flash了,就不用添加了,如果没有的话,就一定要添加Flash,否则,无法下载程序到开发板。
编译即可
PS:main.c中的头文件需要引用。例如:#include "stm32f10x_gpio.h"、#include "stm32f10x_rcc.h"等
仿真器的接口
流行的是JTAG/SWD
仿真器端口 连接目标板 备注
1. VCC MCU电源VCC VCC
2. VCC MCU电源VCC VCC
3. TRST TRST Test ReSeT/ pin
4. GND GND或悬空
5. TDI TDI Test Data In pin
6. GND GND或悬空
7. TMS, SWIO TMS, SWIO JTAG:Test Mode State pin ; SWD: Data I/O pin
8. GND GND或悬空
9. TCLK, SWCLK TMS, SWCLK JTAG: Test Clock pin ; SWD: Clock pin
10. GND GND或悬空
11. RTCK RTCK
12. GND GND或悬空
13. TDO TDO Test Data Out pin
14. GND GND或悬空
15. RESET RESET RSTIN pin
16. GND GND或悬空
17. NC NC
18. GND GND或悬空
19. NC NC
20. GND GND或悬空
下面是标准的接口排列:
ST-Link/V2 JTA/SWD接口是如何定义的?
下面为ST-Link/V2 JTAG/SWD接口定义:
仿真器端口 连接目标板 功能
1. TVCC MCU电源VCC 连接STM32目标板的电源VCC
2. TVCC MCU电源VCC 连接STM32目标板的电源VCC
3. TRST GND GROUND
4. UART-RX GND GROUND
5. TDI TDI 连接STM32的JTAG TDI
6. UART-TX GND GROUND
7. TMS, SWIO TMS, SWIO 连接STM32的JTAG的TMS, SWD的SW IO
8. BOOT0 GND GROUND
9. TCK, SWCLK TCK, SWCLK 连接STM32的JTAG的TCK, SWD的SW CLK
10. SWIM GND GROUND
11. NC NC Unused
12. GND GND GROUND
13. TDO TDO 连接STM32的JTAG TDO
14. SWIM-RST GND GROUND
15. STM32-RESET RESET 连接STM32目标板的RESET端口
16. KEY NC GROUND
17. NC NC Unused
18. GND GND GROUND
19. VDD NC VDD (3.3V)
20. GND GND GROUND
下面是ST-Link/V2 JTAG/SWD标准的接口排列:
STM32F10X手册中要求的JTAG/SWD接法:
|