- 项目文件夹根目录创建文件夹
- 点击三个箱子(项目工程管理Manage Project Items) 按钮,新建一个组Groups,手动输入文件夹名Hardware(注意:确保文件夹关闭,而且不是Headware) ,向上挪位置
- 点击魔术棒 按钮,打开工程选项,选择C/C++ ,点击三个点按钮 ,把刚才新建的Hardware文件夹路径添加到头文件路径列表。
- Keil右键创建新文件,创建".C文件",Hardware文件夹路径。 同时,创建".H文件"同理。
-
".C文件"第一行,右键插入include一个stm32f10x的头文件
cpp#include "stm32f10x.h" // Device header -
".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 的代码,硬件才有反应。