stm32构建自己的库函数

一、

void SystemInit()//不让系统报错
{
	
}

int main()
{
	//1、使能GPIOC时钟  寄存器起始地址0x4002 1000 + 偏移地址0x18
	*(unsigned int *) 0x40021018 |= 0x01 << 4;   //*(unsigned int *)先把十六进制数转化为指针(即一个地址),然后再取这个地址里面的内容,置1然后左移4位
	
	//2、配置GPIOC13为输出模式 寄存器起始地址0x4001 1000 + 偏移地址0x04
	*(unsigned int *) 0x40011004 |= 0x01 << 20;    //*(unsigned int *)先把十六进制数转化为指针(即一个地址),然后再取这个地址里面的内容,置1然后左移20位
	
	
	//3、配置GPIOC13输出低电平  寄存器起始地址0x4001 1000 + 偏移地址0Ch
	*(unsigned int *) 0x4001100c &=~ (0x01 << 13);   //*(unsigned int *)先把十六进制数转化为指针(即一个地址),然后再取这个地址里面的内容,置0然后左移13位
	
}

1、先在代码中确定头文件的名字

2、然后在项目工程目录中建立一个该名字命名的头文件3、然后在keil中编译一下就把头文件加进去了

 4、使用宏定义使写的代码可读性、移植性更强

 

二、如何自己构建库函数

1、首先需要准备好工程文件夹

Doc:有关工程的说明

 Libraries:启动文件及内核相关文件,外设驱动的.h及.c文件

 Project:工程文件存放的位置 

User:写应用程序的位置

 2、内部的工程文档:

STARTUP启动文件

USER应用程序

CMSIS内核配置相关

DOC说明文档

FWLIB外设相关配置

3、新建一个工程

选择芯片类型

 继续点击ok,然后添加工程文档

  找到所需配置文件,并双击添加

USER里面添加.c文件,添加完.c文件后编译一下就会自动添加.h文件

在库Libraries里面找到并添加内核配置文件 

 添加文档

把 外设相关文件全部添加到FWLIB

 完成所需配置文件的添加后,编译一下

发现有很多错误,这是因为,我们之前没有把头文件添加进去,这里头文件用的是“”是从工程project里面找头文件的,但是,有一些头文件并不在project里面

 这时,我们只需把用到的头文件的路径添加到此处就可以了

下面这个文件是还没有被定义的

 那么它在哪里呢?我们先把光标移至#include "stm32f10x.h",然后点击右键

 使用Ctrl+f查找

 ,然后编译,会自动把.文件添加到工程里面。并且编译无错误

三、固件库点灯

1、首先在USER里面新建一个led的文件夹,并在文件夹里面新建.c  .h文件

 2、把led.c  led.h添加到工程里

这时候只需要把头文件添加到led.c里面再编译一下就可以把led.h加到工程里面了

3.在led.c文件定义函数LED_Init,在led.h声明函数,在main.c调用函数

此时编译的话会出错,因为led.h在main找不到,此时要添加路径

 3.在led.c中写好函数LED_Init,在外设文件FWLIB中找时钟.c文件都是一些宏定义或者函数定义,在.h文件里面找声明在led.c使用就可以了

 函数的第一个参数是外设

 第二个参数是状态,不知道这个参数是什么类型可以go to去看看

由上面的图可以看出是一个枚举类型disable是0,enable是1。

结构体的配置也是一样,先找到对应的.h文件

结构体成员: 第一个是输出模式,第二个是速度,第三个是引脚

然后用下图的函数对GPIO进行初始化 

 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);第一个参数是要使用的GPIO口,第二个参数是结构体指针。

然后在mian.c程序里面使用函数拉低GPIO的电平

 第一个参数是要使用的GPIOC,第二个是用的是pin13

 

然后就可以编译了 ,并生成hex文件

 然后就可以通过FlyMcu烧录进去了。

四、延时函数的使用(LED灯的闪烁)

#include "stm32f10x.h"
#include "led.h"

void delay(uint16_t time)
{
	uint16_t i=0;
	while(time--)
	{
		i=12000;
		while(i--);
	}
}
int  main()
{
	
	
	LED_Init();
	
	while(1)
	{
		GPIO_ResetBits(GPIOC, GPIO_Pin_13);
		delay(1000);
		GPIO_SetBits(GPIOC, GPIO_Pin_13);
		delay(1000);
	}
	
	
}

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值