买了一个CC2541的板子学习蓝牙,但没有买显示屏,感觉用串口输出是一样的。
一.串口输出信息
这部分的内容与《蓝牙4.0实战演练》是一致的。
IAR打开SimpleBLEPeripheral或者simpleBLECentral
1. TOOLS --> onBoard.c中添加串口的初始化信息
-
//add by cong
-
void UartInit(void)
-
{
-
halUARTCfg_t uartConfig;
-
-
/*uart confiure */
-
uartConfig.configured = TRUE;
-
uartConfig.baudRate = HAL_UART_BR_115200;
-
uartConfig.flowControl = HAL_UART_FLOW_OFF;
-
uartConfig.flowControlThreshold = MT_UART_THRESHOLD;
-
uartConfig.rx.maxBufSize = MT_UART_RX_BUFF_MAX;
-
uartConfig.tx.maxBufSize = MT_UART_TX_BUFF_MAX;
-
uartConfig.idleTimeout = MT_UART_IDLE_TIMEOUT;
-
uartConfig.intEnable = TRUE;
-
uartConfig.callBackFunc = NULL;
-
-
HalUARTOpen(HAL_UART_PORT_0, &uartConfig);
-
}
2. TOOLS --> onBoard.h中添加初始化函数的定义
-
//add by cong
-
extern void UartInit(void);
3. APP-->SimpleBLEPeripheral.c中添加串口初始化的调用
先加入头文件包含: #include "hal_uart.h",再添加如下代码
-
void SimpleBLEPeripheral_Init( uint8 task_id )
-
{
-
simpleBLEPeripheral_TaskID = task_id;
-
//串口初始化
-
UartInit();
-
//打印一个字符串
-
HalUARTWrite(HAL_UART_PORT_0, "Hello CC2541!\r\n", 15);
-
}
3.1 simpleBLECentral.c的不同
APP-->simpleBLECentral.c中添加串口初始化的调用
先加入头文件包含: #include "hal_uart.h",再添加如下代码
-
void SimpleBLECentral_Init( uint8 task_id )
-
{
-
//串口初始化
-
UartInit();
-
//打印一个字符串
HalUARTWrite(HAL_UART_PORT_0, "Hello CC2541!\r\n", 15);
-
}
4. 设置option
C/C++ Compiler --> Preprocessor --> Defined Symblos
-
xPOWER_SAVING
-
xPLUS_BROADCASTER
-
HAL_LCD=FALSE
-
HAL_LED=TRUE
-
CC2540_MINIDK
-
HAL_UART=TRUE
将POWER_SAVING 改为xPOWER_SAVING
并加上HAL_UART=TRUE
5. simpleBLECentral与SimpleBLEPeripheral.c
唯一的不同就是添加串口初始化的位置,参见3.1
此时simpleBLECentral与SimpleBLEPeripheral都能正常用串口进行输出了。
二.将屏幕信息重定向到串口
HAL--> Target --> Drivers--> hal_lcd.c中
#include "hal_uart.h"
-
void HalLcdWriteString ( char *str, uint8 option)
-
{
-
//将打印到lcd的信息,也打印一次到串口
-
HalUARTWrite(HAL_UART_PORT_0, (unsigned char*)str, (uint8)osal_strlen( (char*)str));
-
HalUARTWrite(HAL_UART_PORT_0, (unsigned char*)"\r\n", 2);
-
-
/* Display the string */
-
HalLcd_HW_WriteLine (option, str);
-
-
#endif //HAL_LCD
-
-
}
注意: 因为驱动机制不同,在windows是看不到启动信息,在ubuntu下用minicom是可以看到驱动信息的。
推荐: ubuntu上装virtualBox虚拟一个XP的虚拟机,然后虚拟机只需要捕获CC-DEBUG
a. 在minicom上分别打开两个板子的设备结点/dev/ttyUSB0还有ttyUSB1就可以看到打印信息了
b. 烧写时,只需要将cc-debug分别插在不同的设备上就可以了,硬件插拔,系统不需要改动。
三. 实现类printf
这儿就不用可变参数va_list了,据说是为了省空间。
HAL-->include--> hal_uart.h中添加定义
-
//add by cong
-
extern void printV(char *title, uint16 value, uint8 format);
-
extern void printS(uint8 *buf);
HAL-->target-->Drivers-->hal_uart.c中添加实现
因为己经去掉了宏POWER_SAVING,所以需要把#include "OSAL.h"拿到POWER_SAVING宏外
-
//add by cong
-
void printS(uint8 *buf)
-
{
-
HalUARTWrite(HAL_UART_PORT_0, buf, osal_strlen((char*)buf));
-
HalUARTWrite(HAL_UART_PORT_0, "\r\n",2); //把回车换行也加上,这样就方便多了
-
}
-
-
void printV(char *title, uint16 value, uint8 format)
-
{
-
uint8 strLen;
-
uint8 buf[256];
-
osal_memset(buf,0, 256);
-
strLen = (uint8)osal_strlen( (char*)title );
-
osal_memcpy( buf, title, strLen );
-
_ltoa( (uint32)value, &buf[strLen], format ); //数字转字符串
-
strLen = (uint8)osal_strlen( (char*)buf);
-
osal_memcpy(&buf[strLen], "\r\n", 2); //把回车换行也加上,这样就方便多了
-
HalUARTWrite(HAL_UART_PORT_0, buf, strLen+2);
-
}
阅读(11416) | 评论(1) | 转发(0) |