在TI官方从机例程中的simpleBLEPeripheral.c进行代码修改。
添加引脚驱动头文件:
#include <ti/drivers/pin/PINCC26XX.h> //PIN driver
添加全局变量:
static PIN_Handle ledhandle=NULL;
在从机任务函数中添加 led on之后的代码。这里的代码是进行led灯初始化,四灯全亮。
static void SimpleBLEPeripheral_taskFxn(UArg a0, UArg a1)
{
// Initialize application
SimpleBLEPeripheral_init();
//led on
PIN_State ledstate={0};
PIN_Config ledconfig[]=
{
Board_LED1| PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH| PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED initially off */
Board_LED2| PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH| PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED initially off */
Board_LED3| PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH| PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED initially off */
Board_LED4| PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH| PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED initially off */
};
ledhandle=PIN_open(&ledstate, ledconfig);
// Application main loop
for (;;)
{
................
如果只是硬件点灯,不需要手机进行控制,则不需要定义 ledhandle 这个变量。
其实在main函数第一行就有引脚的初始化定义:
Void main()
{
PIN_init(BoardGpioInitTable);
我们跳到这个Table里,可以看到配置如下,上面的配置代码可以复制这里,也可以直接使用这个数组进行配置。
PIN_Config BoardGpioInitTable[] = {
Board_LED1 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED initially off */
Board_LED2 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED initially off */
Board_LED3 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED initially off */
Board_LED4 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED initially off */
Board_KEY_SELECT | PIN_INPUT_EN | PIN_PULLUP | PIN_HYSTERESIS, /* Button is active low */
Board_KEY_DOWN | PIN_INPUT_EN | PIN_PULLUP | PIN_HYSTERESIS, /* Button is active low */
Board_UART_TX | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL, /* UART TX pin at inactive level */
PIN_TERMINATE /* Terminate list */
};
配置到这里,烧录到开发板之后,四灯全亮,但只是硬件点亮,还不能进行手机控制。
下面修改与手机通信的代码。
原理:GATT(通用属性规范)负责设备之间的通信,它有五个属性。这里通过手机端的BLE READER app修改CHAR1值 达到控制led灯亮灭。
在 SimpleBLEPeripheral_processCharValueChangeEvt 函数中添加红色高亮代码:
static void SimpleBLEPeripheral_processCharValueChangeEvt(uint8_t paramID)
{
#ifndef FEATURE_OAD
uint8_t newValue;
switch(paramID)
{
case SIMPLEPROFILE_CHAR1:
SimpleProfile_GetParameter(SIMPLEPROFILE_CHAR1, &newValue);
LCD_WRITE_STRING_VALUE("Char 1:", (uint16_t)newValue, 10, LCD_PAGE4);
{
if(newValue==2)
{
PIN_setOutputValue(ledhandle,Board_LED1, Board_LED_OFF);
}
else
{ PIN_setOutputValue(ledhandle,Board_LED1, Board_LED_ON);}
}
break;
到此为止,代码修改就结束了。
BLE READER 操作:点击相应蓝牙名连接之后,依次点击Beacon、Proximity,出现char读写界面。按上面的代码,写入2关闭led1,其余合法数字打开led1.
参考TI developer‘s guide page62 and page 88.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)