BLE协议栈之串口数据收发

看了将近一个星期的BLE了 总的来说没有TI官方的开发板子实在是痛苦了 ,平时不屑一顾的小串口结构捣鼓了将近两天的时间都没有收发正常。崩溃。。。。。

好了,进入正题!

由于此次是直接开发产品,没有开发板的支持,所以串口成了必不可少的调试手段,但是由于师哥画板子的时候将串口0的引脚定义在了P1.5 和P1.4上,所以只能使用alt.2的方式进行串口设置,最后在BLE中实在是找不到如何将其设置成为Alt.2的方式,所以直接定义串口类型了,这样自我感觉反而少了好多宏定义牵扯。

先上一张IO口映射分配图:

BLE协议栈之串口数据收发_第1张图片

如图: 最后定板子的时候直接将串口定义在了红色标框的位置。

下面介绍一下我的解决方式,至少对于BLE串口来说应该是万能的方式了 只要小小的改变一下引脚定义即可方便的实现串口1,2两者ALT1和ALT2的切换了。

我是用的是SimpleBLEPeripheral工程作为例子解决的。

 

第一步:先加入HAL_UART=TRUE的宏定义

如图:

BLE协议栈之串口数据收发_第2张图片

第二步:

 在simpleBLEperipheral.h中加入#include "usart.h"

  在SimpleBLEPeripheral_Init()初始化函数中加入 InitUART();

第三部:

将usart.c和usart.h拷入到 C:\Texas Instruments\BLE-CC254x-1.4.0\Projects\ble\SimpleBLEPeripheral_2\Source

文件下载地址:http://download.csdn.net/detail/xiaoleiacm/8229067

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

下面是串口收发的一些函数

#include "usart.h"
#include "hal_uart.h"


#define RxBufferLen 200
#define TxBufferLen 200

int TxIndex=0;
int RxIndex=0;

char RxData[RxBufferLen]={0};
char TxData[TxBufferLen]={0};

/***************************************************************************************************
*\Function       UartCallback
*\Description    回调函数 
*\Return         void
*\Note          
*\Log            2014年12月5日
*                串口处理函数
***************************************************************************************************/ 
//**  注: 回调函数 在这里当做一个while循环即可 一旦收到了第一个字符 就不断调用回调函数进行处理
void UartCallback(uint8 port, uint8 event)
{
 
  int data_count=0;
  int len;

  data_count=(RxIndex+TxBufferLen-TxIndex)% TxBufferLen;  
  
   if(data_count>0)
   {    
          
      if(RxData[RxIndex-1]=='.')
      {
          len=TxIndex+data_count;      
          for(int i=TxIndex;i

串口收发以‘.’作为结束符。

 

结果显示:

BLE协议栈之串口数据收发_第3张图片


最后在膜拜一下师哥,真的是感觉好强大!!!

更新一下 usart.c

在其他的工程里可能会出现无法使用的情况  下面这个就没问题了

 

#include "usart.h"
#include "hal_uart.h"


#define RxBufferLen 120
#define TxBufferLen 120

int TxIndex=0;
int RxIndex=0;

char RxData[RxBufferLen]={0};
char TxData[TxBufferLen]={0};
void ISR_handle(void);

/***************************************************************************************************
*\Function       UartCallback
*\Description    回调函数 
*\Return         void
*\Note          
*\Log            2014年12月5日
*                串口处理函数   在此工程中无法使用
***************************************************************************************************/ 
//**  注: 回调函数 在这里当做一个while循环即可 一旦收到了第一个字符 就不断调用回调函数进行处理
void UartCallback(uint8 port, uint8 event)
{
 
  int data_count=0;
  int len;

  data_count=(RxIndex+TxBufferLen-TxIndex)% TxBufferLen;  
  
   if(data_count>0)
   {    
          
      if(RxData[RxIndex-1]=='.')
      {
          len=TxIndex+data_count;      
          for(int i=TxIndex;i0)
   {    
          
      if(RxData[RxIndex-1]=='.')
      {
          len=TxIndex+data_count;      
          for(int i=TxIndex;i


   在SimpleBLEPeripheral工程里 宏定义为

INT_HEAP_LEN=3072
HALNODEBUG
OSAL_CBTIMER_NUM_TASKS=1
HAL_AES_DMA=TRUE
HAL_DMA=TRUE
POWER_SAVING
xPLUS_BROADCASTER
HAL_LCD=TRUE
HAL_LED=TRUE
CC2540_MINIDK
HAL_UART=TRUE


 

你可能感兴趣的:(BLE协议栈)