购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.2.2 GPIO输入输出操作

1.硬件介绍

我们选用叶帆科技公司的YF3300 4G-Cat1的物联网入门级网关(如1.1.4小节中,图1.1.10的左图所示)作为本节示例的硬件。

YF3300 4G-Cat1版自带一个移动的ML302模块,包含1路RS485、1路RS232,三路状态灯,此外还包含2路开关量输入,1路开关量继电器输出(如图1.2.19所示)。在此,我们仅关心状态指示灯、开关量输入和继电器输出。

● 图1.2.19 YF3300 4G-Cat1 硬件接口示意图

2. GPIO接口介绍

所谓的开关量输入输出,对应的是MCU主芯片上一个个PIN脚,这些PIN脚称为GPIO。所谓GPIO就是General Purpose input/output通用输入输出的简称。

每个GPIO具体是通用输入、输出管脚,还是串口、I2C或SPI等标准通信管脚,要通过设置芯片中的寄存器决定。设定好GPIO的类型后,如果是输入,则读对应的寄存器,观察相应标志位的值,确定是否有输入。如果是输出,则写对应的寄存器,PIN脚会输出一个对应的电平信号。

GPIO端口有一个高位状态(正电压,通常为3.3V或5V),对应逻辑上的1和一个低位状态(0V电压),对应逻辑上的0。而在实际硬件中,0~1V之间的电压通常被认定为低位状态,而在1.7~5.5V的电压则通常被认定为高位状态。

由于GPIO输入电压过低,针对开关量输入,外部通过一个光耦中转给MCU管脚。这样输入的电压范围可以是0~24V(0~1V为0,大于2V为1)。

另外由于芯片的GPIO驱动能力比较弱,电流最大才20mA,为了驱动继电器和电气隔离,我们采用了三极管+光耦的电路,可以让芯片上的GPIO安全、轻松地控制继电器的开和闭。

3. GPIO标准输入输出库

针对GPIO输出,.NET Micro Framework提供了OutputPort类。构造函数比较简单,输入对应的PIN脚和初始逻辑状态即可。

设置PIN脚状态,提供了Write函数,参数直接输入True或False即可。

获取PIN脚状态,提供了Read函数,无须输入参数。

下面的代码示例就是LED状态灯每秒闪烁一次的核心代码。

再看一段实现同样功能的C语言代码。

相对于同样功能的C语言代码,采用C#开发,可以看出是真正采用面向对象的思想来进行代码设计的,掩藏了很多硬件的细节,比较适合刚入门的物联网技术开发者,特别是从软件开发转向硬件开发的人,不需要查看原理图(从中查看对应的PIN脚),不需要了解太多PIN脚的类型和速度模式,也不需要搞清楚PIN脚电平的上下拉,更不需要写嵌入式开发必不可少的时钟配置等相关代码。

当然以上代码开发编写完毕后,要下载到对应的硬件进行调试,必须了解JTAG调试器(仿真器)相关知识(有不少类型的调试器可供选择),配置好相关参数,才能成功把相关代码下载到硬件MCU中。所以嵌入式开发门槛还是有些高的,特别是C/C++语言开发,指针使用不当或内存分配和释放的失误,导致的各种BUG是非常难以定位的,也是非常考验功底的。

针对GPIO输入,.NET Micro Framework提供了两种对象类,一种是普通类型的InputPort输入类,一种是中断类型(或称之为事件类型)的InterruptPort类,分别对应的代码如下。

4. GPIO输入输出调试

编写完相关代码,我们通过USB连接YF3300硬件和计算机,在项目属性中设置调试接口为USB,并选择好对应的设备(Windows 10免USB驱动安装)。

编译成功后,单击“运行”按钮(或者按“F5”键),则会自动部署程序到硬件设备,然后运行。如果只部署程序,则可以在项目名称上弹出右键菜单,单击“部署”命令(如图1.2.20所示)部署程序到硬件。

● 图1.2.20 C#程序部署

程序正常运行后,会发现Visual Studio的输出窗口,不断输出开关量输入的状态,这是执行这句代码Debug.Print("I1=" + I1.Read()+ " I2=" + I2.Read()))输出的信息。操作YF3300上的用户按键,按下和抬起都会输出一个信息(对应代码:Debug.Print(data1.ToString("X2")+ ":" + data2.ToString())。同时也发现LED灯每隔1秒亮灭一次。此外还可以设置断点和单步执行,观察每句代码的执行情况(如图1.2.21所示)。

● 图1.2.21 C#开关量输入输出调试 GtNmxX1x/npLNBhEKR7VNY4MIY2Aq/whrT9WSHK41hHTKIE0NsQTGj9B+yuOyVkr

点击中间区域
呼出菜单
上一章
目录
下一章
×