GPIO的使用:
1;开启相关GPIO的时钟
2;初始化相关GPIO的配置,IO引脚的模式,引脚选择,输出速率
3;查看相关硬件,看是高电平驱动外设,还是低电平;
程序:
初始化函数:
#include "rgb_drive.h"
void rgb_init(void)
{ GPIO_InitTypeDef RGB_GPIO_InitStruct; //GPIO结构体名称
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//开启GPIOB的时钟
RGB_GPIO_InitStruct.GPIO_Mode= GPIO_Mode_Out_PP;//GPIO模式选择
#if (R_LED==1)//条件编译
RGB_GPIO_InitStruct.GPIO_Pin|= GPIO_Pin_0; //GPIO引脚选择可用|运算符同时选择多个,但为了灯的选择分开了。
#endif
#if (G_LED==1)
RGB_GPIO_InitStruct.GPIO_Pin|= GPIO_Pin_1;
#endif
#if (B_LED==1)
RGB_GPIO_InitStruct.GPIO_Pin|= GPIO_Pin_5;
#endif
//输出速度选择,同样用宏去选择
#if LED_OUT_SPEED==10
RGB_GPIO_InitStruct.GPIO_Speed=GPIO_Speed_10MHz;
#elif LED_OUT_SPEED==2
RGB_GPIO_InitStruct.GPIO_Speed=GPIO_Speed_2MHz;
#elif LED_OUT_SPEED==50
RGB_GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
#endif
GPIO_Init(GPIOB, &RGB_GPIO_InitStruct);//gpio初始化完成
//这里也能初始化是输出高电平还是低电平
}
头文件的声明;
#ifndef rgb_drive_h
#define rgb_drive_h
#include "define.h"//公共头文件
#define R_LED 1 #define G_LED 1 #define B_LED 1
#define LED_OUT_SPEED 50
#define LED_R_ON GPIO_ResetBits(GPIOB, GPIO_Pin_5);
#define LED_R_OFF GPIO_SetBits(GPIOB, GPIO_Pin_5);
#define LED_G_ON GPIO_ResetBits(GPIOB, GPIO_Pin_0);
#define LED_G_OFF GPIO_SetBits(GPIOB, GPIO_Pin_0);
#define LED_B_ON GPIO_ResetBits(GPIOB, GPIO_Pin_1);
#define LED_B_OFF GPIO_SetBits(GPIOB, GPIO_Pin_1);
void rgb_init(void);
#endif
STM标准库提供的输出高低电平函数;
GPIO_ResetBits(GPIOB, GPIO_Pin_1);//输出低
GPIO_SetBits(GPIOB, GPIO_Pin_1);//输出高
还有一些批量读出 批量输出的函数
main函数使用
#include "define.h" // Device header
int main(void)
{
rgb_init();//初始化
while(1)
{
LED_B_ON;
LED_R_OFF;
LED_G_OFF;
}
}
到此就能使用GPIO点灯了呀。