CC2541 添加串口的流程和程序介绍
时间:10-02
整理:3721RD
点击:
CC2541 添加串口的流程和程序介绍
转载:http://blog.csdn.net/haozi0_0
CC2541是很多做低功耗蓝牙的最佳选择之一,在这里介绍一下CC2541的把添加串口的流程和程序,希望能够帮助到大家!不喜勿喷~
CC2541 历程里面有一个 npi.c 文件,是用来操作串口的,但是我没有直接使用这个文件,反正也就是初始化的操作而已,自己写就好了。
1. 先在 simpleBLEPeripheral.c 文件中添加头文件
[html] view plain copy 在CODE上查看代码片派生到我的代码片
#ifdef UART_DEBUG
#include "hal_uart.h"
#endif
别忘了在文件的的开头加上函数声明
[html] view plain copy 在CODE上查看代码片派生到我的代码片
void UartCallBack(uint8 port, uint8 event);
void UartCofig(void);
然后添加配置函数和回调函数,回调函数中可以收到输入的串口数据哦
[html] view plain copy 在CODE上查看代码片派生到我的代码片
#ifdef UART_DEBUG
uint8 Buffer[128];
uint16 Counter;
//----- UART 收到資料的 CallBack Code-----------------------------------------
void UartCallBack(uint8 port, uint8 event) //call back use
{
switch(event)
{
case HAL_UART_RX_TIMEOUT:
{
uint16 count;
count = Hal_UART_RxBufLen(HAL_UART_PORT_0) ;
// 把 UART 資料存到 Buffer
HalUARTRead(HAL_UART_PORT_0, &Buffer[Counter], count);
serialCounter = count + serialCounter;
//在此处添加处理函数,处理收到的串口数据
}
break;
default:
break;
}
}
void UartCofig(void)
{
halUARTCfg_t uartConfig;
// configure UART
uartConfig.configured = TRUE;
uartConfig.baudRate = HAL_UART_BR_115200;
uartConfig.flowControl = FALSE;
uartConfig.flowControlThreshold = 48;
uartConfig.rx.maxBufSize = 128;
uartConfig.tx.maxBufSize = 128;
uartConfig.idleTimeout = 6;
uartConfig.intEnable = TRUE;
uartConfig.callBackFunc = UartCallBack;
// start UART
// Note: Assumes no issue opening UART port.
(void)HalUARTOpen( HAL_UART_PORT_0, &uartConfig );
return;
}
#endif
2. 在 SimpleBLEPeripheral_Init() 函数中加入 UartCofig(),配置串口
3. 在 hal_uart.c 文件中加入 print_msg 函数,别忘了在 hal_uart.h 中声明函数,extern void print_msg(const char *fmt, ...); 然后就可以使用 print_msg 函数串口信息了。
[html] view plain copy 在CODE上查看代码片派生到我的代码片
#ifdef UART_DEBUG
#include "stdio.h"
#define PRINT_MSG_SKIP 0//1//0
#define MSG_SKIP_VALUE 191
#define FIRST_MSG_PRINT 3
//Skip message is FIRST_MSG_PRINT+1 ~ MSG_SKIP_VALUE => 4 ~ 191
int print_msg_skip_cnt = MSG_SKIP_VALUE;
void print_msg(const char *fmt, ...)
{
uint8 i;
char buf[64];
va_list args;
#if (PRINT_MSG_SKIP)
if (print_msg_skip_cnt > MSG_SKIP_VALUE-FIRST_MSG_PRINT)
{
print_msg_skip_cnt--;
}
else if (print_msg_skip_cnt>0 )
{
print_msg_skip_cnt--;
return;
}
#endif
#if 0 //printf sign for different printf
buf[0] = '^'; // in different H/W use different begin signal
buf[1] = '^';
HalUARTWrite(HAL_UART_PORT_0, (uint8*)buf, 2);
#endif
va_start(args, fmt);
vsprintf(buf, fmt, args);
va_end(args);
for(i=0; i<64; i++)
{
if(buf == NULL)
break;
if(buf == '\n')
{
char buf2[2];
buf2[0] = 0x0d;
buf2[1] = 0x0a;
HalUARTWrite(HAL_UART_PORT_0, (uint8*)buf2, 2);
}
else
{
HalUARTWrite(HAL_UART_PORT_0, (uint8*)&buf, 1);
}
}
}
#endif
4.在 Preprocessor 中添加如下宏定义,打开串口功能
HAL_UART=TRUE
HAL_UART_DMA=1
HAL_UART_TX_BY_ISR=1
UART_DEBUG
如果想使用其他扣得 Uart,设置这些宏定义就好了,这里我设置成了 DMA 方式。