NXP MCU 技术论坛
直播中

单马刀

10年用户 37经验值
擅长:可编程逻辑 模拟技术 嵌入式技术 EDA/IC设计
私信 关注
[经验]

【NXP LPC54110试用体验】+从一个简单的LED工程入手开始的学习过程

板子到手已经有几个周的时间啦,由于最近手头的事情有点多,所以并没有很好的去对待这块板子,前两篇帖子只是NXP这个板子和LPC系列的开发环境做了一个粗略的介绍,对NXP所做的工作做了一些简单的罗列,并没有牵扯到实际的技术问题。今天周目恰好有点时间。于是拿来板子在网上寻找资料开始学习。
我再网上找到做过相关开发的网友写的一些例程,其中有部分人是使用MCUXpresso Config Tools v3.0工具直接生成的工程,也有使用比较传统的库函数的方式写的工程,由于使用MCUXpresso Config Tools v3.0工具生成的工程基本上很难再对应回底层寄存器,所以读起来相对艰涩一点。所以我在学习使用的过程中决定适应前者。
由于时间和精力的关系,我并不打算从最基础的创建工程开始讲起,我直接从实际的例子开始讲程序的整体的脉络和一般写程序的开发思路。
工程:点亮LED灯
目的:梳理整体的工程脉络
我在打开一个现有的库函数的工程的时候,程序主题非常简洁,具体代码如下:
#include "include.h"

void Delay_Two_us(uint32_t us)
{
        uint32_t i;
  for(i=0; i         {
          __nop();
                __nop();
                __nop();
        }
}


void Delay_ms(uint32_t ms)
{
  uint32_t i,j;
  for(i=0; i         {
                for(j=0;j<500;j++)
                {
                        Delay_Two_us(1);
                }
        }
}

int main(void)
{
        SystemCoreClockUpdate();
       
        Chip_GPIO_Init(LPC_GPIO);
        Chip_GPIO_SetPinDIR(LPC_GPIO,0, 22, true);
  Chip_GPIO_SetPinState(LPC_GPIO,0, 22, true);       

       
       
        while (1)
        {
           Chip_GPIO_SetPinState(LPC_GPIO,0, 21, true);       
           Delay_ms(500);
           Chip_GPIO_SetPinState(LPC_GPIO,0, 21, false);       
           Delay_ms(500);


        }
}
非常简洁,几乎都看不到任何寄存器的痕迹,连头文件都只有一个。
  当然只要有一定的软件基础都应该是能够顺藤摸瓜找到所有的东西的。
首先说先整体工程的脉络:
贴1.png 找吧,找头文件,一步一步的深挖下去。。。。。。
直到: 22.png 终于还是找到了,所有的头文件都在这里面,拿着就是一个正常的工程了,而且,在接下来的一步一步向下探索的过程中,也有许多惊喜,因为官方版的库将设备所有的功能封装的非常的好而且函数写的非常好懂,所有的函数封装形式都是非常规范的
333.png 这样,所有你要是想加一个功能只需要在相应的外设里面添加相关的函数修改相对应的参数就可以完全实现了。
比如我需要添加一个按键来控制led灯的运行状态我只需要添加几个函数:
#include "include.h"

#define key         Chip_GPIO_GetPinState(LPC_GPIO,1, 8)

uint8_t TX_BUF[20];
void Delay_Two_us(uint32_t us)
{
        uint32_t i;
  for(i=0; i         {
          __nop();
                __nop();
                __nop();
        }
}


void Delay_ms(uint32_t ms)
{
  uint32_t i,j;
  for(i=0; i         {
                for(j=0;j<500;j++)
                {
                        Delay_Two_us(1);
                }
        }
}

int main(void)
{
        SystemCoreClockUpdate();
       
        Chip_GPIO_Init(LPC_GPIO);
        Chip_GPIO_SetPinDIR(LPC_GPIO,0, 21, true); //½«GPIO0 21ÉèÖóÉÊä³öģʽ
        Chip_GPIO_SetPinDIR(LPC_GPIO,1, 8, false); //½«GPIO0 8½ÅÉèÖóÉÊäÈëģʽ

       
       
        while (1)
        {
                if(key==0)
                {
                        Chip_GPIO_SetPinState(LPC_GPIO,0, 21, true);       
                                Delay_ms(500);
                        Chip_GPIO_SetPinState(LPC_GPIO,0, 21, false);       
                        Delay_ms(500);
        }
                else   Chip_GPIO_SetPinState(LPC_GPIO,0, 21, true);       

                       
}
}

/*----------------------------end of main.c-------------------------------*/
功能就能够实现了


    LED KEY.rar (2017-8-28 00:08 上传)

    1.96 MB, 下载次数: 9

更多回帖

发帖
×
20
完善资料,
赚取积分