串口收发实验
在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.日 期 : 2014年10月6日
作 者 : 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.日 期 : 2014年10月6日
作 者 : 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
实例测试