GPIO接口测试方案

一、概述

通用输入输出端口(General-purpose input/output,GPIO),可以通过软件来控制其输入和输出。通俗地说,就是一些引脚,可以通过它们输出高低电平或者通过它们读入引脚的状态-高/低电平。用户可以通过GPIO口和硬件进行数据交互(如UART),控制硬件工作(如LED、蜂鸣器等),读取硬件的工作状态信号(如中断信号)等,GPIO口的使用非常广泛。

对于一个IO Port来讲,有两方面需要配置,一是本身的功能设定,二是如果作为GPIO的话输入输出的设定。前者由Pin Controller控制,后者由GPIO Controller控制。GPIO Controller控制包括:1、配置GPIO的方向;2、如果是输出,可以配置high level或者low level;3、如果是输入,可以获取GPIO引脚上的电平状态。

本文主要描述GPIO接口输入输出的测试方案。

二、环境信息

linux系统、串口线、硬件设备(如监控摄像机)

三、测试方案

测试方案一:申请创建新的GPIO口:设置申请的GPIO口为输入/输出,获取/设置gpio口的电平状态,确定查看/设置电平状态是否生效。

测试方案二:使用已有GPIO口:通过系统驱动调试命令,查看/设置GPIO引脚的电平状态,确定查看/设置电平状态是否生效。


注意:输入GPIO引脚仅可以获取电平状态,输出GPIO引脚可以获取/设置电平状态

四、操作步骤及预期结果

测试方案一:

操作步骤:

1、在串口或ssh连接下打开打印:cat /proc/kmsg &

2、查看所有GPIO接口的状态:cat /sys/kernel/debug/gpio(in代表输入、out代表输出、hi代表高电平、lo代表低电平)

3、申请gpio口:echo gpio口序号 > /sys/class/gpio/export(不要与之前已有GPIO口序号重复)【GPIO口文件在/sys/class/gpio目录下。】

例:echo 93 > /sys/class/gpio/export,系统会在/sys/class/gpio/目录下生成gpio93文件夹,此文件夹出现代表gpio口申请成功。

4、控制gpio93口为输入方向:echo in > /sys/class/gpio/gpio93/direction

控制为输入方向后查看方向是否正确:cat /sys/kernel/debug/gpio|grep 93

获取gpio输入引脚的电平状态:cat /sys/class/gpio/gpio口序号/value

5、控制gpio93口为输出方向:echo out > /sys/class/gpio/gpio93/direction

控制为输入方向后查看方向是否正确:cat /sys/kernel/debug/gpio|grep 93

设置gpio输出引脚的电平状态:echo 0/1 > /sys/class/gpio/gpio口序号/value【0为低电平、1为高电平】。

例:设置gpio93口为低电平状态:echo 0 > /sys/class/gpio/gpio93/value(注:需先设置gpio23为输出方向)

例:设置gpio93口为高电平状态echo 1 > /sys/class/gpio/gpio93/value(注:需先设置gpio23为输出方向)

设置后查看电平状态是否设置成功:cat /sys/class/gpio/gpio口序号/value

预期结果:

1、控制gpio93口为输入方向时,获取gpio输入引脚的电平状态成功

2、控制gpio93口为输出方向时:

设置gpio输出引脚为低电平状态成功

设置gpio输出引脚为高电平状态成功

测试方案二:

操作步骤:

1、在串口或10023端口下打开打印:cat /proc/kmsg &

2、查看设备GPIO接口的控制功能node号:cat /proc/sys/klsp/klsp_debug(各个设备会有差异,需要先查看)

3、查看所有GPIO接口的状态:cat /sys/kernel/debug/gpio(in代表输入、out代表输出、hi代表高电平、lo代表低电平)

4、设置GPIO输出引脚的电平状态:echo node号#w 0 [pin] [val] > /proc/sys/klsp/klsp_debug(其中pin指的是GPIO的pin_id即GPIO引脚序号,val是指设置输出电平【0为低电平、1为高电平】。

例:输出GPIOG引脚GPIO-86本身是低电平,将输出电平设置为高电平:echo 6#w 0 86 1 > /proc/sys/klsp/klsp_debug。设置成功后获取GPIO-86的状态:echo 6#r 0 86 > /proc/sys/klsp/klsp_debug

5、对比获取GPIO输入引脚的电平状态:echo node#r 0 [pin] > /proc/sys/klsp/klsp_debug(其中pin指的是GPIO的pin_id即GPIO引脚序号)

例:获取输出引脚GPIO-81的电平状态: echo 6#r 0 81 > /proc/sys/klsp/klsp_debug 对比 cat /sys/kernel/debug/gpio|grep 81

预期结果:

1、设置输出引脚GPIO-86输出电平为高电平成功

2、获取输入引脚GPIO-81的电平状态成功,对比一致

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
方案方案基于STM32F103C8T6单片机,使用DHT11传感器测量温湿度。主控芯片采用STM32F103C8T6,该芯片具有高性能、低功耗、丰富的接口资源和强大的扩展能力。传感器采用DHT11数字温湿度传感器,具有高精度、稳定性好、输出信号简单等特点。主控芯片通过GPIO口读取传感器输出的数字信号,计算出温湿度值,并将其显示在OLED屏幕上。 硬件设计 硬件设计如下图所示: ![硬件设计图](https://img-blog.csdn.net/20180522145109382?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2VsaW1pbmF0aW9u/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/) 主要硬件模块包括: - STM32F103C8T6单片机:作为主控芯片,通过GPIO口读取DHT11传感器输出的数字信号,并计算出温湿度值。 - DHT11数字温湿度传感器:通过GPIO口向外输出数字信号,包括温度、湿度等数据。 - OLED显示屏:用于显示温湿度值。 软件设计 软件设计主要包括以下几个方面: - 环境搭建:使用Keil C51 IDE进行开发,使用ST-Link/V2进行下载和调试。 - 串口通信:通过USART1串口与PC机通信,将温湿度值发送给上位机。 - DHT11驱动:通过GPIO口读取DHT11传感器输出的数字信号,并计算出温湿度值。 - OLED驱动:使用I2C总线与OLED屏幕进行通信,将温湿度值显示在屏幕上。 - 系统初始化:进行系统时钟初始化、GPIO口初始化、USART1串口初始化、I2C总线初始化等。 代码实现 代码实现主要包括以下几个部分: - 环境搭建:使用Keil C51 IDE进行开发,使用ST-Link/V2进行下载和调试。 - 串口通信:通过USART1串口与PC机通信,将温湿度值发送给上位机。 - DHT11驱动:通过GPIO口读取DHT11传感器输出的数字信号,并计算出温湿度值。 - OLED驱动:使用I2C总线与OLED屏幕进行通信,将温湿度值显示在屏幕上。 - 系统初始化:进行系统时钟初始化、GPIO口初始化、USART1串口初始化、I2C总线初始化等。 完整代码如下: ```c #include "stm32f10x.h" #include "dht11.h" #include "oled.h" #include "delay.h" int main(void) { float temperature, humidity; char str[20]; SystemInit(); DHT11_Init(); OLED_Init(); USART1_Init(); Delay_Init(); while(1) { DHT11_Read_Data(&temperature, &humidity); sprintf(str, "T:%.1fC H:%.1f%%", temperature, humidity); OLED_ShowString(0, 0, (unsigned char*)str); printf("T:%.1fC H:%.1f%%\r\n", temperature, humidity); Delay_Ms(1000); } } ``` 总结 本方案基于STM32F103C8T6单片机,使用DHT11传感器测量温湿度,并将其显示在OLED屏幕上。主要涉及到硬件设计、软件设计、环境搭建、串口通信、DHT11驱动、OLED驱动、系统初始化等方面。通过本方案的实现,可以更好地理解STM32F103C8T6单片机的工作原理,以及各个模块之间的协作关系。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值