引言
點亮LED實際上是為了學習如何配置IO口使其輸出高低電平。這一節的內容相當於學習C/C++時的hello world!
。
准備環節
在keil5工程根目錄新建文件夾HARDWARE
。在新建的文件夾中新建文件 led.h
和 led.c
。
同時需要將上述文件以及相應的FWLib下的文件加入工程,這里不再贅述。
根目錄下各文件的調用關系如下:
# 編碼
步驟:
- 使能所在總線的時鍾
- 配置IO口信息
- 初始化IO口
- main函數內調用
led.h
#ifndef __LED_H
#define __LED_H
#include "sys.h"
#define LED0 PEout(5)// PE5
#define LED1 PEout(6)// PE6 這兩行均為位帶操作,這里不再展開
void LED_Init(void); //聲明LED的初始化操作
#endif
led.c
#include "led.h"
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //定義IO口配置信息的結構體
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE); //初始化所在總線的時鍾
//以下三行為IO口配置信息
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6; //IO口位置信息
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //IO口輸出模式 輸出模式詳見最后補充
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口輸出速度
GPIO_Init(GPIOE, &GPIO_InitStructure); //利用上述信息初始化IO口
GPIO_SetBits(GPIOE, GPIO_Pin_5);
GPIO_SetBits(GPIOE, GPIO_Pin_6); //點亮相應IO口的LED
// GPIO_ResetBits(GPIOB, GPIO_Pin_5); 該函數可以熄滅相應IO口的LED
}
main.c
#include "led.h"
#include "delay.h" //提供了相關的延時函數
int main(void){
delay_init(); //延時函數初始化
LED_Init(); //led.c內編寫的該函數
while(1){ //while內的函數實現了每隔300ms改變一次兩LED的亮滅狀態
LED0 = 1;
LED1 = 1;
delay_ms(300);
LED0 = 0;
LED1 = 0;
delay_ms(300);
}
}
補充
GPIO口的八種輸入輸出模式見如下鏈接:\(\color{#0000FF}{https://www.cnblogs.com/Rane/p/11829471.html}\)