stm32学习第三天


记录使用固件库编程

一、配置文件

创建一个文件夹,然后在文件夹里面创建四个文件
DOC:说明文档
Libraries:固件库,包括启动文件,外设外文
Project:工程文件,项目文件
User:应用程序,主函数中断等。

在这里插入图片描述
然后我们将Project这个文件里面拖到kile里面,并且将新建工程名一个名字
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
改成这样:
在这里插入图片描述
文件分别对应:
STARTUP:启动文件
CMSIS:内核配置文件
FWLIB:外设相关文件
USER:应用程序
DOC:说明文档

这是我这边的资料

https://pan.baidu.com/s/1gYFVkuGMpEk35gr0DwyixA
提取码:5z19

3.1配置文件

STARTUP:启动文件
在这里插入图片描述
CMSIS:在这里插入图片描述

FWLIB:所有在这里插入图片描述USE:
在这里插入图片描述

DOC:
在这里插入图片描述

这样基本的而配置就做好了

把f103x的路径添加进来

在这里插入图片描述
然后你需需要定义一个头文件,像这样:
在这里插入图片描述
再编译一次

在这里插入图片描述

下载到板子上,板子的灯就会熄灭。

二、固件库点灯

将之前的文件复制一份,然后在user里新增一个文件夹,名字叫LED,在里面创建两个文件 bsp_led.c 和 bsp_led.h
Projiect里面的项目,BD-F103.uvprojx 也就是这个文件。
进入到klie里面,然后编译一下
在这里插入图片描述

然后就能看到对应的.c文件。
然后我们开始写程序。
首先写bsp_led.c文件,因为是固件库,所以比较麻烦的是找库。
还是按照步骤来:

  1. 打开时钟,我们还是控制PB0,也就是板子上的绿色灯。
  2. 配置GPIB0的输入输出模式。

2.1 打开时钟

时钟是RCC,所以我们直接去找到f103rcc.h(相比较.c文件 .h文件可阅读性高一点)
在这里插入图片描述

/*打开时钟*/
//原型 RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);

这是时钟的一个封装函数,我们要修改参数的。
我们要控制APB2上的GPIOB,还是在刚才的rcc.h文件里面。
在这里插入图片描述后面的参数就是打开或者关闭时钟
在这里插入图片描述
当我们不知这个函数得到意思时候,我们就鼠标放在这个函数上,F12 今入这个函数里面查看,这里我们就知道了DISABLE (= 0 )就是关闭时钟,ENABLE就是打开,所以为我们时钟就配好了

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

2.2 配置寄存器

找到gpio.h
在这里插入图片描述

/*配置GPIO*/
//原型 GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

然后还是分析参数,第一个还是gpio口
第二个我们F12进入可以看到这是一个结构体
在这里插入图片描述

分别是gpio的端口,速度,模式。
所以我们需要自己定义一个结构体,初始化配置这个端口(我之前没遇到过,可能是我经验不够吧)。

GPIO_InitTypeDef LED_GPIO;  //定义结构体
//分别配置模式、端口、速度
GPIO_Init(GPIOB, &LED_GPIO);
LED_GPIO.GPIO_Mode  = GPIO_Mode_Out_PP;
LED_GPIO.GPIO_Pin   = GPIO_Pin_0;
LED_GPIO.GPIO_Speed = GPIO_Speed_50MHz;

2.3 配置输出低电平

在这里插入图片描述因为是GPIOB,端口是0,所以我们直接该一下就行

//配置输出低电平
//原型  void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

配置

GPIO_ResetBits(GPIOB,GPIO_Pin_0);	

2.4 完整的bsq_led.c文件

#include "bsp_led.h"
void LED_CONFIG(void)
{
		GPIO_InitTypeDef LED_GPIO;
		/*打开时钟*/
		//原型 RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
		RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
		/*配置GPIO*/
		//原型 GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

		LED_GPIO.GPIO_Mode  = GPIO_Mode_Out_PP;
		LED_GPIO.GPIO_Pin   = GPIO_Pin_0;
		LED_GPIO.GPIO_Speed = GPIO_Speed_50MHz;
		GPIO_Init(GPIOB, &LED_GPIO); //这句话一定要写在结构体后,不然点不亮。
		//输出低电平
		GPIO_ResetBits(GPIOB,GPIO_Pin_0);	
}

2.4 配置bsp_led.h文件

我们将.C文件的函数封装成一个函数在里面,我们在main.c里面就可以直接调用了,避免重复包含头文件,所以我们将stm32f10x,h这个头文件放在里面。

#ifndef _BSP_LED_H
#define _BSP_LED_H
#include "stm32f10x.h"
#endif
void LED_CONFIG(void);

2.5 配置main.c

#include "stm32f10x.h"    //默认是在当前文件夹
#include "bsp_led.h"

int main(void)
{
	LED_CONFIG();//调用函数就行
	return 0;
}

编译、下载、复位板子上的灯就亮了。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

永不秃头的程序员

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

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

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

打赏作者

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

抵扣说明:

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

余额充值