Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2150655
  • 博文数量: 438
  • 博客积分: 3871
  • 博客等级: 中校
  • 技术积分: 6075
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-10 00:11
个人简介

邮箱: wangcong02345@163.com

文章分类

全部博文(438)

文章存档

2017年(15)

2016年(119)

2015年(91)

2014年(62)

2013年(56)

2012年(79)

2011年(16)

分类: 嵌入式

2014-09-08 12:52:18

买了一个CC2541的板子学习蓝牙,但没有买显示屏,感觉用串口输出是一样的。
一.串口输出信息
这部分的内容与《蓝牙4.0实战演练》是一致的。
IAR打开SimpleBLEPeripheral或者simpleBLECentral
1. TOOLS --> onBoard.c中添加串口的初始化信息
  1. //add by cong
  2. void UartInit(void)
  3. {
  4.   halUARTCfg_t uartConfig;
  5.   
  6.   /*uart confiure */
  7.   uartConfig.configured = TRUE;
  8.   uartConfig.baudRate = HAL_UART_BR_115200;
  9.   uartConfig.flowControl = HAL_UART_FLOW_OFF;
  10.   uartConfig.flowControlThreshold = MT_UART_THRESHOLD;
  11.   uartConfig.rx.maxBufSize = MT_UART_RX_BUFF_MAX;
  12.   uartConfig.tx.maxBufSize = MT_UART_TX_BUFF_MAX;
  13.   uartConfig.idleTimeout = MT_UART_IDLE_TIMEOUT;
  14.   uartConfig.intEnable = TRUE;
  15.   uartConfig.callBackFunc = NULL;
  16.    
  17.   HalUARTOpen(HAL_UART_PORT_0, &uartConfig);
  18. }
2. TOOLS --> onBoard.h中添加初始化函数的定义
  1. //add by cong
  2. extern void UartInit(void);
3. APP-->SimpleBLEPeripheral.c中添加串口初始化的调用
先加入头文件包含:  #include "hal_uart.h",再添加如下代码
  1. void SimpleBLEPeripheral_Init( uint8 task_id )
  2. {
  3.   simpleBLEPeripheral_TaskID = task_id; 
  4.   //串口初始化
  5.   UartInit();
  6.   //打印一个字符串
  7.   HalUARTWrite(HAL_UART_PORT_0, "Hello CC2541!\r\n", 15);
  8. }
3.1 simpleBLECentral.c的不同
APP-->simpleBLECentral.c中添加串口初始化的调用
先加入头文件包含:  #include "hal_uart.h",再添加如下代码
  1. void SimpleBLECentral_Init( uint8 task_id )
  2. {
  3.   //串口初始化
  4.   UartInit();
  5.   //打印一个字符串
      HalUARTWrite(HAL_UART_PORT_0, "Hello CC2541!\r\n", 15);
  6. }
4. 设置option
C/C++ Compiler --> Preprocessor --> Defined Symblos
  1. xPOWER_SAVING
  2. xPLUS_BROADCASTER
  3. HAL_LCD=FALSE
  4. HAL_LED=TRUE
  5. CC2540_MINIDK
  6. 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"
  1. void HalLcdWriteString ( char *str, uint8 option)
  2. {
  3.   //将打印到lcd的信息,也打印一次到串口
  4.   HalUARTWrite(HAL_UART_PORT_0, (unsigned char*)str, (uint8)osal_strlen( (char*)str));
  5.   HalUARTWrite(HAL_UART_PORT_0, (unsigned char*)"\r\n", 2);
  6.   
  7.   /* Display the string */
  8.   HalLcd_HW_WriteLine (option, str);

  9. #endif //HAL_LCD

  10. }
注意: 因为驱动机制不同,在windows是看不到启动信息,在ubuntu下用minicom是可以看到驱动信息的。
推荐: ubuntu上装virtualBox虚拟一个XP的虚拟机,然后虚拟机只需要捕获CC-DEBUG
      a. 在minicom上分别打开两个板子的设备结点/dev/ttyUSB0还有ttyUSB1就可以看到打印信息了
      b. 烧写时,只需要将cc-debug分别插在不同的设备上就可以了,硬件插拔,系统不需要改动。 


三. 实现类printf
这儿就不用可变参数va_list了,据说是为了省空间。
HAL-->include--> hal_uart.h中添加定义
  1. //add by cong
  2. extern void printV(char *title, uint16 value, uint8 format);
  3. extern void printS(uint8 *buf);
HAL-->target-->Drivers-->hal_uart.c中添加实现
因为己经去掉了宏POWER_SAVING,所以需要把#include "OSAL.h"拿到POWER_SAVING宏外
  1. //add by cong
  2. void printS(uint8 *buf)
  3. {
  4.   HalUARTWrite(HAL_UART_PORT_0, buf, osal_strlen((char*)buf)); 
  5.   HalUARTWrite(HAL_UART_PORT_0, "\r\n",2); //把回车换行也加上,这样就方便多了
  6. }

  7. void printV(char *title, uint16 value, uint8 format)
  8. {
  9.   uint8 strLen;
  10.   uint8 buf[256];
  11.   osal_memset(buf,0, 256);
  12.   strLen = (uint8)osal_strlen( (char*)title );
  13.   osal_memcpy( buf, title, strLen );
  14.   _ltoa( (uint32)value, &buf[strLen], format );  //数字转字符串
  15.   strLen = (uint8)osal_strlen( (char*)buf);
  16.   osal_memcpy(&buf[strLen], "\r\n", 2);          //把回车换行也加上,这样就方便多了
  17.   HalUARTWrite(HAL_UART_PORT_0, buf, strLen+2);
  18. }



阅读(11416) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

Jasonllz2015-05-04 11:31:44

你好,谢谢你的分享,但我看到你的都是以uart0为例,我想请教一下有没有uart1的例子,我现在uart0能用,但uart1无法用,不知道怎么回事,谢谢.