在线时间796 小时
UID3067179
注册时间2014-10-23
NXP金币1077
TA的每日心情 | 开心 3 天前 |
---|
签到天数: 1319 天 [LV.10]以坛为家III
版主
- 积分
- 7578
- 最后登录
- 2024-5-5
|
学习GPIO端口的使用,通过驱动LED的例程来了解GPIO的设置。
一、硬件部分:
LED对应 的三个端口PIO2_16, PIO2_17和PIO2_18。
二、软件部分:
2.1、主程序
int main(void)
{
unsigned int cn=0;
LED_Init();
while (1)
{
LED_RED(1);
for(cn=0;cn<5000000;cn++);
LED_RED(0);
for(cn=0;cn<5000000;cn++);
}
return 0;
}
2.2、led.c
void LED_Init(void)
{
Chip_GPIO_Init(LPC_GPIO); //初始化GPIO
Chip_GPIO_SetPinDIROutput(LPC_GPIO, 2, 16); //PIO2_16 == GREEN
Chip_GPIO_SetPinDIROutput(LPC_GPIO, 2, 17); //PIO2_17 == RED
Chip_GPIO_SetPinDIROutput(LPC_GPIO, 2, 18); //PIO2_18 == BLUE
Chip_GPIO_SetPinState(LPC_GPIO, 2, 16, true); //PIO2_16默认输出1
Chip_GPIO_SetPinState(LPC_GPIO, 2, 17, true); //PIO2_17默认输出1
Chip_GPIO_SetPinState(LPC_GPIO, 2, 18, true); //PIO2_18默认输出1
}
程序中用到的函数:
Chip_GPIO_Init(LPC_GPIO);
/* Initialize GPIO block */
void Chip_GPIO_Init(LPC_GPIO_T *pGPIO)
{
Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_GPIO); //使能GPIO端口时钟
}
Chip_GPIO_SetPinDIROutput(LPC_GPIO, 2, 16); //设置GPIO端口方向
STATIC INLINE void Chip_GPIO_SetPinDIROutput(LPC_GPIO_T *pGPIO, uint8_t port, uint8_t pin)
{
pGPIO->DIR[port] |= 1UL << pin;
}
手册中的定义:
Chip_GPIO_SetPinState(LPC_GPIO, 2, 16, true);
STATIC INLINE void Chip_GPIO_SetPinState(LPC_GPIO_T *pGPIO, uint8_t port, uint8_t pin, bool setting)
{
pGPIO->B[port][pin] = setting;
}
手册中的定义:
2.3、led.h
#define LED_RED(n) ( n?Chip_GPIO_SetPinState(LPC_GPIO, 2, 17, true) : Chip_GPIO_SetPinState(LPC_GPIO, 2, 17, false) )
#define LED_GREEN(n) ( n?Chip_GPIO_SetPinState(LPC_GPIO, 2, 16, true) : Chip_GPIO_SetPinState(LPC_GPIO, 2, 16, false) )
#define LED_BLUE(n) ( n?Chip_GPIO_SetPinState(LPC_GPIO, 2, 18, true) : Chip_GPIO_SetPinState(LPC_GPIO, 2, 18, false) )
三、执行结果:
板子上D1红色闪烁显示。
|
|