🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
* 导师视频讲解:[**去听课**](https://www.bilibili.com/video/BV1k34y1D7Vz?p=9) >[success] **技术支持说明:** >**1**.一般以自主学习为主 > **2**.可到官方问答社区中提问:[**去提问**](https://bbs.csdn.net/forums/zigbee) > **3**.工程师**会尽快**解答社区问题,但他们是一线开发,【**难以保证**】解答时效,解答辛苦,感谢理解! <br/> 接着上节课的内容,切换到ioConfig工程,如图所示。 ![](https://img.kancloud.cn/d7/7a/d77a0e56c7734f0851e2210aff05ed5e_650x402.png =400x) <br/> ## **GPIO输入输出通用配置API** &emsp;&emsp;本小节实验将要实现的效果和上节课的是一样的,即通过按键控制LED翻转。不同的是,本节课使用了GPIO输入输出通用配置API CC2530\_IOCTL,开发者不再需要自己查找和配置GPIO的相关寄存器了。 ### 打开头文件cc2530\_ioctl.h,找到CC2530_IOCTL定义,代码如下: ``` //2. 51单片机入门/4. 串口通信实验/Workspace/code/common/cc2530_ioctl.h /** * @brief 配置GPIO模式 * * @param port - CC2530引脚port号 * @param pin - CC2530引脚pin号 * @param mode - 该GPIO的模式 * * @warning P1_0和P1_1不能配置为输入模式 */ #define CC2530_IOCTL(port, pin, mode) do { if (port > 2 || pin > 7) break; if (mode == CC2530_OUTPUT) CC2530_IO_OUTPUT(port, pin); else CC2530_IO_INPUT(port, pin, mode); } while(0) ``` ### 其中的mode参数可以传入下列参数,表示不同的模式: ### ``` //2. 51单片机入门/4. 串口通信实验/Workspace/code/common/cc2530_ioctl.h /** @brief CC2530 GPIO mode. */ #define CC2530_OUTPUT 0 //输出模式 #define CC2530_INPUT_PULLUP 1 //上拉输入模式 #define CC2530_INPUT_PULLDOWN 2 //下拉输入模式 #define CC2530_INPUT_TRISTATE 3 //3态模式 ``` ### 如果需要把CC2530的P0\_4引脚配置为输出信号模式,只需按如下方式调用: ``` CC2530\_IOCTL(0, 4, CC2530\_OUTPUT); ``` 可见,在使用CC2530\_IOCTL后,GPIO口的配置变得非常简单,不再需要另外查找配置P0\_4的相关寄存器了! <br/> ## **使用CC2530\_IOCTL** 使用CC2530\_IOCTL前,需要分别定义LED和按键与CC2530引脚的连接。在头文件cc2530\_ioctl.h中,可以找到LED和按键与CC2530的引脚连接定义,代码如下: ### ``` //2. 51单片机入门/4. 串口通信实验/Workspace/code/common/cc2530_ioctl.h // LED与GPIO的连接定义 #define LED_PORT 0 //Led port. #define LED_PIN 4 //Led pin. #define LED P0_4 //Led GPIO. // Button与GPIO的连接定义 #define BUTTON_PORT 0 //Button port. #define BUTTON_PIN 1 //Button pin. #define BUTTON P0_1 //Button GPIO. ``` 以上代码定义了LED与CC2530的P0\_4引脚连接、按键与CC2530的P0\_1引脚连接。 ### 这样做的优点在于,如果硬件电路发生改变,例如LED接的不是P0\_4、按键接的不是P0\_1,那么开发者只需要在这里修改配置,而不需要修改代码。 <br/> 以下两个初始化函数的效果分别与前面章节的LED和按键初始化函数的效果是相同的。 ### ``` //2. 51单片机入门/2. GPIO实验/Workspace/code/ioConfig/ioConfig.c /* * 初始化LED */ static void initLed() { CC2530_IOCTL(LED_PORT,//LED的port LED_PIN,//LED的pin CC2530_OUTPUT);//配置为输出 LED = LED_OFF; } /* * 初始化按键 */ static void initButton() { CC2530_IOCTL(BUTTON_PORT,//按键的port BUTTON_PIN,//按键的pin CC2530_INPUT_PULLUP);//配置为上拉输入 } ``` <br/> ## **仿真调试** 1. 把开发板通过仿真器连接到电脑上。 2. 按一下仿真器的复位按键,如图所示。 ![](https://img.kancloud.cn/a6/65/a66518b91448e99ee3e1594218f21591_1710x612.png =200x) ### 3. 打开本实验代码,打开调试模式,编译链接通过后,点击“下载仿真”按钮全速运行程序,每当有按键按下时Terminal I/O中就会输出相应的信息,如图所示。 ![](https://img.kancloud.cn/03/38/03381fce1d48e5c5c0057963f798d1a4_830x274.png =600x) <br/> <br/> ## **商务合作** 如有以下需求,可扫码添加管理员好友,注明“**商务合作**” * 项目定制开发,技术范围:**NB-IoT**、**CATn(4G)**、**WiFi**、**ZigBee**、**BLE Mesh**以及**STM32**、**嵌入式Linux**等; * 入驻平台,成为讲师; * 接项目赚外快; * 善学坊官网:[www.sxf-iot.com](https://www.sxf-iot.com/) ![](https://img.kancloud.cn/ca/73/ca739f92cab220a3059378642e3bd502_430x430.png =200x) * 非合作**勿扰**,此处**非**技术支持