工程模板以及点灯源代码在以下链接中,诸位先下载解压。
链接:https://pan.baidu.com/s/1JmHzZr5sD94D3vVA7YYq2Q
提取码:0323
/****建立工程的几点教训。*****/
1.添加文件的时候要添加完全
2.在三个箱子里面可以快速添加
3.STLINK配置
4.添加路径以及写上这行话 USE_STDPERIPH_DRIVER
5.最后要留一个空白行
目录
【Start文件初始化】
(工程模板中已经建好,以下是详细说明,可略过)
下载完成后,打开工程模板文件夹,电点击红色框Project进入keil5中进行编辑,该工程模板可以作为往后各个工程的初始模板,省去初始化的时间。但需要注意的是,对于不同型号的单片机,我们有一些文件的选择需要变动,这个在下文有详解。因此该工程模板仅适用于型号为STM32F103。Flash容量为64~128K的单片机。
我们点击目录中Start,可以看到Start文件夹下有诸多的文件,每个文件上方都有一个钥匙的小图标,意思是只读文件,其实在Start下的文件并不是固定不变的,我们需要根据需求来选择对应的文件,我们右键Start,选择ADD Existing Files to Group ‘Start’(添加存在的文件进入分组‘Start’),然后选择工程模板文件夹中的Start文件,文件类型选择所有文件,我们可以看到如下图所示
其中红色框为必选内容,蓝色框的选择则遵循如下表规则:
注意看蓝色框中文件名的后缀,可以与下表中的缩写相对应,而每一种则对应不同的单片机型号与闪存容量,根据我们要使用的单片机参数李艾选择对应的文件即可。(按住CTRL后再用鼠标左键选择则可以进行多选)
缩写 | 释义 | Flash容量 | 型号 |
LD_VL | 小容量产品超值系列 | 16~32K | STM32F100 |
MD_VL | 中容量产品超值系列 | 64~128K | STM32F100 |
HD_VL | 大容量产品超值系列 | 256~512K | STM32F100 |
LD | 小容量产品 | 16~32K | STM32F101/102/103 |
MD | 中容量产品 | 64~128K | STM32F101/102/103 |
HD | 大容量产品 | 256~512K | STM32F101/102/103 |
XL | 加大容量产品 | 大于512K | STM32F101/102/103 |
CL | 互联型产品 | - | STM32F105/107 |
STMCU中文官网此网址可以下载相应的标准库!
【main.c初始化】
(工程模板中已经建好,以下是详细说明,可略过)
我们编译程序基本都是在User文件夹中的main.c中进行,我们点击main.c进行编辑。
先右键选择insert ‘#include file’——>stm32F10x.h进行头文件编写
然后输入代码行:
编译运行即可。
【常用操作】
①导入新建文件夹
我们先打开工程模板的文件夹,在文件夹之中右键新建文件夹,重命名为相关名字以便管理,这里我姑且命名为example。
在打开工程模板进入keil5中,右键target1选择Add group,这是会出现一个名为new group的分组,我们左键重命名为刚才在工程模板文件夹中建立的文件夹。
而后右键选择Add existing files......,再在目录中选择到刚才新建的文件夹example点击ADD即可。
在添加完成文件夹之后,注意要进行如下操作:
而后在弹出的界面中寻找到刚才新建的文件夹选择添加即可。每一次在添加了新的文件夹之后都要进行这步操作,避免在工作时无法寻找到文件中的.h文件导致运行错误。
通常我们只需要修改User中的文件即可满足大部分需求,因此我们为了方便管理文件,可以通过如下方式进行文件夹的换位:
2号框框中可以把文件拖动进行换位,一般我们把需要编辑的文件User放在最后。
在编辑代码时,如果没有代码提示功能,可以通过如下路径更改:
②更改字体大小:
③常用设置
为了防止乱码,我们还需要进行如下123步的操作,其中4为调整缩进符号Tab的缩进位数。
设置ST-LINK下载后,勾选Rset and run,作用是我们在下载完程序后会马上复位并且执行,不用再手动按下复位按钮。
【点灯】
步骤1:进行时钟配置
输入RCC_APB2PeriphClockCmd();
右键此函数,选择“Go To Definition Of ‘ RCC_APB2PeriphClockCmd’跳转到函数说明
1为此函数的简介:使能或者不能高速时钟,2为第一个参数的说明:指定APB2外设门控时钟,可以选择@arg右侧所有参数之一。3为第二个参数说明:设置新的状态,使能(ENABLE)或者不能(DISABLE)。
我们暂且选用PC13口作为输出端口作为测试,因此第一个参数选用@arg中的RCC_APB2Periph_GPIOC,第二个参数选用ENABLE,即把GPIOC端口的时钟开启。
步骤2:端口模式配置
在工程代码中输入GPIO_Init();
依旧是右键跳转查看函数的使用方法。
方框1简介:根据特定的GPIO_InitStruct中特定的参数配置GPIO口。
方框2:GPIO_Init();括号中的第一个参数,可以选择GPIOA~GPIOG。
方框3:GPIO_Init();括号中的第二个参数为GPIO_InitStruct:指向包含指定GPIO外设的配置信息GPIO_InitTypeDef结构体的指针。
我们选用的是PC13口,故而第一个参数自然选择GPIOC。
第二个参数要求是一个指向结构体的指针,这个指针要求包含GPIO口的一些相关信息。
故而括号中的第二个参数可以填写指向结构体GPIO_InitStruct的指针:&GPIO_InitStruct.
在此之前我们需要定义结构体GPIO_InitStruct,使用GPIO_InitTypeDef GPIO_InitStruct;进行定义。
再者,这个结构体需要包含一些相关的GPIO口信息,我们也需要进行配置。
使用GPIO_InitStruct后面多加一个点“.”引出各种参数:
我们先把他们一一选择,稍后再进行编辑:
Mode:模式 Pin:引脚 Speed:速度
①对于Mode:我们右键选择跳转到函数的用法,稍微往上移动,我们可以看到如下方框中的信息,这些信息每一行代表着一种GPIO口的输出模式,我们选择推挽输出,即复制GPIO_Mode_Out_PP
粘贴到main.c的配置信息中。
② 对于PIN:我们采取相同的操作,会发现并没有直接进入到函数介绍的界面,而是在左下角出现如下一个弹窗
我们双击选择第二项。
选择GPIO_pins_define,再按Ctrl+F进行查找,弹出左侧界面后再点击Fine Next。
我们可以看到一系列PIN脚的序号,我们根据需求选择,有序我们需要配置PC13,故而选择GPIO_Pin_13.复制后粘贴到我们的工程代码上面。
③对于speed:我们也进行相同的操作,右键speed进入函数说明,选择GPIOSpeed_TypeDef,按下Ctrl+F进行查找,弹出界面后按下Fine Next
可以看到如下界面,我们复制 GPIO_speed 50MHZ,粘贴到工程speed那一栏。
最后我们会得到如下工程代码:
其实第一项的查找也是可以Ctrl+F进行查找的,只不过他最终查找的结果离得比较近,就没必要多此一举。当然也可以直接右键选择Go To DeFination......,不过在注释中有时会失效,这时候就可以用Ctri+F的方法。
步骤3:控制端口的高低电平
介绍两个代码:
GPIO_SetBits(GPIOC,GPIO_Pin_13);
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
第一个的意思是把PC总线的第13号引脚设置为高电平,第二个的意思是把它设置为低电平,当然括号内的参数也可以按照需求改动,我们选用的是PC13号口,故而使用的是图中所示的参数。
我们把第二个代码输入我们的工程代码中,得到如下所示:
#include "stm32f10x.h" // Device header
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStruct);
GPIO_ResetBits(GPIOC,GPIO_Pin_13);
while (1)
{
}
}
插上ST-LINK,连接单片机,我们编译后下载。(从左往右依次按下方框中的按键)
这时你会看到我们单片机上的另外一个LED亮了,把代码换为第一行代码,编译运行后此LED熄灭。