LPC804开发(3.GPIO使用)

1.前言

我们的核心板已经制作完成,那么首先就是点亮LED灯了,这基本等于hello world。在开发前,各位可以先烧录一下官方的程序,我的LED灯与官方开发板是一致的,如下图所示。

6afbeb814d5840cf9b065c8a84dcef51.jpeg

我这里的黄绿灯是3.3V上电灯,蓝灯是核心灯。如果各位制作的板子正常,烧录好官方程序后,应该是蓝灯闪烁。

2.GPIO输出

2.1初始化

gpio初始化程序如下

void init_led(void)
{
	GPIO_PortInit(GPIO, 0);
	CLOCK_EnableClock(kCLOCK_Gpio0);

	gpio_pin_config_t LED_RED_config = {
		.pinDirection = kGPIO_DigitalOutput,
		.outputLogic = 0U,
	};
	/* Initialize GPIO functionality on pin PIO0_13 (pin 4)  */
	GPIO_PinInit(GPIO, 0, 13, &LED_RED_config);
}

首先说一下什么是port,我们看官方的参考手册的pin

6e838366b2ac42c6b977fcf1cd30e2ba.png

可以看到完整的管脚名称叫做PIO0_xx,这个0,官方称为port。不过老实说,所有的io都是port0,所以怎么说呢,脱裤子放屁吧。下面我们对程序一句句分析。

46bd6fc9d5654c2b97df61bb4c3dde8f.png

第一二句就是初始化port0与开启时钟。

0adb71fa6b374c4a9249266874e520a3.png

这是端口初始化信息,结构体原型如下。

b111a6c4520b4526b1170ee70d2c6509.png

 还是比较简单的,第一个参数是方向(输入/输出)第二个参数是默认输出电平,单输出时有效。我们看回我们的初始化,便是逻辑输出模式,默认输出电平是低电平。

30971f0f954347c18dfa28c50fae5028.png

最后就是初始化,我一般理解为将参数投入到寄存器中,函数的原型如下图所示。

f760ade7ccc242d2b6bb68a028f6aca7.png

第一个参数一般写GPIO,port都是0,然后是哪个pin,我们现在是13,然后是gpio的结构体,就是我们上面写的结构体。 

2.2输出

官方一个给我们提供了四个函数来输出,我这边来简单介绍一下,大致分为两类:以port为一组来写和以pin来写。

d3ad231f9c2046489591c42ddaa440cf.png

port为组来写的话可以一个函数操作多个IO,这里以13就是我们的LED来介绍吧。

2.2.1PortSet

84e43d42e91a4397b7a17fd84829c194.png

portset即以组来置高电平,如果我们操作单个IO,方式如下

72f331d4fa674625a9aca20e90420808.png 这就是将IO13置高

2.2.2PortClear

portclear也差不多,函数原型与使用方法如下

8d34c3065ce540cfb84509f4db2af897.png

a441c7dfd0c749cbac4d743a7ca58b3d.png

2.2.3PortToggle 

porttoggle是翻转电平,写法没什么区别。

1719c3f2b8b0473faa44eb8a3636dec5.png

6059dd7beca74eb3a17ad56932e9202a.png

 2.2.4GPIO_PinWrite

这是输出里唯一一个可以以pin为单位来读写的函数,原型如下

6be1661043a649458bc0119c596c3981.png

第一个参数依然是GPIO。第二个参数是0,这是port。第三个参数是pin,我们是第13个,因此这里写13,最后一位是输出高电平或是低电平(高:1;低:0)

54ff5860a91549b3b929f8feacf795a1.png

2.3测试

96d52cd5dcb54c4b96e4d60b28dcbeb4.jpega1af1195175f4d5784fb1b11d5cc97b2.jpeg 

2.4小结

port类函数可以方便地让我们使用多个GPIO,pin类函数在操作单个gpio的时候很简单,大家根据使用场景可以挑选合适的函数来使用。

3.GPIO输入

3.1初始化

初始化与输入是类似的,因为这里led我已经初始化过了,所以时钟,port等我就不再初始化了,不然LED的配置就没了。我这里以30脚为例,说一下如何检测。

63aac080d2f84c37bb051ea166b1612e.png 

相较而言,这个初始化更加简单了,确定方向是输入。再直接写函数就OK了。

3.2输入

输入的话只有一个PinRead函数

c6d4827061034273afbe9d7ef852cada.png

使用方法与PinWrite类似,这里不再赘述了。 

2812b9a296bd46d4a7b55c38fdb0be2b.png

 3.3测试

我们将pin读到的数据放进一个变量key里面进行监测。1eceedf288c944e9a376f822a96bf2bb.jpeg

ea49035699ee46809231fac75bf6b5c9.png

可以看到默认状态下key的值是1,即高电平 

44c41e64e3084fb79780606a6fe5a4f5.jpeg0d487ed67ab3430ca898af65aae6258e.png

当我们通过跳线将30口与GND相连,key的值也就变为了0,没有问题。

4.程序

main.c

#include "key.h"

void init_key(void)
{
	gpio_pin_config_t key_config = {
		.pinDirection = kGPIO_DigitalInput
	};
	GPIO_PinInit(GPIO, 0, 30, &key_config);
}

unsigned char key;

int main(void)
{
//    BOARD_InitBootPins();
    BOARD_InitBootClocks();
    BOARD_InitBootPeripherals();
    BOARD_InitDebugConsole();

    init_systick();
	init_led();
	init_key();

    PRINTF("Hello World\r\n");

//    GPIO_PortSet(GPIO,0,1<<13);
//
//    GPIO_PortClear(GPIO,0,1<<13);

//    GPIO_PinWrite(GPIO,0,13,1);

    while (1)
    {
    	key=GPIO_PinRead(GPIO,0,30);

//        SysTick_DelayTicks(100U); //Delay 100 ms

//        GPIO_PortToggle(GPIO, 0, 1u << 13);
    }
    return 0 ;
}


gpio.c 

/*
 * my_gpio.c
 *
 *  Created on: 2024年1月25日
 *      Author: 18752
 */

#include "my_gpio.h"

void init_led(void)
{
	GPIO_PortInit(GPIO, 0);
	CLOCK_EnableClock(kCLOCK_Gpio0);

	gpio_pin_config_t LED_RED_config = {
		.pinDirection = kGPIO_DigitalOutput,
		.outputLogic = 0U,
	};
	/* Initialize GPIO functionality on pin PIO0_13 (pin 4)  */
	GPIO_PinInit(GPIO, 0, 13, &LED_RED_config);
}

 

5.总结

总的来说因为我开发过RT1064,对于LPC系列的官方库还是比较熟悉的,开发起来我感觉还是蛮简单的,大家有什么问题也可以在评论区里提问出来。

 

  • 22
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: LPC2214开发包是用于LPC2214微控制器的软件开发工具包。LPC2214是NXP公司(前身为飞利浦)生产的一款基于ARM7TDMI-S内核的低功耗微控制器,具有高性能和低功耗的特点。 LPC2214开发包通常包含编程工具、调试工具、软件库和示例代码等。编程工具可以用来编写、编译和下载代码到LPC2214微控制器,常见的编程工具有Keil MDK、IAR Embedded Workbench等。调试工具可以用来调试代码,例如通过串口接口与微控制器通信,查看变量的值和程序的执行状态。 软件库是指在LPC2214微控制器上运行的驱动程序和函数库,可以简化开发工作。这些软件库通常包括底层硬件驱动、中间件和应用层功能模块,例如定时器、GPIO、UART、SPI等。通过使用这些软件库,开发人员可以更加高效地开发应用程序。 另外,LPC2214开发包还通常提供示例代码,用于演示如何使用软件库来编写应用程序。示例代码可以是一些简单的示例,也可以是一些复杂的应用案例,开发人员可以根据自己的需求进行修改和扩展。 总之,LPC2214开发包是用于LPC2214微控制器开发的软件开发工具包,包括编程工具、调试工具、软件库和示例代码等,可帮助开发人员更加高效地进行嵌入式系统开发。 ### 回答2: LPC2214是一款由恩智浦公司(NXP)生产的32位微控制器。它具有高性能、低功耗和丰富的外设,适用于各种嵌入式系统应用。 LPC2214开发包是用于开发和编程LPC2214微控制器的工具包。它通常包括硬件和软件。 硬件方面,LPC2214开发包通常包含一个开发板,上面搭载了LPC2214微控制器和一系列外设,如GPIO引脚、串口接口、SPI接口、I2C接口等。这些外设可以方便地与外部设备进行通信和控制。此外,开发板通常还包含了一系列的开发和调试接口,如JTAG接口,以便开发者可以使用调试器对LPC2214进行编程和调试。 软件方面,LPC2214开发包通常附带了一款集成开发环境(IDE),如Keil uVision或IAR Embedded Workbench。这些IDE提供了编程界面,可以让开发者方便地编写、编译和调试代码。此外,开发包还会提供一系列的软件库和示例代码,以帮助开发者快速上手和开发应用。 通过LPC2214开发包,开发者可以轻松地开始使用LPC2214微控制器来开发各种应用,如物联网设备、工业自动化和消费电子产品等。开发包提供了一套完整的工具和资源,让开发者可以快速、高效地进行开发和调试工作。 ### 回答3: LPC2214开发包是一种用于嵌入式系统开发开发工具,针对NXP的LPC2214系列微控制器设计。 LPC2214是一款低功耗、高性能的32位ARM微控制器,拥有16/32KB闪存和8/16/32KB RAM,适合于各种嵌入式应用。LPC2214开发包包含了软件和硬件资源,方便开发人员进行软件开发和调试。 软件资源方面,LPC2214开发包提供了一套完整的开发工具链,包括开发环境、编译器、调试器等。其中,开发环境通常为常用的IDE(集成开发环境),提供了代码编辑、编译、调试等功能。编译器用于将高级语言代码(如C、C++)转换为LPC2214可执行的机器码。调试器则用于在开发过程中对程序进行调试和运行。此外,开发包还可能提供一些常用的软件库和示例代码,用于快速开发和调试。 硬件资源方面,LPC2214开发包通常包含一款LPC2214微控制器开发板,配备了各种接口和外设,如串口、GPIO、LCD显示屏等。开发板上还可能连接了一块调试接口,用于与电脑上的调试器进行通信。开发板通过调试接口与开发工具链相连接,开发人员可以通过开发工具链对LPC2214进行编程、调试和下载。 总之,LPC2214开发包是针对LPC2214微控制器设计的一套完整的开发工具软件和开发板硬件资源,帮助开发人员快速进行LPC2214嵌入式系统的开发和调试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值