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闪烁。

相关推荐
wxmtwfx2 天前
Linux内核GPIO工具概述
linux·驱动开发·gpio
荆楚闲人25 天前
GPIO内部结构中的施密特触发器(肖特基触发器)作用及原理
嵌入式·gpio·施密特触发器·肖特基触发器
YouEmbedded1 个月前
解码GPIO到核心元件的原理与应用
stm32·gpio·二极管·电流·电阻器
一个平凡而乐于分享的小比特2 个月前
STM32 GPIO 8种工作模式深入详解
stm32·单片机·嵌入式硬件·gpio
硅农深芯2 个月前
什么时候要用开漏输出(open drain output)?
单片机·嵌入式硬件·gpio·开漏输出·open drain
Felven2 个月前
飞腾D2000 GPIO中断调试
linux·gpio·中断·d2000
Ivy_belief2 个月前
Linux:设置和获取单片机gpio引脚和key值
linux·arm开发·qt·gpio·event事件
普中科技2 个月前
【普中51单片机开发攻略--基于普中-2&普中-3&普中-4】-- 第 9 章 点亮第一个 LED
单片机·嵌入式硬件·51单片机·led·gpio·普中科技
Darken032 个月前
基于 STM32 ——GPIO输入
stm32·单片机·嵌入式硬件·gpio
Darken032 个月前
基于 STM32 ——GPIO输出
单片机·学习·gpio·硬件