微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI无线射频设计 > 请教如何解决BLE1.4 串口收发丢数据与乱码问题

请教如何解决BLE1.4 串口收发丢数据与乱码问题

时间:12-22 整理:3721RD 点击:

TI的工程师,您好!
请问一:我如里把POWER_SAVING关闭,把BLE的Application也关闭串口收发正常,开启二者其中之一串口就不正常
 1、如果开启POWER_SAVING,串口接收数据会丢失
 2、如果开启BLE事件,串口接收会乱码
问题二:
 3、Peripheral协议栈编译完后本事已经占了
    6 272 bytes of XDATA memory
  加上我的应用程序后占用如下
    7 905 bytes of XDATA memory
    请问我在程序中如果用osal_mem_alloc();osal_mem_free()开400个字节的BUF会不会有问题,它开的内存是系统独立的内存吗?

我的配置如下:
1、用BLE 1.4的协议栈
2、串口开流控
下面是关闭POWER_SAVING与BLE后串口能稳定接收
xPOWER_SAVING
#if 0
  SimpleBLEPeripheral_ProcessEvent,                                 // task 11
  #endif
#if 0
  SimpleBLEPeripheral_Init( taskID++ );
  #endif

程序中的一些配置如下,
/*uart初始化代码,配置串口的波特率、流控制等*/
void serialAppInitTransport( )
{
  halUARTCfg_t uartConfig;

  // configure UART
  uartConfig.configured           = TRUE;
  uartConfig.baudRate             = SBP_UART_BR;//波特率
  uartConfig.flowControl          = SBP_UART_FC;//流控制
  uartConfig.flowControlThreshold = SBP_UART_FC_THRESHOLD;//流控制阈值,当开启flowControl时,该设置有效
  uartConfig.rx.maxBufSize        = SBP_UART_RX_BUF_SIZE;//uart接收缓冲区大小
  uartConfig.tx.maxBufSize        = SBP_UART_TX_BUF_SIZE;//uart发送缓冲区大小
  uartConfig.idleTimeout          = SBP_UART_IDLE_TIMEOUT;
  uartConfig.intEnable            = SBP_UART_INT_ENABLE;//是否开启中断
  uartConfig.callBackFunc         = sbpSerialAppCallback;//uart接收回调函数,在该函数中读取可用uart数据

  // start UART
  // Note: Assumes no issue opening UART port.
  (void)HalUARTOpen( SerialPort0, &uartConfig );

  return;
}

#define SerialPort0                  HAL_UART_PORT_0
#define SBP_UART_FC                    TRUE
#define SBP_UART_FC_THRESHOLD          48
#define SBP_UART_RX_BUF_SIZE           128
#define SBP_UART_TX_BUF_SIZE           128
#define SBP_UART_IDLE_TIMEOUT          6
#define SBP_UART_INT_ENABLE            TRUE
#define SBP_UART_BR                     HAL_UART_BR_9600

工程中的宏配置如下
INT_HEAP_LEN=3072
HALNODEBUG
OSAL_CBTIMER_NUM_TASKS=1
HAL_AES_DMA=TRUE
HAL_DMA=TRUE
xPOWER_SAVING
xPLUS_BROADCASTER
HAL_LCD=FALSE
HAL_LED=FALSE
HAL_UART=TRUE
HAL_UART_TRANS=TRUE
HAL_UART_DMA

串口接收我是单独开一个事件,当串口回调函数有数据时触发一个事件,在事件处理中再去查询串口收到数据大小并读出来,如果未接收完所要的数据长度就退出事件等待下次串口回调函数触发。

期待回复,谢谢

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top