协议栈版本是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);
}
}
}
最后设置预处理程序,
三步就可以实现串口通讯了