查看: 4305|回复: 0

[分享] [LPC54110开发板测试] 二、测试GPIO,点亮LED,串口输出

[复制链接]
  • TA的每日心情
    开心
    2017-3-31 13:54
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    6

    主题

    12

    帖子

    0

    新手上路

    Rank: 1

    积分
    48
    最后登录
    2017-5-20
    发表于 2017-4-28 22:25:42 | 显示全部楼层 |阅读模式
    [LPC54110开发板测试] 二、测试GPIO,点亮LED,串口输出
    网上下载的资料有中文的,给学习带来许多便利。而厂家提供的开发案例有Keil和IAR两种,已用过的Keil来学习开发这块板子应该容易一些,于是开始开发环境的设置和配置。
    首先安装库文件,打开Keil5.22,单击图21上红框图标,在弹出的界面中联网安装LPC5411x的设备库,见图22。安装好之后就可以配置Keil的Option选项,找重视芯片选项和下载仿真器选项,这些网上已有许多介绍,这里省了。首先开始实验GPIO,点亮LEDx。
    参照LPC5411xSCH的pdf文档,见图23,可知LED0~7的对应引脚为PIO0_15、19、21、22、25、26、29、30,先实验LED0~3这4个LED。
    打开5411x工程,先将user文件夹下的main.c复制并改名为mainLed.c,保留源文件以便实验出问题可以改回,文件连接了一个board.h文档,打开后可知是配置GPIO的文档,按照我们的首需,将文件的GPIO改为:
    //DEFINE GPIO For LED0~3
    #define LEDGpio 0
    #define        LED0        15//PIO0_15
    #define        LED1        19//PIO0_19
    #define        LED2        21//PIO0_21
    #define        LED3        22//PIO0_22
    参照board.c中与操作GPIO相关的函数,在mainLed.c主函数中输入代码:
    //Variables
    uint16_t ledTime=2000;
    //Delayer
    void delay(int counter){
    volatile uint32_t i,j;
    for(i=0;i<counter;++i){for(j=0;j<i;j++){;}}
    }
    //GPIO Initial
    void ioInit(void){
    //Define LED Pins
    Chip_GPIO_SetPinDIR(LPC_GPIO,  LEDGpio,LED0,true);
    Chip_GPIO_SetPinState(LPC_GPIO,LEDGpio,LED0,false);
    Chip_GPIO_SetPinDIR(LPC_GPIO,  LEDGpio,LED1,true);
    Chip_GPIO_SetPinState(LPC_GPIO,LEDGpio,LED1,false);
    Chip_GPIO_SetPinDIR(LPC_GPIO,  LEDGpio,LED2,true);
    Chip_GPIO_SetPinState(LPC_GPIO,LEDGpio,LED2,false);
    Chip_GPIO_SetPinDIR(LPC_GPIO,  LEDGpio,LED3,true);
    Chip_GPIO_SetPinState(LPC_GPIO,LEDGpio,LED3,false);
    }
    //ledTest
    void ledTest(void){
    Chip_GPIO_SetPinOutLow(LPC_GPIO,LEDGpio,LED0);
    Chip_GPIO_SetPinOutHigh(LPC_GPIO,LEDGpio,LED1);
    delay(ledTime);
    Chip_GPIO_SetPinOutLow(LPC_GPIO,LEDGpio,LED1);
    Chip_GPIO_SetPinOutHigh(LPC_GPIO,LEDGpio,LED2);
    delay(ledTime);
    Chip_GPIO_SetPinOutLow(LPC_GPIO,LEDGpio,LED2);
    Chip_GPIO_SetPinOutHigh(LPC_GPIO,LEDGpio,LED3);
    delay(ledTime);
    Chip_GPIO_SetPinOutLow(LPC_GPIO,LEDGpio,LED3);
    Chip_GPIO_SetPinOutHigh(LPC_GPIO,LEDGpio,LED0);
    delay(ledTime);
    }
    //MAIN Programes
    int main(void){
    SystemCoreClockUpdate();
    Board_Init();
    Chip_GPIO_Init(LPC_GPIO);
    ioInit();
    while(1){
      ledTest();
    }
    }
    //File end
    期望程序实现LED0~LED3的轮闪,编译下载后的结果见照片24。问题来了,如法炮制的所有一样的代码,结果LED0就是不亮,LED1~LED3轮闪亮,单独设置也不闪亮,不知是什么问题。期待高手帮忙解决。
    接着测试8只LED的轮闪,只是增加了board.h中的LED4~LED7定义和在main中增加几行语句,结果见照片25-1~3。
    在安装CMSIS DAT时意外发现在设备管理器中多出了一个串口,看来是USB虚拟串口,本实验的最后就尝试从这个虚拟串口输出数据。在上述代码的变量下增加:
    uint32_t js;
    在main函数的while循环语句中增加二行:
    js++;
    printf("JSQ:%d \n\r",js);
    结果,连接电脑模拟串口软件可以的到输出的数据,见图26。

    21

    21

    22

    22

    23

    23

    25-1

    25-1

    25-2

    25-2

    25-3

    25-3

    24

    24

    26

    26
    开心每一天
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-25 08:51 , Processed in 0.078895 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表