工程模板以及点灯源代码在以下链接中,诸位先下载解压。

链接:https://pan.baidu.com/s/1JmHzZr5sD94D3vVA7YYq2Q 

提取码:0323

/****建立工程的几点教训。*****/

1.添加文件的时候要添加完全

2.在三个箱子里面可以快速添加

3.STLINK配置

image.png

4.添加路径以及写上这行话 USE_STDPERIPH_DRIVER

image.png

5.最后要留一个空白行

【Start文件初始化】

(工程模板中已经建好,以下是详细说明,可略过)

下载完成后,打开工程模板文件夹,电点击红色框Project进入keil5中进行编辑,该工程模板可以作为往后各个工程的初始模板,省去初始化的时间。但需要注意的是,对于不同型号的单片机,我们有一些文件的选择需要变动,这个在下文有详解。因此该工程模板仅适用于型号为STM32F103。Flash容量为64~128K的单片机。

image.png

我们点击目录中Start,可以看到Start文件夹下有诸多的文件,每个文件上方都有一个钥匙的小图标,意思是只读文件,其实在Start下的文件并不是固定不变的,我们需要根据需求来选择对应的文件,我们右键Start,选择ADD Existing Files to Group ‘Start’(添加存在的文件进入分组‘Start’),然后选择工程模板文件夹中的Start文件,文件类型选择所有文件,我们可以看到如下图所示

image.png

其中红色框为必选内容,蓝色框的选择则遵循如下表规则:

注意看蓝色框中文件名的后缀,可以与下表中的缩写相对应,而每一种则对应不同的单片机型号与闪存容量,根据我们要使用的单片机参数李艾选择对应的文件即可。(按住CTRL后再用鼠标左键选择则可以进行多选)

image.png

【main.c初始化】

(工程模板中已经建好,以下是详细说明,可略过)

我们编译程序基本都是在User文件夹中的main.c中进行,我们点击main.c进行编辑。

先右键选择insert ‘#include file’——>stm32F10x.h进行头文件编写

image.png

 然后输入代码行:

image.png

 编译运行即可。

【常用操作】

①导入新建文件夹

我们先打开工程模板的文件夹,在文件夹之中右键新建文件夹,重命名为相关名字以便管理,这里我姑且命名为example。

image.png

在打开工程模板进入keil5中,右键target1选择Add group,这是会出现一个名为new group的分组,我们左键重命名为刚才在工程模板文件夹中建立的文件夹。

image.pngimage.png

而后右键选择Add existing files……,再在目录中选择到刚才新建的文件夹example点击ADD即可。

在添加完成文件夹之后,注意要进行如下操作:

image.png

image.png

 而后在弹出的界面中寻找到刚才新建的文件夹选择添加即可。每一次在添加了新的文件夹之后都要进行这步操作,避免在工作时无法寻找到文件中的.h文件导致运行错误。

 通常我们只需要修改User中的文件即可满足大部分需求,因此我们为了方便管理文件,可以通过如下方式进行文件夹的换位:

2号框框中可以把文件拖动进行换位,一般我们把需要编辑的文件User放在最后。

image.png

 在编辑代码时,如果没有代码提示功能,可以通过如下路径更改:

image.png

 ②更改字体大小:

image.png

 ③常用设置

为了防止乱码,我们还需要进行如下123步的操作,其中4为调整缩进符号Tab的缩进位数。

image.png

image.png

image.png

【点灯】

步骤1:进行时钟配置

输入RCC_APB2PeriphClockCmd();

右键此函数,选择“Go To Definition Of ‘ RCC_APB2PeriphClockCmd’跳转到函数说明

image.png

 1为此函数的简介:使能或者不能高速时钟,2为第一个参数的说明:指定APB2外设门控时钟,可以选择@arg右侧所有参数之一。3为第二个参数说明:设置新的状态,使能(ENABLE)或者不能(DISABLE)。

我们暂且选用PC13口作为输出端口作为测试,因此第一个参数选用@arg中的RCC_APB2Periph_GPIOC,第二个参数选用ENABLE,即把GPIOC端口的时钟开启。

步骤2:端口模式配置

在工程代码中输入GPIO_Init();

依旧是右键跳转查看函数的使用方法。

image.png

方框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后面多加一个点“.”引出各种参数:

image.png

 我们先把他们一一选择,稍后再进行编辑:

image.png

 Mode:模式    Pin:引脚    Speed:速度

①对于Mode:我们右键选择跳转到函数的用法,稍微往上移动,我们可以看到如下方框中的信息,这些信息每一行代表着一种GPIO口的输出模式,我们选择推挽输出,即复制GPIO_Mode_Out_PP

 粘贴到main.c的配置信息中。

image.png

② 对于PIN:我们采取相同的操作,会发现并没有直接进入到函数介绍的界面,而是在左下角出现如下一个弹窗

image.png

 我们双击选择第二项。

image.png

选择GPIO_pins_define,再按Ctrl+F进行查找,弹出左侧界面后再点击Fine Next。

image.png

 我们可以看到一系列PIN脚的序号,我们根据需求选择,有序我们需要配置PC13,故而选择GPIO_Pin_13.复制后粘贴到我们的工程代码上面。

③对于speed:我们也进行相同的操作,右键speed进入函数说明,选择GPIOSpeed_TypeDef,按下Ctrl+F进行查找,弹出界面后按下Fine Next

image.png

 可以看到如下界面,我们复制 GPIO_speed 50MHZ,粘贴到工程speed那一栏。

image.png

最后我们会得到如下工程代码:

image.png

 其实第一项的查找也是可以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,连接单片机,我们编译后下载。(从左往右依次按下方框中的按键)

image.png

 这时你会看到我们单片机上的另外一个LED亮了,把代码换为第一行代码,编译运行后此LED熄灭。

————————————————

版权声明:本文为CSDN博主「笔下觅封侯」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/m0_63148816/article/details/125793678