S32K144 GPIO编程

前面的文章介绍了如何在MDK-Keil下面进行S32K144的开发,下面就使用该工程模板进行GPIO LED的编程试验。

1. 开发环境

  • S32K144EVB-Q100开发板
  • MDK-Keil + Jlink

2. 硬件连接

S32K144EVB-Q100开发板关于LED的原理图如下:

也就是具体连接关系如下:

LED PIN
BLUE PTD0
RED PTD15
GREEN PTD16

3. GPIO LED实验

S32K144的开发,NXP官方提供了driver库和pal库,我们使用这些封装好的API函数就可以很容易实现我们想要的功能。

但是我为了进一步了解S32K144的芯片特性,计划是想着使用寄存器操作的方式编写代码。

当然,我不会使用那些地址值啊什么的去操作寄存器。前面的文章就介绍过,对于S32K144的SDK,就有提供寄存器操作的封装函数,xxx_hw_access.c/.h 这些文件。

Driver层那些封装函数,就是调用 xxx_hw_access.c/.h 这些文件的寄存器操作函数进一步封装得。我想着不调用 driver 层封装的那些函数了,直接调用寄存器操作的函数进行编写代码。

3.1 编写思路

  • 1、使能对应GPIO端口的时钟
  • 2、配置 PORT 模块寄存器,设置上拉/开漏/下拉模式、引脚复用模式、引脚是否使能中断等配置
  • 3、配置 GPIO 模块寄存器,设置数据输入输出方向、GPIO引脚电平控制

3.2 代码编写

代码编写实现LED闪烁。

1、LED引脚宏定义

c 复制代码
/* LED GPIO_Type */
#define LED_GPIO   PTD

/* LED PORT_Type */
#define LED_PORT   PORTD

/* LED PIN */
#define LED_BLUE_PIN      0U
#define LED_RED_PIN       15U
#define LED_GREEN_PIN     16U

S32K144的GPIO引脚,它涉及两个模块,PORT模块和GPIO模块。

2、LED引脚初始化代码

c 复制代码
/* Enable PORT_D clock */
PCC_SetClockMode(PCC, PORTD_CLK, 1);

/* Configurate PORT register, MUX = GPIO */
PINS_SetMuxModeSel(LED_PORT, LED_GREEN_PIN, PORT_MUX_AS_GPIO);

/* Configures the port pin interrupt/DMA request */
PINS_SetPinIntSel(LED_PORT, LED_GREEN_PIN, PORT_DMA_INT_DISABLED);

/* onfigurate GPIO register, set direction is output */
PINS_GPIO_SetPinDirection(LED_GPIO, LED_GREEN_PIN, 1);

首先是使能LED引脚端口PORTD的时钟。然后配置的GPIO复用模式,失能中断和DMA。然后配置输出方向是输出模式。

3、main函数如下:

c 复制代码
/* Delay function */
void Delay(volatile uint32_t count)
{
    while (count--);
}

int main(void)
{
    /* Enable PORT_D clock */
    PCC_SetClockMode(PCC, PORTD_CLK, 1);
    
    /* Configurate PORT register, MUX = GPIO */
    PINS_SetMuxModeSel(LED_PORT, LED_GREEN_PIN, PORT_MUX_AS_GPIO);
    
    /* Configures the port pin interrupt/DMA request */
    PINS_SetPinIntSel(LED_PORT, LED_GREEN_PIN, PORT_DMA_INT_DISABLED);
    
    /* onfigurate GPIO register, set direction is output */
    PINS_GPIO_SetPinDirection(LED_GPIO, LED_GREEN_PIN, 1);

    while (1)
    {
        PINS_GPIO_TogglePins(LED_GPIO, (1 << LED_GREEN_PIN));
        Delay(0xFFFFF);
    }
}

编译下载上面的代码之后,就可以看到LED闪烁。

相关推荐
Ronin-Lotus15 天前
嵌入式硬件篇---龙芯GPIO控制
嵌入式硬件·算法·c·gpio·龙芯·2k1000
charlie1145141911 个月前
从单片机的启动说起一个单片机到点灯发生了什么下——使用GPIO点一个灯
单片机·嵌入式硬件·学习·编程·教程·gpio
忧虑的乌龟蛋1 个月前
嵌入式 Linux:使用设备树驱动GPIO全流程
linux·服务器·嵌入式·imx6ull·gpio·点灯·pinctrl
CoreMaker-lab2 个月前
e2studio开发RA2E1(5)----GPIO输入检测
单片机·mcu·gpio·e2studio·瑞萨ra·r7fa2e1a72dfl
逝灮3 个月前
【蓝桥杯——物联网设计与开发】Part1:GPIO
stm32·单片机·嵌入式硬件·物联网·蓝桥杯·iot·gpio
FPGA_ADDA5 个月前
FMC 扩展子卡6 路 422,8 组 LVDS,8 路 GPIO
fpga开发·gpio·422·lvds·fmc 扩展子卡
mirevass5 个月前
【嵌入式软件-STM32】STM32内部-GPIO口
stm32·单片机·嵌入式硬件·学习·嵌入式·gpio
你好 贝弗利6 个月前
1.GPIO点灯与跑马灯
stm32·单片机·嵌入式硬件·gpio
侥幸哥f7 个月前
GD32F103单片机-GPIO
单片机·gd32·gpio
EleganceJiaBao8 个月前
【STM32】IO口取反 | 寄存器方式 | 异或运算符 | 原理
c语言·c++·stm32·单片机·gpio