玩转 GDK3:读取 GPIO 输入及使用串口

997b97e1054c237f261f18dff2b007c0.png

7d712878b6e301432a600ece74231626.png

G

D

K

3

读取 GPIO 输入及使用串口

40c7d8a0791dc949291bb7df2c0e5ddb.png

在上一篇文章中,我们提到,格蠹科技的GDK3开发板为学习嵌入式编程提供了一个高效的试验环境,它支持多种实时OS系统,在上面可以使用C语言来开发各种嵌入式程序。几乎在所有的应用场景中,与用户交互都是最基本的功能。为此,我们需要模拟用户的输入以及对用户的响应。

424d18a976696b88bcd7a5f4ee797630.png

我们的思路是,把一根引脚(比如 PB4)设置成输入,用一根杜邦线将其连接其他引脚,用以模拟用户输入;向串口打印一段信息表示 GDK3 的响应。

以下是几个关键步骤:

No. 1

 玩转

 GDK3

把引脚 PB4 设置成用于输入

我们使用如下的代码:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);      


GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;              


GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;        


GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;


GPIO_Init(GPIOB, &GPIO_InitStructure);

第一行 RCC_APB2PeriphClockCmd 函数的作用是控制 APB2 总线上的外设时钟的开启或关闭。它是 STM32 库中用于配置系统时钟的一部分。在使用外设模块之前,需要启用相应的外设时钟。这一行的作用是启用 GPIOB 端口的时钟。需要指出的是,如果这行代码前面已经有了,不需要再写一次。

第二行至第四行配置一个结构体。其中第二行设置使用的引脚,第三行设置输入输出模式,它是一个枚举型数据,取值如下:

GPIO_Mode_AIN 
//模拟输入,应用于ADC电压值采样输入


GPIO_Mode_IN_FLOATING 
//浮空输入信号电平不确定,完全有外部信号决定,一般用于按键检测


GPIO_Mode_IPD 
//下拉输入,输入口接下拉电阻(10K),无信号为低电平,有信号为高电平


GPIO_Mode_IPU 
//上拉输入,输入口接上拉电阻(10K),无信号为高电平,有信号为低电平


GPIO_Mode_Out_OD 
//开漏输出


GPIO_Mode_Out_PP 
//推挽输出


GPIO_Mode_AF_OD 
//复用开漏输出


GPIO_Mode_AF_PP 
//复用推挽输出

这里我们设置为 GPIO_Mode_IPD  下拉输入模式。

第四行设置输入速度。最后一行让结构体生效。

ef4a5df780b0b30f4621f7f17ab1fa07.png

No. 2

 玩转

 GDK3

读取输入信息

我们使用以下代码读取输入信息:

GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_4);

这个函数用于读取指定 GPIO 引脚的电平状态,返回值为0或者1,0表示低电平,1表示高电平。

761ac2466673587eb33018bb9dc254d5.png

No. 3

 玩转

 GDK3

向串口打印信息

printf 函数并没有把信息打印到串口,但是 fputc 函数是把字符打印到串口的。要把信息打印到串口,必须借助 fputc 的帮助。我们可以自己实现一个打印函数,调用 fputc

下面是一段示例代码:

#define BUFSIZE  1024
char myprintf_buf[BUFSIZE];


/*
* redirect the message to COM
*/
void my_printf(const char* fmt, ...)
{
    va_list args;
    int n;


    va_start(args, fmt);
    n = vsnprintf(myprintf_buf, BUFSIZE, fmt, args);
    va_end(args);
    
    for(int i = 0; i < n; i++)
    {
        fputc(myprintf_buf[i],0);
    }
}

以上便是几个主要的步骤,详细的过程请参照:https://www.nanocode.cn/wiki/docs/gdk3/gdk3-gebutton

8a924e5344d1eb636daab5989df61d91.png

当一切安排就绪,我们用一根杜邦线连接 PB4 和挥码枪上的 3V3 引脚,GDK3 就会打印一段信息,如下图所示:

b5ee95cee17973c0803d2f22a57d6849.png

用 GDK3 还可以玩出很多其它花样,如把GDK3 开发成 U盘、鼠标或者魔法键盘。关于其他的玩法,请参考:https://www.nanocode.cn/wiki/docs/gdk3

关于 GDK3 的配置,可以参考:https://www.nanocode.cn/#/gdk3/bom

参加格蠹科技的编程夏令营,即可自己动手实践,感受 GDK3 的强大功能和神奇魅力。编程夏令营还在报名中,详情请看:https://mp.weixin.qq.com/s/ejX4I_uQJaHm-MyNRzG_qw

END

【盛格塾】

正心诚意,格物致知

人文情怀审视软件,以软件技术改变人生

aa36d73e3ee56d9fda02c0be6c1d531b.png

格友公众号

ef1fbd50e73b8854c7c92275107a5c37.png

盛格塾小程序

扫描上方二维码或搜索“盛格塾”小程序

可以阅读更多文章和有声读物

 玩转

 GDK3

往期回顾

物联网时代,GDK3 助你一臂之力

炸弹指令何处来?

LINUX平台高级调试和优化(2024上海站)

宇宙总线的大道理和硬法则

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值