一、
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);
}
}