STM32准备工作【Keil配置、keil模板建立、ST-Link V2下载配置】
2017年03月02日 10:26:23 o0卤化氢0o 阅读数:12011
转载: https://blog.csdn.net/zeroice7/article/details/59483155
版权声明: https://blog.csdn.net/zeroice7/article/details/59483155
0.STM32编程准备工作
名称 :ST-Link V2 连接、Keil配置、文件模板建立 ;
作者 :卤化氢
日期 :2017/2/9
编程环境 :Win10 64位,Keil 5.11,ST外设库版本:3.5.0;
【第一次写博,而且刚刚接触STM32,有不对的地方希望大家指出。】
下载安装 ST-Link V2 驱动后(没有的话可以找*宝店家直接要);
1. 连接 ST-Link V2 与 STM32
首先你的下载器要是这个样子的:
然后就可以按照下面接口对应设置:
如图对应连接引脚(连接任一同名称引脚即可):
ST-Link V2 | STM32 |
5V | TVCC |
GND | GND |
SWDIO/SWIO | SWIO |
SWCLK | SWCLK |
2. 准备工作需要安装ARM.CMSIS.与 Keil.STM32F1xx_DFP
这两个文件是用于Keil 5中开发STM32用的,CMSIS是一种接口标准(这个是必须要装的) Keil.STM32F1xx_DFP是keil5固件库包,用于STM32的开发文件。
(文件辛苦大家自己找一下,怕被和谐掉。)
3. 建立工程文件模板(Demo文件)
以后建立工程文件直接复制Demo文件的模板,在模板上编辑项目,不需要反复配置。
首先新建一个文件夹,命名为“Demo”。
再需要在ST官网上下载 “STM32F10x_StdPeriph_Lib” 文件:
(进入ST官网:http://www.st.com/content/st_com/en.html)
1:如图【Products】 -> 【Microcontroller】 -> 【Tool&Software】 ->
【STM32Standard Peripheral Libraries】-> 选择合适的下载 此处为STM32F10X系列
下载下来的“STM32F10x_StdPeriph_Lib_V3.5.0”解压后,我们把“Libraries”复制到“Demo”文件夹中。再在“Demo”文件夹中建立四个空文件夹待用,命名如下图:
将刚解压文件夹“STM32F10x_StdPeriph_Lib”中【Project】 -> 【Template】的Main.c、stm32f10x_it.c 、stm32f10x_cong.h、stm32f10x_it.c、stm32f10xit.h、五个文件复制到“User”文件夹下。
“User”文件夹用于存放用户自定义子程序;
“Project”文件夹用于存放建立工程时的相关文件;
“Obj”文件用于存放编译时产生的对象文件;
“List”用于存放编译时产生的List文件和Map文件;
“Libraries”为库函数文件。
4. 建立工程
1:建立新工程
打开Keil 5,选择【Project】 -> 【New μVision Project】
建立工程,保存在【Demo】文件的【Project】下,然后选择CPU型号,UP主的是F103RC。
若询问是否自动复制MDK自带的启动代码,选择否即可。
2:进行选项设置
调出【ManageProject Items】,
弹出【ManageProject Items】窗口,对其进行编辑。
改 “ProjectTagets“ 为 “STM32F103RCT6 Flash”,并添加四个分组,分别为User、Lib、CMSIS、Startup,如下图所示:
3:在“User“中添加用户的相应文件
在“Group”中选中“User”,并在“User”中添加一些用户文件。
在“Files”中单机“Add Files”,选择路径找到前面“Demo”文件夹中的“User”,
添加其中的“main.c”与“stm32f10x.c”,如下图所示。
4:在“Lib”中添加库文件
选中“Lib“添加库文件,找到文件路径:【Demo】 -> 【Libraries】 -> 【STM32F10x_StdPeriph_Driver】 -> 【src】在其中依次添加需要的调用库文件,若初学者不熟悉哪些库文件可以全部添加。
5:在CMSIS添加STM32F的内核相关文件
选中“CMSIS“添加STM32F的内核相关文件,
按路径 【Libraries】 -> 【CMSIS】 ->【CM3】 -> 【CoreSupport】文件下添加”cpre_cm3.c“;
按路径 【Libraries】 -> 【CMSIS】 ->【CM3】 -> 【DeviceSupport】 -> 【ST】 -> 【STM32F10x】文件下添加”system_stm32f10x.c”。
添加后如图所示:
6:添加启动文件
单机“Startup“添加启动文件,按路径【Libraries】 -> 【CMSIS】 -> 【CM3】 -> 【DeviceSupport】 -> 【ST】 -> 【STM32F10x】 -> 【startup】-> 【arm】
由于STM32F103RCT6属于大容量的Flash(256KB),所以在此添加文件“startup_stm32f10x_hd.s“,
若Flash为中容量(128KB或64KB)则添加“startup_stm32f10x_md.s“,
添加后启动文件夹后的界面如下。
7:设置好Components的界面
点击OK按钮,即可发现在Project中多出一些文件目录:
点击“编译“按钮,出错了的话暂且不用管它。
5. 进行工程的相关设置
1:Target选项设置
点击工程设置按钮【Options for Target】,
出现设置界面
2:产生HEX文件
点击【Output】选项卡,按下图生成HEX文件
3:选中目标文件(Obj)输出文件夹路径
按下图,选中目标文件(Obj)输出文件夹路径。
4:选择列表输出的文件夹路径
选择列表文件座位输出文件路径。
5:C/C++选项卡设置
选中C/C++选项卡,在Define文本框中输入”USE_STDPERIPH_DRIVER,STM32F10X_HD”,如图:
“USE_STDPERIPH_DRIVE“定义使用外设库,定义此项会包含 *_conf.h 文件,从而使用外设库。
“STM32F10X_HD“对应启动文件startup_stm32f10x_hd.s,即大容量的Flash。
6:添加*.h文件路径
添加所有要用到的 *.h 头文件路径,否则会出现找不到头文件的错误报警,如图。
7:添加路径【Libraries】 -> ……
添加路径 【Libraries】 -> 【STM32F10x_StdPeriph_Driver】 -> 【inc】
添加路径 【Libraries】 -> 【CMSIS】 -> 【CM3】
添加后的路径如图所示,点击OK即可:
这样一个工程的模板就做好了,
6. 建立一个成功编译的文件
将“Demo”文件复制出来,改名为“LedText”并把以下代码替换main.c的代码
(以后建立新工程时均将模板文件的“Main.c”文件内容替换即可)
#include "stm32f10x.h"
#include "stm32f10x_conf.h"
void delay_us ( unsigned int us )
{
unsigned char n;
while( us-- )
for( n=0;n<9; n++ );
}
void delay_ms ( unsigned int ms )
{
while( ms-- )
delay_us(1000);
}
void GPIO_Configuration( void )
{
GPIO_InitType DefGPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );
GPIO_InitStructure.GPIO_Pin= GPIO_Pin_1|GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
GPIO_Init( GPIOA,&GPIO_InitStructure );
GPIO_InitStructure.GPIO_Pin= GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
}
int main( void )
{
/*System ClocksConfiguration **************************************/
SystemInit();
GPIO_Configuration();
for( ;; )
{
GPIO_SetBits(GPIOA,GPIO_Pin_1); //PA1 = 1
GPIO_SetBits(GPIOA,GPIO_Pin_2); //PA2 = 1
GPIO_SetBits(GPIOB,GPIO_Pin_1); //PB1 = 1
delay_ms(1);
GPIO_ResetBits(GPIOA,GPIO_Pin_1); //PA1 = 0
GPIO_ResetBits(GPIOA,GPIO_Pin_2); //PA2 = 0
GPIO_ResetBits(GPIOB,GPIO_Pin_1); //PB1 = 0
delay_ms(1);
}
}
结果编译成功,但注意,程序中会出现一个警告提示,虽然警告不会对程序编译有影响,但警告是程序中的潜在错误,有警告错误的时候要尽可能地解决掉。
如图我们看到下面的对话框,会提示出“#1-D: last line of file ends withouta newline “
这句话会提示出在main函数后的括号需要加入空行,解决方法即在main函数的结尾括号“ }“后面加入空行即可。
建立工程时还需要注意,每在“Lib”中添加一个 “*.c”文件,就需要在“stm32f10x_conf.h”中使能相应的“*.h”文件,这里3.5版本的库已经省略了这一步,需要注意的是要在文件一开始包含”stm32f10x_conf.h”文件。
7. 用ST-Link V2下载文件
点击进入【Option for Target】设置
如图进行“步骤4”后,进入“Setting”设置,如下:
下载时,UP主出现了这样的问题,如下图所示:
出现这样的问题是因为UP使用的Keil版本是5.11,这里在使用ST-Link V2下载时有一个Bug,Keil也给出了官方的解决方法(http://www.keil.com/support/docs/3662.htm),解决方法如下:
进入keil的安装目录 【ARM】 -> 【ST-LINK】 打开“ST-LinkUpgrade.exe“会出现ST-LINK的升级工具,
升级过后问题就解决了(如果提示无法与硬件连接,重新插拔ST-LINK)。
出现如下图红框中显示的内容时,即说明连接正常,可以正常下载。
点击图中“LOAD”下载图标,则下载成功。
补充遇到问题与解决方法:
1:在复制到Keil中的代码,中文注释出现乱码的情况如何解决?
这种问题是文本编码的问题,解决方法如下: 【Edit】 ->【Configuration】
如下图进行设置【Editor】->【Encoding】->【Chinese****(Simplified)】: