寫的第一個STM32程序,花了兩天時間,最終還是蠻有成就感的
分享出來供大家一起學習,有好的優化建議還請不吝賜教
連接 RGB LED模塊,使得該模塊能夠依次顯示 7 種顏色的光,並且可以循環顯示。
注意:添加一個 RGBLED.c 和 RGBLED.h 文件
RGBLED.h 文件裏面,對 RGBLED 使用的引腳和端口進行宏定義
RGBLED.c 文件裏面,設計一個 RGBLED_Init 函數,一個 RGBLED_Display(顏色值)
函數
RGBLED.h
#ifndef __RGBLED_H
#define __RGBLED_H
#include "sys.h"
#define R PEout(7)
#define G PEout(8)
#define B PEout(9)
#define RED 1
#define GREEN 2
#define BLUE 3
#define YELLOW 4
#define NAVY 5
#define PURPLE 6
#define WHITE 7
void RGBLED_Init(void);
void RGBLED_Display(u8 colour, int state);
#endif
#include "RGBLED.h"
//LED IO初始化
void RGBLED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能PB端口時鐘
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推輓輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度爲50MHz
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //R-->PE.7 端口配置
GPIO_Init(GPIOE, &GPIO_InitStructure); //根據設定參數初始化GPIOE.7
GPIO_SetBits(GPIOE,GPIO_Pin_7); //PE.7 輸出高
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //G-->PE.8 端口配置, 推輓輸出
GPIO_Init(GPIOE, &GPIO_InitStructure); //推輓輸出 ,IO口速度爲50MHz
GPIO_SetBits(GPIOE,GPIO_Pin_8); //PE.8 輸出高
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //B-->PE.9 端口配置, 推輓輸出
GPIO_Init(GPIOE, &GPIO_InitStructure); //推輓輸出 ,IO口速度爲50MHz
GPIO_SetBits(GPIOE,GPIO_Pin_9); //PE.9 輸出高
}
RGBLED.c
void RGBLED_Display(u8 colour, int state) //state = 1;表示燈亮,state = 0;表示燈滅
{
switch(colour){
case RED:
if(state){
R = 0; G = 1; B = 1;
}
else{
R = 1; G = 0; B = 0;
}
break;
case GREEN:
if(state){
R = 1; G = 0; B = 1;
}
else{
R = 0; G = 1; B = 0;
}
break;
case BLUE:
if(state){
R = 1; G = 1; B = 0;
}
else {
R = 0; G = 0; B = 1;
}
break;
case YELLOW:
if(state){
R = 0; G = 0; B = 1;
}
else{
R = 1; G = 1; B = 0;
}
break;
case NAVY:
if(state){
R = 1; G = 0; B = 0;
}
else{
R = 0; G = 1; B = 1;
}
break;
case PURPLE:
if(state){
R = 0; G = 1; B = 0;
}
else{
R = 1; G = 0; B = 1;
}
break;
case WHITE:
if(state){
R = 0; G = 0; B = 0;
}
else{
R = 1; G = 1; B = 1;
}
break;
default:
break;
}
}
後邊會設計利用按鍵矩陣來控制小燈的亮滅,在這利用state實現,不需要這一功能的朋友自行去除