实验11 扩展IO功能示例

1. 实验目的

本实验演示了扩展IO的相关功能及使用方法。扩展IO的功能有普通输入、普通输出、中断输入、AD输入、PWM输出和捕获输入的功能。

G系列串口屏(3.5寸及以下)支持6个扩展IO,S系列串口屏(4.3寸及以上)最多可支持25个扩展IO。

每个IO的功能不一样,项目设计的时候,需要提前了解到要用到的IO是否支持所需功能,比如如有的IO能支持AD输入,有的能支持PWM输出,具体的IO功能介绍参考第七章。

本实验基于4.3寸480*272分辨率的串口屏,若要验证其他尺寸的串口屏,可在VP软件里修改项目型号(文件->编辑项目),或者参考本实验重新设计工程。

2. 页面设计

本实验一共6个页面,分页演示了不同IO功能的用法。

(1)home页面,一共5个按钮,点击对应的按钮可切页到其他页面。

(2) GPIO页面。

3个IO控件,对应的引脚号是io7,io8,io9

1个定时器控件,定时1秒去读取io8引脚的电平状态

3个文本控件,分别显示输出、输入、中断输入的IO引脚号

4个整数控件,分别显示输出值、输入值、中断输入值和中断次数

1个双态按钮控件,控制输入IO的电平,弹起是1

1个按钮控件,点击返回home页面

(3) AD页面

1个ADC控件,引脚号io6

1个定时器控件,定时1秒去读取adc控件的采样值

1个浮点数控件,用于显示电压值

1个按钮控件,点击返回home页面

(4) PWM页面

1个PWM控件,引脚号io0

1个键盘控件,用于输入频率和占空比

2个整数控件,分别显示频率和占空比

1个双态按钮控件,控制输出使能,按下使能,弹起不使能

1个按钮控件,点击返回home页面

(5) CAPTURE页面

1个Capture控件,引脚号io3

1个定时器控件,定时1秒去读取Capture控件的频率、占空比和脉冲个数

3个整数控件,分别显示频率、占空比、脉冲个数

1个按钮控件,点击返回home页面

(6) ExUART页面

1个扩展协议解析器控件,默认引脚号io1,io2

2个文本控件,分别显示接收区和发送区的文本

1个按钮控件,点击”发送”后,扩展串口将发送区的字符串发出去

1个按钮控件,点击返回home页面

注意:在页面设计时,提前分配好IO的功能,如果同一个IO引脚被多次绑定,编译的时候将会报错。

错误提示类型举例:

3. 串口屏脚本处理

本实验的脚本处理很简单,选中控件可以查看相关的脚本。IO相关控件属性的读和写,列举几个关键的说明。

(1) GPIO页面

输出电平控制

io7.val = 0;
io7.val = 1;

输入电平读取

io8num.val = io8.val; //定时1秒,读取io8的电平状态,0或者1

IO中断电平读取和中断处理(num9显示累加)

io9num.val = io9.val;
num9.val++;

(2) AD页面

读取电压值

num1.val = adc.val; //定时1秒,读取IO6引脚上的模拟电压值

(3) PWM页面

根据键盘输入值设置频率和占空比

int val;
val = stringToInt(keyboard4.txt); //将键盘的字符串转换成整数
if(var6.val == 0)
{
    if((val >=1)&&(val <= 1000000)) //频率范围1Hz~1MHz
    {
        num_freq.val = val;
        pwm3.frequency = num_freq.val; //设置PWM输出频率
    }
}
else
{
    if((val >=0)&&(val <= 100)) //占空比范围0~100
    {
        num_duty.val = stringToInt(keyboard4.txt);
        pwm3.dutyRatio = num_duty.val;    //设置PWM输出占空比    
    }
}
keyboard4.x = -500; //隐藏键盘

设置PWM输出使能

pwm3.enable = 1;  //PWM输出使能
tgbtn1.txt = "enable";

设置PWM输出不使能

pwm3.enable = 0;   //PWM输出不使能
tgbtn1.txt = "disable";

(4) CAPTURE页面

获取捕获参数

//定时器去读输入捕获控件的属性,频率、占空比、脉冲个数
num_freq.val = Capture4.frequency;
num_duty.val = Capture4.dutyRatio;
num_cnt.val  = Capture4.pulseCount;

(5) ExUART页面

字符串发送

//扩展串口发送函数;
//更多的操作函数访问方式为,输入控件名称,然后输入'.', 即exptl4.fun
exptl4.uartSend(text4.txt);

接收并显示

//将收到的串口数组,转换为字符串并赋值给文本显示
text3.txt = bytesToAscii(exptl4.rxBuf,0,exptl4.rxLen);

4. 下载验证

将编译后编译后下载到4.3寸带显示屏(带扩展IO模块),即可看到如下界面:

为了测试扩展IO的功能,我们需要将扩展IO通过软排线接到IO测试板上,如下图:

用万用表、示波器检测IO测试板即可。

(1) GPIO测试。

触摸控制GPIO页面双态按钮的状态,用万用表测试io7的输出电压变化,0V或者3.3V;

给io8接入3.3V或者GND,观察显示屏上io8的电平值

给io8接入3.3V或者GND,观察显示屏上io9的电平值和中断次数

(2) AD测试。

给i06引脚接入0~3.3V模拟电压。观察显示屏上AD采用出来的电压

(3) PWM测试。

点击输出使能,设置pwm输出,可选修改频率和占空比,用过示波器检测io0引脚上的波形。

(4) CAPTURE测试

将io0输出的pwm波形接入io3,观察显示屏上捕获到的频率、占空比和脉冲个数

(5) ExUART测试

将io1接入TTL工具的rx,io2接入TTL工具的tx,然后将TTL工具接入电脑,用串口助手收发测试。测试接线如下: