一、新建工程
拷贝新建工程的例程文件,并且在其中建立一个HARDWARE文件,然后再在HARDWARE下建立和硬件有关的文件夹,比如LED
,硬件文件夹下存放和硬件有关的操作的 **.c和 **.h文件。
二、编写led.c和led.h
1.添加库文件路径
注意每个要被引用的 ***.h 文件所在的文件目录都要被添加进编译器。
2.led.h的讲解
led.h
#ifndef __LED_H //==防止重复引用==
#define __LED_H
void LED_Init(void);//头文件中的函数声明
#endif
这个结构的使用可以参考视频:https://www.bilibili.com/video/BV1YG411u78U/?spm_id_from=333.337.search-card.all.click&vd_source=65053b31ff73956b86f95395fb66e917
#ifndef __LED_H //==防止重复引用==
#define __LED_H
#endif
__LED_H是一种规范化的写法,也可以不这么写,比如我可以写成小写的 __led_h
3.led.c的讲解
led.c
#include "led.h"
#include "stm32f10x.h"
void LED_Init()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD , ENABLE);//使能GPIOD
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);//使能GPIOA
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//设置为推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 ;//设置输出端口
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//设置端口翻转速率
GPIO_Init(GPIOD,&GPIO_InitStructure);//用以上参数对GPIOD进行初始化
GPIO_SetBits(GPIOD , GPIO_Pin_2 );//给GPIOD 的 pin2 赋初值
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_SetBits(GPIOA , GPIO_Pin_8);
}
led.c中是led的初始化函数LED_Init(),在这个函数中:
(1)首先创建了一个结构体,以方便后面的 GPIO_Init() 函数使用
(2)然后使用RCC_APB2PeriphClockCmd();
对所要使用的端口的时钟做初始化
(3)再对结构体中的成员赋值,最后使用GPIO_Init()
调用结构体对某个端口进行初始化GPIO_SetBits( )
是对某个端口赋上初值
以上是关于led.c的讲解
4.main.c的讲解
#include "led.h"
#include "delay.h"
#include "sys.h"
int main(void)
{
delay_init(); //延时函数初始化
LED_Init(); //初始化与LED连接的硬件接口
while(1)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_8); //LED0输出低
GPIO_SetBits(GPIOD,GPIO_Pin_2);//LED1输出高
delay_ms(300);
GPIO_SetBits(GPIOA,GPIO_Pin_8);//LED0输出高
GPIO_ResetBits(GPIOD,GPIO_Pin_2);//LED1输出低
delay_ms(300);
}
}
(1)main中一般都会包含这三个头文件
(2)注意main中首先要进行初始化才能调用相关的函数
(3)其他的看代码上的注释都很容易理解