STM32新建固件库工程模板(并点亮LED灯)

STM32新建工程模板


本文来自于《STM32——江科大》的笔记整理。


1. STM32新建工程模板

首先现在网上下载固件库STM32F10x_StdPeriph_Lib_V3.5.0
也可以通过我的百度网盘
链接:https://pan.baidu.com/s/10_YqJh1yriPuYIPDxoXUxA?pwd=1234
提取码:1234
–来自百度网盘超级会员V2的分享

1.1基于寄存器开发的工程

在工程文件夹新建一个文件夹Start

粘贴固件库中F:\STM32Project\固件库STM32F10x_StdPeriph_Lib_V3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm

中的所有文件
在这里插入图片描述

粘贴固件库中F:\STM32Project\固件库STM32F10x_StdPeriph_Lib_V3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x 路径下的

粘贴固件库中F:\STM32Project\固件库STM32F10x_StdPeriph_Lib_V3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\CoreSupport 路径下的

在这里插入图片描述

最终的Start文件夹

在这里插入图片描述

将刚才我们复制的文件添加到工程里来(小钥匙代表是只读文件)

紧接着点开魔术棒按钮,打开工程选项,在C/C++里,找到这个Include Pashs栏,然后点击右边三个点的按钮

在这里插入图片描述

在这个新建新建路径,然后再点三个点的按钮,把Start的路径添加进来

在这里插入图片描述

接下来我们新建一个main函数,看看这个刚才是不是可行,这里我们在创建一个名为User的文件夹,用来存放我们的函数(这里就不在赘述,和上面一样,给工程目录里面创建一个User,在再项目中新添加一个组名为User,在里面创建main.c)

在这里插入图片描述

现在就可以编译工程,0错误0警告,那就说明我们建的工程是没问题的

在这里插入图片描述

如何配置寄存器进行点灯的操作(PC13口)

因为GPIO都是APB2的外设,所有在这个APB外设时钟使能寄存器RCC_APB2ENR里面配置

因为我们操作的PC13口

配置第一个寄存器(RCC_APB2RSTR)

在这里插入图片描述

在这里插入图片描述

然后第二个寄存器(GPIOx_CRH),我们需要配置一下PC13口的模式(其余位置配置0)

这样整个寄存器的值换算成16进制就是00300000

在这里插入图片描述

接下来可以给PC13口输出数据,这个端口输出数据寄存器GPIOx_ODR

在这里插入图片描述

代码:

PC13口的灯,是低电平点亮

#include "stm32f10x.h"                  // Device header

int main()
{
	RCC->APB2ENR=0x00000010;//打开GPIOC的时钟
	GPIOC->CRH =0x00300000;//这里写上GPIO的CRH=0x00300000;
	GPIOC->ODR =0x00000000;//PC13口,低电平,点亮
	GPIOC->ODR =0x00002000;//PC13口,高电平,灭

	while(1)
	{
		
	}
}

图片:

总结:

为了配置PC13口,从而影响了其他端口的原有配置,如果要做到只配置PC13而不影响其他位,那还需要 **&=,|=**的操作,这样配置只会更加麻烦,所以这种寄存器的操作方式,虽然代码简洁,但是还是不太方便,接下来我们为这个工程引入库函数了

1.2基于库函数开发的工程

打开工程文件夹,新建一个文件夹,叫Library,用来存放库函数。

接着,打开固件库的文件夹F:\STM32Project\固件库STM32F10x_StdPeriph_Lib_V3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\src 全部复制到新建的Library文件夹中

在这里插入图片描述

然后在打开F:\STM32Project\固件库STM32F10x_StdPeriph_Lib_V3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\STM32F10x_StdPeriph_Driver\inc 全部复制到新建的Library文件夹中

同样在项目中新添加一个组名为Library,在右键添加已经存在的文件,打开Library,Ctrl+A,Add

在这里插入图片描述

但对于这个库函数来说,现在还不能直接使用,我们需要再添加一个文件

打开固件库文件夹 F:\STM32Project\固件库STM32F10x_StdPeriph_Lib_V3.5.0\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template 复制到User文件夹里面,在再回到Keil软件在User组里面添加这三个文件

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

最后还需要一个宏定义,打开头文件stm32f10x.h

找到USE_STDPERIPH_DRIVER

在这里插入图片描述

如果定义了USE_STDPERIPH_DRIVER这个字符串,下面的include conf.h语句才有效

点击魔法棒,在C/C++的Define栏目粘贴这个字符串,这样才能包含标准外设库,也就是库函数

这样,我们基于库函数的工程就建好了,进行编译,第一次可能会有点慢,0错误,0警告,说明我们的工程建立是成功的

现在我们使用库函数点灯(这里我们交给大家的是方法如何使用库函数,如果填参,保证会一种函数的使用,就要会所有的函数使用)

**第一步:**首先就是开启使能时钟,有一函数RCC_APB2PeriphClockCmd(第一次记住就行)

在这里插入图片描述

第一个参数是选择外设,第二个参数是选择新的状态。

我们可以右键,跳到函数的定义,这上面有函数的简介和参数说明

在这里插入图片描述

我们可以使用有道字典来进行划词翻译

在这里插入图片描述

我们可以看一下这个函数

在这里插入图片描述

它的内部还是配置RCC_APB2ENR这个寄存器,但是经过函数的包装,我们不需要去查手册,来确认哪一位是干啥的了,而且这里它已经帮我们用 |=和 &=来操作了,所有这个库函数的配置,是不会影响到寄存器的其他位的

**第二步:**配置端口模式,我们需要用到GPIO_Init这个函数,两个参数,第一个参数是选择那个GPIO,第二个参数的结构体(这个可能会麻烦一点,但是也是一个套路,根据提示配置参数即可)

这里使用了结构体来配置参数,代码逻辑是有一些复杂的,之后的笔记会讲,先跟着操作

在这里插入图片描述

进入到结构体参数中

在这里插入图片描述

右边是,这个参数可以是GPIOMode_TypeDef里面的一个值,因为是注释所以无法跳转,这里我们进行搜索

在这里插入图片描述

我们选用GPIO_Mode_Out_PP,这个是通用推挽输出

我们跳转该函数GPIO_Pin时会出现

和刚才一样全局搜索GPIO_pins_define

在这里插入图片描述

在这里插入图片描述

第三个函数,同理,这里就不在赘述了

代码:

#include "stm32f10x.h"                  // Device header

int main()
{
//	RCC->APB2ENR=0x00000010;//打开GPIOC的时钟
//	GPIOC->CRH =0x00300000;//这里写上GPIO的CRH=0x00300000;
//	GPIOC->ODR =0x00000000;//PC13口,低电平,点亮
//	GPIOC->ODR =0x00002000;//PC13口,高电平,灭

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//配置使能时钟
GPIO_InitTypeDef GPIO_InitStructure;//写上结构体的类型,名称根据官方推荐(GPIO_InitStructure)
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//配置输出模式
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;//配置端口
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//配置输出速度
//配置端口模式
GPIO_Init(GPIOC, &GPIO_InitStructure);//&GPIO_InitStructure传递结构体的地址
GPIO_SetBits(GPIOC,GPIO_Pin_13);//设置高电平
GPIO_ResetBits(GPIOC,GPIO_Pin_13);//设置低电平
	
	while(1)
	{
		
	}
}

补充:

-新建工程里的启动文件选择,我们新建工程第一个加到就是启动文件,启动文件有很多类型,至于选择哪一个,我们要根据芯片型号来选择

在这里插入图片描述

在这里插入图片描述

建立工程文件夹,Keil中新建工程,选择型号
工程文件夹里建立Start、Library、User等文件夹,复制固件库里面的文件到工程文件夹
工程里对应建立Start、Library、User等同名称的分组,然后将文件夹内的文件添加到工程分组里
工程选项,C/C++,Include Paths内声明所有包含头文件的文件夹
工程选项,C/C++,Define内定义USE_STDPERIPH_DRIVER
工程选项,Debug,下拉列表选择对应调试器,Settings,Flash Download里勾选Reset and Run

在这里插入图片描述

百度网盘

链接:链接:https://pan.baidu.com/s/1i5WMc_SNW49EZPedhWeXew?pwd=1234
提取码:1234
–来自百度网盘超级会员V2的分享

关注收藏不迷路


给那些看完的朋友,奖励一个 赤赤博客-后端+前端,觉得不错的话可以推荐给身边的朋友哟!
在这里插入图片描述


  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安赫'

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值