在创建新项目的时候,会含有一个控制GPIO口输出状态切换的程序,起初将它视为了LED的控制程序,却一直没见到LED有任何的变化。
后来在获得开发板的原理图时才发现,PA4根本就没连接说明LED ,为了便于验证,就在该引脚接上了一个LED灯模块,才终于见到效果,见图1和图2所示。
其完整且安全的主程序为:
int main(void)
{
RESET->NRST_EN =0; //PA15初始化位外部复位引脚,低电平复位;
CLIC_Init();//系统中断配置
SysClock_Crystal_Mode_Init();//系统时钟初始化:晶振模式
GPIO_MODE_Init(GPIOA,PIN4,GPIO_MODE_OUTPUT); //GPIO 模式
while(1)
{
GPIO_Toggle(GPIOA,PIN4); //GPIO 翻转
Delay16M_ms(500);
}
}
图1 点亮LED
图2 熄灭LED
此外,在开发板上配有一个RGB_LED,那该如何使其发挥作用呢?
该器件的威廉希尔官方网站 见图3所示,由此可知它使用的引脚为PA8、PA9及PA12。
图3 RGB_LED威廉希尔官方网站
使RGB_LED依次点亮的主程序为:
int main(void)
{
RESET->NRST_EN =0; //PA15初始化位外部复位引脚,低电平复位;
CLIC_Init();//系统中断配置
SysClock_Crystal_Mode_Init();//系统时钟初始化:晶振模式
GPIO_MODE_Init(GPIOA,PIN4,GPIO_MODE_OUTPUT); //GPIO 模式
GPIO_MODE_Init(GPIOA,PIN8,GPIO_MODE_OUTPUT);
GPIO_MODE_Init(GPIOA,PIN9,GPIO_MODE_OUTPUT);
GPIO_MODE_Init(GPIOA,PIN12,GPIO_MODE_OUTPUT);
while(1)
{
GPIO_Toggle(GPIOA,PIN4); //GPIO 翻转
Delay16M_ms(500);
GPIO_Toggle(GPIOA,PIN8);
Delay16M_ms(500);
GPIO_Toggle(GPIOA,PIN9);
Delay16M_ms(500);
GPIO_Toggle(GPIOA,PIN12);
Delay16M_ms(500);
}
}
经程序的编译与下载,其显示效果如图4和图5所示。
图4 点亮红色LED
图5 点亮蓝色LED
此外,通过色彩的组合该能产生更多的色彩变换,见图6至图9所示。
图6 显示亮蓝色
图7 显示黄色
图8 显示白色
图9 熄灭全部LED
除了GPIO口的输出功能外,还有GPIO口的输入功能,如按键状态的识别等。
在连接触摸按键模块的情况下,使用下面的程序可实现LED的感应控制。
int main(void)
{
RESET->NRST_EN =0; //PA15初始化位外部复位引脚,低电平复位;
CLIC_Init();//系统中断配置
SysClock_Crystal_Mode_Init();//系统时钟初始化:晶振模式
GPIO_MODE_Init(GPIOA,PIN4,GPIO_MODE_OUTPUT); //GPIO 模式
GPIO_MODE_Init(GPIOA,PIN3,GPIO_MODE_INPUT);
while(1)
{
if(GPIO_Read(GPIOA,PIN3)==0) GPIO_Write(GPIOA,PIN4,GPIO_SET);
else GPIO_Write(GPIOA,PIN4,GPIO_RESET);
}
}
经程序的编译与下载,其显示效果如图10和图11所示。
图10点亮LED
图11熄灭LED
在掌握了GPIO口的使用后,就可以此为基础来模拟SPI驱动LCD5110屏。
控制RGB_LED的目标文件为RGB_LED.elf,使用CSMISP进行下载可观察相应的测试效果。
*附件:rgb_led.zip
演示视频:
更多回帖