K210操作IO复用成GPIO

前言

最近在学习K210,点灯操作也是入门学习一款芯片的第一步。当掌握了该芯片的基本GPIO操作,在之后操作该芯片的其他外设也将变得更加简单。此文介绍一下K210如何操作一个IO口使其复用成GPIO,输出指定电平来控制LED的暗灭。

FPIOA(现场可编程 IO 阵列)

有过STM32开发经验的都了解,32的IO初始化之后默认功能就是基本的GPIO,如果想要让IO当做其他功能引脚,就要使用AFIO将IO口复用成其他功能。

STM32IO复用

首先先介绍K210的FPIOA,也就是IOMUX,FPIOA 允许用户将 255 个内部功能映射到芯片外围的 48 个自由 IO 上。

支持 IO 的可编程功能选择

支持 IO 输出的 8 种驱动能力选择

支持 IO 的内部上拉电阻选择

支持 IO 的内部下拉电阻选择

支持 IO 输入的内部施密特触发器设置

支持 IO 输出的斜率控制

支持内部输入逻辑的电平设置

即K210向外引出了48个引脚,我们可以进行IO复用,让一个IO具体复用成某一个特殊的功能。通过原理图可以确定LED0和LED1分别连接到了K210的IO0和IO17,且低电平的时候灯亮。

 

通用 GPIO 

通用 GPIO 共 8 个,具有如下特点 :

8 个 IO 使用一个中断源

可配置输入输出信号

可配置触发 IO 总中断,边沿触发和电平触发

每个 IO 可以分配到 FPIOA 上 48 个管脚之一

可配置上下拉,或者高阻

上文提到K210芯片内部有255个功能,具体的可以在fpioa.h中进行查看

可以在fpioa.h文件中查看到K210IO复用功能的枚举,GPIO0和GPIO1的枚举编号分别为56、57。所以在IO的的配置文件pin_config.h中的代码如下。

#ifndef _PIN_CONFIG_H_
#define _PIN_CONFIG_H_
/*****************************HEAR-FILE************************************/
#include "fpioa.h"

/*****************************HARDWARE-PIN*********************************/
// 硬件IO口,与原理图对应
#define PIN_LED_0             (0)
#define PIN_LED_1             (17)

/*****************************SOFTWARE-GPIO********************************/
// 软件GPIO口,使用到了GPIO0和GPIO1
#define LED0_GPIONUM          (0)
#define LED1_GPIONUM          (1)

/*****************************FUNC-GPIO************************************/
// GPIO口的功能,绑定到硬件IO口,FUNC_GPIO0 = 56,也就是使用了GPIO0
#define FUNC_LED0             (FUNC_GPIO0 + LED0_GPIONUM)
#define FUNC_LED1             (FUNC_GPIO0 + LED1_GPIONUM)

#endif /* _PIN_CONFIG_H_ */

Main.c文件中首先将LED0和LED1使用到的K210引脚(IO0和IO17)跟GPIO0和GPIO1进行绑定,然后就是初始化GPIO时钟,设置输入输出模式、设置输出的值,这些和32的配置步骤就是相似的了。

#include <stdio.h>
#include <unistd.h>
#include "gpio.h"
#include "pin_config.h"


void hardware_init(void)
{
    fpioa_set_function(PIN_LED_0, FUNC_LED0); //IO0复用成GPIO0
    fpioa_set_function(PIN_LED_1, FUNC_LED1); //IO17复用成GPIO1
}


int main(void)
{
    hardware_init();// 硬件引脚初始化

    gpio_init();    // 使能GPIO的时钟
    
    // 设置LED0和LED1的GPIO模式为输出
    gpio_set_drive_mode(LED0_GPIONUM, GPIO_DM_OUTPUT);
    gpio_set_drive_mode(LED1_GPIONUM, GPIO_DM_OUTPUT);
    
    // 先关闭LED0和LED1
    gpio_pin_value_t value = GPIO_PV_HIGH;
    gpio_set_pin(LED0_GPIONUM, value);
    gpio_set_pin(LED1_GPIONUM, value);

    while (1)
    {
        sleep(1);
        gpio_set_pin(LED0_GPIONUM, value);
        gpio_set_pin(LED1_GPIONUM, value = !value);
    }
    return 0;
}

最终实验现象就是LED0和LED1间隔1s交替闪烁。

总结

以上就是本文的全部内容,希望够帮到你入门K210,使用相应的GPIO。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

门牙会稍息

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值