0
点赞
收藏
分享

微信扫一扫

梅科尔工作室-14天华为培训四

驱动子系统开发

一、GPIO

1.1GPIO API介绍

wifiiot_ gpio.h接口简介:这个.h中包含声明GPIO接口函数,这些功能用于初始化GPIO。

梅科尔工作室-14天华为培训四_引脚

wifiiot_ gpio_ ex.h接口简介:这个.h中包含声明扩展的GPIO接口函数,这些功能用于设置GPIO拉力和驱动器强度。

梅科尔工作室-14天华为培训四_引脚_02

1.2查看LED对应的GPIO引脚

LED对应的GPIO引脚是GPIO2通过控制GPIO2输出的的电平信号来实现LED灯的闪烁。

●高电平时点亮LED灯。

●低电平时熄灭LED灯。

梅科尔工作室-14天华为培训四_sed_03

梅科尔工作室-14天华为培训四_引脚_04

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中断相关函数。

梅科尔工作室-14天华为培训四_ios_05

2.2查看按键对应的GPIO引脚

F1和F2按键对应的GPIO引脚是分别是GPIO11和GPI012,通过检测GPIO的电平信号来判断按键的状态。

梅科尔工作室-14天华为培训四_sed_06

梅科尔工作室-14天华为培训四_ios_07

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接口函数。

梅科尔工作室-14天华为培训四_sed_08

3.2查看LED对应的GPIO引脚

LED对应的GPIO引脚是GPIO2通过控制GPIO2输出的的电平信号来实现LED灯的闪烁。

●高电平时点亮LED灯。

●低电平时熄灭LED灯。

梅科尔工作室-14天华为培训四_ios_09

梅科尔工作室-14天华为培训四_引脚_10

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接口函数。

梅科尔工作室-14天华为培训四_ios_11

梅科尔工作室-14天华为培训四_引脚_12

4.2查看ADC对应的GPIO引脚

本案例将使用板载用户按键F1来模拟GPIO口电压的变化。GPIO_ 11对应的是ADC Channel 5 ,所以需要编写软件去读取ADC Channel5的电压。

梅科尔工作室-14天华为培训四_引脚_13

梅科尔工作室-14天华为培训四_sed_14

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接口函数。

梅科尔工作室-14天华为培训四_sed_15

wifiot_ i2c_ ex.h接口简介:wifiliot i2c_ ex.h中包含声明扩展I2C接口函数。

梅科尔工作室-14天华为培训四_sed_16

5.2查看NFC的I2C引脚

NFC芯片的I2C对应的GPIO引脚是分别是GPIO0和GPIO1,所以需要编写软件使用GPIO_ 0和GPIO_ 1产生I2C信号去控制NFC芯片。

梅科尔工作室-14天华为培训四_sed_17

梅科尔工作室-14天华为培训四_sed_18

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接口函数。

梅科尔工作室-14天华为培训四_sed_19

6.2查看UART1对应的GPIO引脚

UART1对应的GPIO引脚是分别是GPIO5和GPIO6,将使用GPIO5和GPIO6进行UART数据的收发。

梅科尔工作室-14天华为培训四_引脚_20

梅科尔工作室-14天华为培训四_引脚_21

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);

}

举报

相关推荐

0 条评论