微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 求教:串口一直发送是怎么回事呢?

求教:串口一直发送是怎么回事呢?

时间:10-02 整理:3721RD 点击:

在协议栈上做串口透传的实验,打开串口助手发现一直在执行串口回调函数,这是为什么呢?

而且当手机给模块发送信息时串口助手上也是显示两条相同的信息,求教大神指点一下,该怎么办呢?

1 把串口回调的数据打印出来,你可以这么写,

static void SerialCallback(uint8 port, uint8 event)
{
    if(Hal_UART_RxBufLen(port))
    {
        read_data(data);
        serial_print(data);
        ...
    }

}

当然不一定是有数据来才进回调的,

/* UART Events */
#define HAL_UART_RX_FULL 0x01
#define HAL_UART_RX_ABOUT_FULL 0x02
#define HAL_UART_RX_TIMEOUT 0x04
#define HAL_UART_TX_FULL 0x08
#define HAL_UART_TX_EMPTY 0x10

这几种事件都有可能进入回调函数中

2 串口助手你有没有选择保存发送?

谢谢 admsadm。我的串口程序是这样的

if ( numBytes = Hal_UART_RxBufLen(port) )
  {
     (void)HalUARTRead (port, pktBuffer,numBytes);
      HalLcdWriteString(pktBuffer, HAL_LCD_LINE_5 );
      sbpSerialAppSendNoti(pktBuffer,numBytes);  

但是不行啊,当有信息发过来时,串口助手上还是连续显示两个相同的信息。求指教

啥意思?

比如本来应该接收hello的变成了hheelllloo这样?还是hellohello这样?

还有你这边串口的发送函数是这个:sbpSerialAppSendNoti?

最好把有关于串口发送那部分也贴出来,因为你不是说串口上面显示了两个相同的信息么。要么是串口调试上面有保存发送功能,要么你接收的时候再次发送了,要么你连续调用了发送函数。

显示的信息成了hellohello.

void sbpSerialAppSendNoti(uint8 *pBuffer,uint16 length)
{
uint8 len;
if(length > 20) len=19;
else
len = length;
static attHandleValueNoti_t pReport;
pReport.handle=0x2E;
pReport.len = len;
osal_memcpy(pReport.value, pBuffer, len);
GATT_Notification( 0, &pReport, FALSE );
}这是透传的程序,应该没问题的。

串口助手上没有保存发送的功能啊,我试了其他的程序可以的。至于接收之后在把信息发出去好像也没有,而且我也没在其他地方发送了啊,只在串口回调中接收了一次数据

那肯定是你发送了两次吧。其他想不出来还有什么原因了

方便的话把你整个回调函数贴一下

回调函数就是这个啊

i

void sbpSerialAppCallback(uint8 port, uint8 event)
{
uint8 pktBuffer[SBP_UART_RX_BUF_SIZE];
(void)event;
if ( numBytes = Hal_UART_RxBufLen(port) )
{

(void)HalUARTRead (port, pktBuffer,numBytes);
HalLcdWriteString(pktBuffer, HAL_LCD_LINE_5 );
sbpSerialAppSendNoti(pktBuffer,numBytes);

}

我用手机和BTOOL发送的数据,模块这边负责接收,然后在串口上显示出来

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

网站地图

Top