TI中文支持网
TI专业的中文技术问题搜集分享网站

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

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

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

admin admin1:

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 串口助手你有没有选择保存发送?

Amos Chen:

回复 admin admin1:

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

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

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

admin admin1:

回复 Amos Chen:

啥意思?

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

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

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

Amos Chen:

回复 admin admin1:

显示的信息成了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 );}这是透传的程序,应该没问题的。

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

admin admin1:

回复 Amos Chen:

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

admin admin1:

回复 admin admin1:

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

Amos Chen:

回复 admin admin1:

回调函数就是这个啊

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发送的数据,模块这边负责接收,然后在串口上显示出来

赞(0)
未经允许不得转载:TI中文支持网 » 求教:串口一直发送是怎么回事呢?
分享到: 更多 (0)