驱动子系统开发
一、GPIO
1.1GPIO API介绍
wifiiot_ gpio.h接口简介:这个.h中包含声明GPIO接口函数,这些功能用于初始化GPIO。
wifiiot_ gpio_ ex.h接口简介:这个.h中包含声明扩展的GPIO接口函数,这些功能用于设置GPIO拉力和驱动器强度。
1.2查看LED对应的GPIO引脚
LED对应的GPIO引脚是GPIO2通过控制GPIO2输出的的电平信号来实现LED灯的闪烁。
●高电平时点亮LED灯。
●低电平时熄灭LED灯。
1.3操作GPIO点亮LED
打开"B1_ basic led_ blink" 工程的led_ example.c文件, 可在代码中查看实现LED以1S的频率闪烁代码
static void LedTask(void)
GpioInit();
Io5etFunc(MIFL 10T 10. MAPE GPIO_2, WIFI IOT, 10 FUNC GPI0 2. GPI0);
GploSetDLr(MIFI_ IOT 6GPIO IDXC 2。WIFI_ IoT. 6PI0. DIR OUT);
while (1)
GpioSetOutputVal(NIFI_ IOT GPIO IDX_ 2。1);
sleep(100000):
GpioSetoutputval(NIFI IOT_ GPI0 IDX 2, 0);
uslee(100008);
}
}
二、GPIO中断
2.1GPIO中断API介绍
wifiiot_ gpio.h接口简介:wifliot_ gpio.h中包含声明GPIO中断相关函数。
2.2查看按键对应的GPIO引脚
F1和F2按键对应的GPIO引脚是分别是GPIO11和GPI012,通过检测GPIO的电平信号来判断按键的状态。
2.3操作GPIO点亮LED
打开“B2_ basic. button"工程的button _example.c文件,可在代码中查看实现按键控制LED灯亮灭的代码
代码:
static void F1_ Pressed(char * arg)
(void)arg;
GpioSetOutputVal(WIFI_ IOT_ I0_ NAME_ GPIO 2,1);
static void F2_ Pressed(char * arg)
(void)arg;
GpioSetOutputVal(WIFI_ IOT_ I0_ NAME_ GPIO 2, 0);
}
static void ButtonE xamp1eEntry(void)
GpioInit();
IoSetFunc(WIFI_ IOT_ IO_ NAME_ GPIO 2, WIFI_ IOT_ IO_ FUNC_ GPIO .2_ _GPI0);
GpioSetDir(WIFI_ IOT_ IO_ NAME_ GPI0 2,WIFI_ IOT_ GPIO DIR _0UT);
IoSetFunc(WIFI_ IOT_ IO_ NAME_ GPI0 11, WIFI_ IOT_ IO_ FUNC_ GPIO_ 11_ GPIO);
GpioSetDir(WIFI_ IOT_ IO_ NAME_ GPIO_ 11, WIFI IOT_ GPIO_ DIR_ IN);
IoSetPull(WIFI_ IOT_ IO NAME_ GPIO_ 11, WIFI_ IOT_ IO_ PULL_ _UP);
GpioRegisterIsrFunc(WIFI_ IOT IO_ NAME_ GPI0 11,WIFI_ IOT_ INT_ TYPE _EDGE,
WIFI_ IOT_ GPIO EDGE_ FALL_ LEVEL_ LOW, F1 Pressed, NULL);
IoSetFunc(WIFI_ IOT_ I0_ NAME_ GPI0 12,WIFI_ IOT_ IO_ FUNC_ GPIO_ 12 GPIO);
GpioSetDir(WIFI_ IOT_ I0_ NAME_ GPIO_ 12, WIFI_ IOT_ GPIO_ DIR_ IN);
IoSetPull(WIFI_ IOT_ IO_ NAME_ GPIO 12,WIFI_ IOT I0_ PULL_ _UP);
GpioRegisterIsrFunc(WIFI_ IOT_ IO_ NAME_ GPI0 12,WIFI_ IOT_ INT_ TYPE _EDGE,
WIFI_ IOT_ GPIO_ EDGE_ FALL_ LEVEL_ LOW, F2 Pressed, NULL);
三、PWM
3.1PWM API介绍
wifiot pwm.h接口简介:这个wifiot_ _pwm.h中包含声明PWM接口函数。
3.2查看LED对应的GPIO引脚
LED对应的GPIO引脚是GPIO2通过控制GPIO2输出的的电平信号来实现LED灯的闪烁。
●高电平时点亮LED灯。
●低电平时熄灭LED灯。
3.3输出PWM改变LED亮度
打开“B3_ basic. _pwm. led"工程的 pwm example.c文件,可在代码中查看实现输出不同占空比的PWM来改变LED的亮度代码
static void PWMTask(void)
{
unsigned int i;
GpioInit();
IoSetFunc(WIFI_ _IOT_ I0_ NAME_ _GPIO_ 2, WIFI_ IOT_ IO_ FUNC_ GPIO_ 2_ PWM2_ _0UT);
GpioSetDir(WIFI_ IOT_ _GPIO_ IDX_ _2, WIFI_ _IOT_ _GPIO_ DIR_ _0UT);
PwmInit(WIFI_ IOT_ PWM_ PORT_ PWM2);
while (1)
{
for(i=0;i<40000;i+=100)
PwmStart(WIFI_ IOT_ PWM_ PORT_ PWM2,i, 40000);
usleep(10);
i=0;
}
}
四、ADC
4.1ADC API介绍
wifiiot adc.h接口简介:这个wifiot_ adc.h中包含声明ADC接口函数。
4.2查看ADC对应的GPIO引脚
本案例将使用板载用户按键F1来模拟GPIO口电压的变化。GPIO_ 11对应的是ADC Channel 5 ,所以需要编写软件去读取ADC Channel5的电压。
4.3ADC读取GPIO的电压值
打开“B4_ basic. adc"工程的adc example.c文件,可在代码中查看实现读取ADC通道5的电压值的代码
/*****获取电压值函数*****/
static float GetVoltage(void)
unsigned int ret;
unsigned short data;
ret = AdcRead(WIFI_ IOT_ ADC_ _CHANNEL_ 5,&data, WIFI_ IOT_ ADC_ EQU_ MODEL_ 8,
WIFI_ IOT_ ADC_ _CUR_ BAIS_ DEFAULT, 0xff);
if (ret != WIFI_ IOT_ SUCCESS)
printf("ADC Read Fail\n");
}
return (float)data * 1.8 * 4 / 4096.0;
}
五、12C
5.1 12CAPI介绍
wifliot_ i2c.h接口简介:wifliot_ i2c.h中包含声明I2C接口函数。
wifiot_ i2c_ ex.h接口简介:wifiliot i2c_ ex.h中包含声明扩展I2C接口函数。
5.2查看NFC的I2C引脚
NFC芯片的I2C对应的GPIO引脚是分别是GPIO0和GPIO1,所以需要编写软件使用GPIO_ 0和GPIO_ 1产生I2C信号去控制NFC芯片。
5.3I2C读写NFC芯片
打开"B5_ basic i2c. nfc”工程的i2c_ example.c文件,可在代码中查看实现NCF读写的代码。
uint8_ _t ret;
GpioInit();
IoSetFunc (WIFI_ IOT_ IO_ NAME_ GPIO_ 0, WIFI_ IOT_ IO_ FUNC_ _GPI0_ 0_ I2C1_ _SDA);
IoSetFunc(WIFI_ IOT_ I0_ NAME_ GPIO_ 1, WIFI_ IOT_ I0_ FUNC_ GPIO 1 I2C1 _SCL);
I2cInit(WIFI_ IOT_ I2C_ _IDX_ 1, 400000);
I2cSetBaudrate(WIFI_ IOT_ I2C_ IDX_ 1, 400000);
printf("I2C Test Start\n");
ret = storeText(NDEFFirstPos, (uint8_ t *)TEXT);
if (ret != 1)
printf("NFC Write Data Falied :%d ",ret);
ret = storeUr ihttp(NDEFLastPos, (uint8_ _t *)WEB);
if (ret != 1)
printf("NFC Write Data Falied :%d ",ret);
while (1)
printf("=================================\r\n");
printf(***********I2C_ NFC_ example* ********\r\n");
printf-(="=================================\r\n");
printf("Please use the mobile phone with NFC function close to the development board !\r\n");
usleep( 1000000) ;
六、UART
6.1UART API介绍
wifiiot uart.h接口简介:wifliot_ uart.h中包含声明UART接口函数。
6.2查看UART1对应的GPIO引脚
UART1对应的GPIO引脚是分别是GPIO5和GPIO6,将使用GPIO5和GPIO6进行UART数据的收发。
6.3UART读写数据
打开"B6 basic uart"工程的uart_ example.c文件,可在代码中查看实现UART读写数据。
static void UART_ _Task(void)
uint8_ t uart_ buff[UART_ BUFF_ SIZE] = {0};
uint8_ .t *uart_ buff_ ptr = uart_ buff;
uint32_ _t ret;
WifiIotUartAttribute uart_ attr = {
. baudRate = 9600 ,
//data_ bits: 8bits
. dataBits = 8,
. stopBits = 1,
.parity = 0,
};
ret = UartInit(WIFI_ IOT_ UART_ IDX_ 1, &uart_ attr, NULL);
if (ret != WIFI. IOT_ SUCCESS)
printf("Failed to init uart! Err code = %d\n", ret);
return;
printf("UART Test Start\n");
while (1)
print(="===============================\r\n");
print-f("=================================\r\n");
UartWrite(NIFI_ IOT_ UART_ IDX_ 1,(unsigned char *)data, strlen(data));
UartRead(WIFI_ IOT _UART_ IDX_ 1, uart_ buff ptr, UART _BUFF. SIZE);
printf("Uart1 read data:%s", uart. _buff_ ptr);
usleep( 1000000);
}