在TI官方从机例程中的simpleBLEPeripheral.c进行代码修改。
添加引脚驱动头文件:
#include
添加全局变量:
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=https://www.it610.com/article/=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‘sguide page62 and page 88.
【cc2640|cc2640 基于官方从机修改的通过手机实现蓝牙点灯例程】