文章目录
记录使用固件库编程
一、配置文件
创建一个文件夹,然后在文件夹里面创建四个文件
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文件,因为是固件库,所以比较麻烦的是找库。
还是按照步骤来:
- 打开时钟,我们还是控制PB0,也就是板子上的绿色灯。
- 配置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;
}
编译、下载、复位板子上的灯就亮了。