求教:串口一直发送是怎么回事呢?
在协议栈上做串口透传的实验,打开串口助手发现一直在执行串口回调函数,这是为什么呢?
而且当手机给模块发送信息时串口助手上也是显示两条相同的信息,求教大神指点一下,该怎么办呢?
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发送的数据,模块这边负责接收,然后在串口上显示出来