蓝牙CC2541的串口通讯

协议栈版本是CC254x-1.3.2
TI把串口线管的东西封装在协议栈的一个NPI的文件夹中npi.c
下面是npi.c中的初始化函数

void NPI_InitTransport( npiCBack_t npiCBack )//初始化串口通讯
{
  halUARTCfg_t uartConfig;
  // configure UART
  uartConfig.configured           = TRUE;
  uartConfig.baudRate             = NPI_UART_BR;//波特率
  uartConfig.flowControl          = NPI_UART_FC;//进去改成FALSE,即关闭流控
  uartConfig.flowControlThreshold = NPI_UART_FC_THRESHOLD;
  uartConfig.rx.maxBufSize        = NPI_UART_RX_BUF_SIZE;
  uartConfig.tx.maxBufSize        = NPI_UART_TX_BUF_SIZE;
  uartConfig.idleTimeout          = NPI_UART_IDLE_TIMEOUT;
  uartConfig.intEnable            = NPI_UART_INT_ENABLE;
  uartConfig.callBackFunc         = (halUARTCBack_t)npiCBack;
  // start UART
  // Note: Assumes no issue opening UART port.
  (void)HalUARTOpen( NPI_UART_PORT, &uartConfig );
  return;
}

然后再 simpleBLEPeripheral.c文件中包含“npi.h”文件
在SimpleBLEPeripheral_Init函数中初始化串口通讯,
即调用NPI_InitTransport( NpiSerialCallback);
这里回调了一个函数NpiSerialCallback,这个函数要在 simpleBLEPeripheral.c文件中声明并实现。
如下:

//先声明一个回调函数
static void NpiSerialCallback( uint8 port, uint8 events );
//这是一个回调函数,实现了读写串口数据
static void NpiSerialCallback( uint8 port, uint8 events )
{
  (void)port;
  uint8 numBytes = 0;
  uint8 buf[128];

  if (events & HAL_UART_RX_TIMEOUT)   //串口有数据
  {
    numBytes = NPI_RxBufLen();       //读出串口缓冲区有多少字节
    if(numBytes)
    {
      //从串口缓冲区读出numBytes字节数据
      NPI_ReadTransport(buf,numBytes);    
      //把串口接收到的数据再打印出来
      NPI_WriteTransport(buf,numBytes);
    }
  }
}

最后设置预处理程序,
蓝牙CC2541的串口通讯_第1张图片

三步就可以实现串口通讯了

你可能感兴趣的:(自己随笔)