ble学习笔记十三-------------ble协议栈之串口收发实验

串口收发实验 

simpleBLEPeripheral.c文件添加如下内容

/*串口实验导入头文件*/

#include "hal_uart.h"

//存放读取串口数据的缓冲数组

static uint8 SerialRxBuf[128]={0};

//缓冲数据的标志位

static uint8 RxIndex = 0;

 //函数声明:串口初始化

void Serial_Init(void);

由于本实验没有对事件作处理,所以不用在SimpleBLEPeripheral_ProcessEvent()函数中添加实现代码

/*检查是否有启动设务任务*/

  if ( events & SBP_START_DEVICE_EVT )

  {

         ....

    //初始化串口

Serial_Init();

...

   }

  if ( events & UART_EVENT )

  {

    HalLcdWriteString( (char*)SerialRxBuf, HAL_LCD_LINE_6 );     

    HalUARTWrite(HAL_UART_PORT_0, SerialRxBuf, osal_strlen(SerialRxBuf));

    osal_memset(SerialRxBuf, 0, 128);

    return (events ^ UART_EVENT);

  }

SimpleBLEPeripheral.c 文件最后添加如下内容 

/*****************************************************************************

 函 数 名  : SerialCb

 功能描述  串口通讯回调

 输入参数  : uint8 port

             uint8 events

 输出参数  

 返 回 值  :

 调用函数  :

 被调函数  :

 修改历史      :

  1.日    期   : 2014106

    作    者   :  retacn

    修改内容   新生成函数

*****************************************************************************/

//串口实验所用变量

unsigned char uartbuf[152];

static void SerialCb( uint8 port, uint8 events )

{

     if((events & HAL_UART_TX_EMPTY)||( events & HAL_UART_TX_FULL ))  // 发送区满或者空

     {

         return;

     }

     uint16 usRxBufLen = Hal_UART_RxBufLen(HAL_UART_PORT_0);  // 读取接收据量

     if(usRxBufLen)

     {

         usRxBufLen = MIN(128,usRxBufLen);

         uint16 readLen = HalUARTRead(HAL_UART_PORT_0, &SerialRxBuf[RxIndex], usRxBufLen);   // 读取数据到缓冲区

         RxIndex += readLen;

         readLen %= 128;

        osal_start_timerEx(simpleBLEPeripheral_TaskID, UART_EVENT, 5);  // 启动定时器

     }

}

/*****************************************************************************

 函 数 名  : Serial_Open

 功能描述  打开串口

 输入参数  : taskId 任务ID

 输出参数  

 返 回 值  : static

 调用函数  :

 被调函数  :

 修改历史      :

  1.日    期   : 2014106

    作    者   :  retacn

    修改内容   新生成函数

*****************************************************************************/

static void Serial_Init(void)

{

    halUARTCfg_t SerialCfg = {0};

    SerialCfg.baudRate = HAL_UART_BR_115200;    // 波特率

    SerialCfg.flowControl = HAL_UART_FLOW_OFF;  // 流控制

    SerialCfg.callBackFunc = SerialCb;          // 回调函数

    SerialCfg.intEnable    = TRUE;

    SerialCfg.configured   = TRUE;

    HalLcdWriteString( "Open Uart0", HAL_LCD_LINE_5 );    // 在第5行显示启动信息

    HalUARTOpen(HAL_UART_PORT_0, &SerialCfg);

    HalUARTWrite(HAL_UART_PORT_0, "Hello MT254xBoard ", osal_strlen("Hello MT254xBoard "));

}

SimpleBLEPeripheral.h头文件中添加

#define UART_EVENT                                        0x0004

查看函数或函数的定义,右击函数名go to definition

实例测试

原文地址:https://www.cnblogs.com/retacn-yue/p/6194242.html