0x00 CREELINKS平台简介
CREELINKS(创e联)是由大信科技有限公司研发,集合软硬件、操作系统、数据云储存、开发工具于一体,用于物联网产品的设计、研发与生产的平台。
平台涉及智能硬件、车联网、智能家居、可穿戴设备、工业控制等各个物联网领域。旨在辅助中小型企业快速完成物联网产品原型的设计与开发;并为开源软硬件爱好者、硬件DIY极客、教育机构等提供更高效的资源。
平台包含通用功能模块、操作系统、核心库、模块驱动库、物联网典型产品的解决方案及相关开发工具。
CREELINKS http://www.creelinks.com
0x01 什么是CeGpio
CeGpio是CREELINKS平台中将不同处理器平台中Gpio口(通用输入输出口/通用双向IO口)的共性提取出来,整理并编写出来的标准库。CeGpio标准库包含了Gpio操作相关的所有属性及API接口函数,如: 可将Gpio口配置为输入或输出模式,可以设置或获取此端口的高低电平等。其标准库的头文件为CeGpio.h,不同处理器平台实现的源文件名统一为CeGpio.c。
详细介绍如下:
1、资源介绍
Creelinks平台Gpio对象的操作头文件,包含有关处理器平台Gpio内容的相关操作。可能不同处理器平台,所提供的GPIO的模式不一致、最大电平翻转速率不一致,使用Gpio资源时,尽量使用CeMcu.h中的相关Ad属性宏定义。
2、相关配置
在CeMcu.h中有与处理器平台有关的配置项如下:
#define CE_GPIO_SPEED_MHZ (uint32)50 /*!< GPIO口的最大电平翻转速率*/ /** * @brief 枚举,GPIO模式配置 */ typedef enum { CE_GPIO_MODE_AIN, /*!< 模拟输入*/ CE_GPIO_MODE_IN_FLOATING, /*!< 浮空输入*/ CE_GPIO_MODE_IPD, /*!< 下拉输入*/ CE_GPIO_MODE_IPU, /*!< 上拉输入*/ CE_GPIO_MODE_OUT_OD, /*!< 开漏输出*/ CE_GPIO_MODE_OUT_PP, /*!< 推挽输出*/ CE_GPIO_MODE_AF_OD, /*!< 复用开漏输出*/ CE_GPIO_MODE_AF_PP, /*!< 复用推挽输出*/ }CE_GPIO_MODE;
其中:
CE_GPIO_SPEED_MHZ:当前处理器平台Gpio资源最大电平翻转速率、如STM32Fx10x处理器平台最大为50M,可根据需要自行修改。
CE_GPIO_Mode:Gpio口可配置的模式。
3、属性对象
/** * @brief 结构体,GPIO对象可用属性集合 */ typedef struct { CE_RESOURCE ceResource; /*!< GPIO对应的资源号*/ CE_GPIO_MODE ceGpioMode; /*!< 所设定的GPIO引脚模式*/ CeExGpioPar ceExGpioPar; /*!< 与处理器平台相关的额外参数结构体,用以提高代码效率,用户列须关注*/ }CeGpio;
其中:
ceResource:对应核心模块的Gpio资源号,只要在核心板上,资源接口中带G标号即可。
ceGpioMode: 设置当前Gpio口的模式,此枚举在CeMcu.h文件中定义。
ceExGpioPar:用于存不同的处理器平台,Gpio属性对象需要的额外参数。此结构体在CeMcu.h文件中定义。
4、操作对象
/** * @brief 结构体,GPIO对象可用操作集合 */ typedef struct { CE_STATUS (*initial)(CeGpio* ceGpio); /*!< @brief 初始化一个GPIO @param ceGpio:GPIO属性对象集合指针*/ void (*setGpioBit)(CeGpio* ceGpio); /*!< @brief 设置GPIO口的值为1 @param ceGpio:GPIO属性对象集合指针*/ void (*resetGpioBit)(CeGpio* ceGpio); /*!< @brief 设置GPIO口的值为0 @param ceGpio:GPIO属性对象集合指针*/ uint8 (*getGpioBit)(CeGpio* ceGpio); /*!< @brief 获取GPIO口的值,0x01和0x00 @param ceGpio:GPIO属性对象集合指针 @return 当前Gpio口的电平状态*/ void (*setGpioMode)(CeGpio* ceGpio,CE_GPIO_MODE ceGpioMode);/*!< @brief 配置Gpio口的工作方式 @param ceGpio:GPIO属性对象集合指针 @param ceGpioMode:GPIO工作模式*/ }CeGpioOpBase; extern const CeGpioOpBase ceGpioOp; /*!< 所有与GPIO相关的操作*/
其中:
initial:对一个Gpio资源进行初始化,如果在CeMcu.h中的宏定义 __CE_CHECK_PAR__处于打开状态,则会对输入的CeGpio属性对象进行参数检查。
setGpioBit:设置Gpio口为高电平。
resetGpioBit:设置Gpio口为低电平。
getGpioBit:获取Gpio口的状态,高电平或低电平。
setGpioMode:重新配置Gpio口的工作模式。
5、执行流程
6、应用示例
/** ****************************************************************************** * @brief 使用流程及示例程序(基于前后台非操作系统环境) * @function 设定Gpio每500ms进行一次电平翻转 ****************************************************************************** #include "Creelinks.h" CeGpio myGpio; //定义Gpio属性对象 int main(void) { ceSystemOp.initial(); //Creelinks环境初始化 ceSystemOp.initialDebug(RxUart); //通过Uart串口输出Debug信息到上位机 //TODO:请在此处插入模块初始化等操作 myGpio.ceResource = RxG; //指定Gpio使用的资源号 myGpio.ceGpioMode = CE_GPIO_MODE_OUT_OD; //配置Gpio的工作模式 ceGpioOp.initial(&myGpio); //初始化Gpio while (1) { ceSystemOp.mainTask(); //Creelinks环境主循环任务,请保证此函数能够被周期调用 //TODO:请在此处插入用户操作 ceGpioOp.setGpioBit(&myGpio); //设定Gpio为高电平 ceSystemOp.printf("Gpio status: up.\n"); //向上位机输出调试信息 ceSystemOp.delayMs(500); //延时500ms ceGpioOp.resetGpioBit(&myGpio); //设定Gpio为高电平 ceSystemOp.printf("Gpio status: down.\n"); //向上位机输出调试信息 ceSystemOp.delayMs(500); //延时500ms }; } ****************************************************************************** */
0x02 CeGpio的注意事项
0x03 CeGpio在不同处理器的应用实例
1、STM32平台下的ELinkSTM核心板下使用CeGpio控制Led灯。代码及动画效果如下:
/** ****************************************************************************** * @brief 使用流程及示例程序(基于前后台非操作系统环境) * @function 设定Gpio每500ms进行一次电平翻转 ******************************************************************************/ #include "Creelinks.h" CeGpio myGpio; //定义Gpio属性对象 int main(void) { ceSystemOp.initial(); //Creelinks环境初始化 ceSystemOp.initialDebug(R9Uart); //通过Uart串口输出Debug信息到上位机 //TODO:请在此处插入模块初始化等操作 myGpio.ceResource = R13GP; //指定Gpio使用的资源号 myGpio.ceGpioMode = CE_GPIO_MODE_OUT_PP; //配置Gpio的工作模式 ceGpioOp.initial(&myGpio); //初始化Gpio ) { ceSystemOp.mainTask(); //Creelinks环境主循环任务,请保证此函数能够被周期调用 //TODO:请在此处插入用户操作 ceGpioOp.setGpioBit(&myGpio); //设定Gpio为高电平 ceSystemOp.printf("Gpio status: up.\n"); //向上位机输出调试信息 ceSystemOp.delayMs(); //延时500ms ceGpioOp.resetGpioBit(&myGpio); //设定Gpio为高电平 ceSystemOp.printf("Gpio status: down.\n"); //向上位机输出调试信息 ceSystemOp.delayMs(); //延时500ms }; } /****************************************************************************** */
STM32平台下的ELinkSTM核心板下使用CeGpio控制Led灯
2、Arduino平台下的UNO R3开发板下使用CeGpio控制Led灯。代码及动画效果如下:
/** ****************************************************************************** * @brief 使用流程及示例程序(基于Arduino UNO平台) * @function 设定Gpio每500ms进行一次电平翻转 ******************************************************************************/ #include <Creelinks.h> CeGpio myGpio; //定义Gpio属性对象 void setup() { // put your setup code here, to run once: myGpio.ceResource = RD13G; //指定Gpio使用的资源号 myGpio.ceGpioMode = CE_GPIO_MODE_OUT_PP; //配置Gpio的工作模式 ceGpioOp.initial(&myGpio); //初始化Gpio } void loop() { // put your main code here, to run repeatedly: ceGpioOp.setGpioBit(&myGpio); //设定Gpio为高电平 delay(); //延时500ms ceGpioOp.resetGpioBit(&myGpio); //设定Gpio为低电平 delay(); //延时500ms*/ } /******************************************************************************/
Arduino平台下的UNO R3开发板下使用CeGpio控制Led灯