还记得在学习单片机的过程中,最好的入门操作就是对GPIO的操作:输入和输出,而输出一般是通过对GPIO引脚设置高低电平来驱动LED的亮灭。本帖就通过设置MAPS-K64上的引脚,来控制MAPS-Dock上四个LED的亮灭。
1 新建led.h文件,申明对led的操作函数
在由上一个帖子新建的模板工程文件的source文件夹下,新建一新建led.h文件,申明对led的操作函数。
#ifndef MAPS_LED_H_
#define MAPS_LED_H_
void testLed(void);
#endif //MAPS_LED_H_
2 新建lec.c文件,实现对led的操作
在gpio_pins.c和gpio_pins.h文件中,针对控制MAPS-Dock板上LED的GPIO引脚数组变量引脚
const gpio_output_pin_user_config_t ledPins[] = {
{
.pinName = kGpioLED1,
.config.outputLogic = 1,
.config.slewRate = kPortSlowSlewRate,
.config.isOpenDrainEnabled = false,
.config.driveStrength = kPortLowDriveStrength,
},
{
.pinName = kGpioLED2,
.config.outputLogic = 1,
.config.slewRate = kPortSlowSlewRate,
.config.isOpenDrainEnabled = false,
.config.driveStrength = kPortLowDriveStrength,
},
{
.pinName = kGpioLED3,
.config.outputLogic = 1,
.config.slewRate = kPortSlowSlewRate,
.config.isOpenDrainEnabled = false,
.config.driveStrength = kPortLowDriveStrength,
},
{
.pinName = kGpioLED4,
.config.outputLogic = 1,
.config.slewRate = kPortSlowSlewRate,
.config.isOpenDrainEnabled = false,
.config.driveStrength = kPortLowDriveStrength,
},
{
.pinName = GPIO_PINS_OUT_OF_RANGE,
}
};
具体的实现代码如下所示,即轮流的点亮LED,再轮流的熄灭LED,如此往复。
3 将led.c文件添加到项目中
4 编译下载
将led的测试函数,添加到main.c函数中,编译下载
5 实现效果
6 排错
由上面的效果,可知,只要一个LED在闪灯,经查GPIO_DRV_OutputPinInit函数中,应该是没有问题的呀,使能了时钟,设置了引脚为输出,配置了各引脚的参数。。。
7 在fsl_gpio_driver.h文件中,查到了如下的函数,是否其他3个不亮的引脚,默认方向不为输出,需要用户手动设置呢?
8 添加设置方向:
9 下载效果,效果实现
|