DAY1 创建硬件驱动程序文件,模块化封装LED操作

  1. 项目文件夹根目录创建文件夹
  2. 点击三个箱子(项目工程管理Manage Project Items) 按钮,新建一个组Groups,手动输入文件夹名Hardware(注意:确保文件夹关闭,而且不是Headware) ,向上挪位
  3. 点击魔术棒 按钮,打开工程选项,选择C/C++ ,点击三个点按钮 ,把刚才新建的Hardware文件夹路径添加到头文件路径列表
  4. Keil右键创建新文件,创建".C文件",Hardware文件夹路径。 同时,创建".H文件"同理。
    1. ".C文件"第一行,右键插入include一个stm32f10x的头文件

      cpp 复制代码
      #include "stm32f10x.h"                  // Device header
    2. ".H文件"第一行,编辑一个防止头文件重复包含的代码

      cpp 复制代码
      #ifndef __LED_H                  // if不存在__LED_H这个字符串,那就创建一个
      #define __LED_H
      
      #endif

5.接下来,需要初始化PIN_1与PIN_2函数点亮PIN_1函数熄灭PIN_1函数

cpp 复制代码
#include "stm32f10x.h"                  // Device header

void LED_Init(void){
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	
	
	GPIO_SetBits(GPIOA,GPIO_Pin_1 | GPIO_Pin_2); // 初始化后,如果不操作,LED灯熄灭

}

void LED1_ON(void){
	GPIO_ResetBits(GPIOA,GPIO_Pin_1);
}

void LED1_OFF(void){
	GPIO_SetBits(GPIOA,GPIO_Pin_1);
}

void LED2_ON(void){
	GPIO_ResetBits(GPIOA,GPIO_Pin_1);
}

void LED2_OFF(void){
	GPIO_SetBits(GPIOA,GPIO_Pin_1);
}

cpp 复制代码
#ifndef __LED_H
#define __LED_H

void LED_Init(void);
void LED1_ON(void);
void LED1_OFF(void);
void LED2_ON(void);
void LED2_OFF(void);

#endif

注意:这个文本文件没有代码检测,中文分号不可Ctrl键+S保存,否则引用会报错找不到


cpp 复制代码
#include "stm32f10x.h"                  // Device header
#include "Delay.h"   
#include "LED.h"

int main(void)
{
	
	void LED_Init(void);
	
	while(1){
		void LED1_ON(void);
		Delay_ms(500);
		void LED1_OFF(void);
		void LED2_ON(void);
		void LED2_OFF(void);
		Delay_ms(500);
	
	}
}

注意:两个关键区分

  • 函数声明(只写类型 + 函数原型,不运行)void LED1_ON(void); 作用:仅给编译器识别函数存在,不会执行函数内部代码,LED 完全不会动作。
  • 函数调用(只写函数名 + 括号,真正执行)LED1_ON(); 作用:跳转到函数内部运行点亮 LED 的代码,硬件才有反应。