原创 SimpleApp例子串口出现乱码的原因(转载)

2009-7-8 09:29 2508 7 7 分类: 通信

SimpleApp例子串口出现乱码的原因(转载
“每次发射开始时候会发送乱码出来? 


我跟踪代码发现是DMA开始的时候发出来的?


难道是FIFO里面的随机数?


但是为什么每次都一样呢?


百思不得其解!!!!寻求帮忙~


解答:


下面我们来跟踪下串口发送程序:


1、首先看看SimpleApp.c文件的函数zb_ReceiveDataIndication()最后一句话为向串口发数据的。


2、debug_str


4c82872346ca8d9e4f2b0&690


这里我比较关心结构


4c82872346ca8dfdf4d69&690


这个结构有三个参数:事件句柄、长度、数据指针


3、osal_msg_send( MT_TaskID, (uint8 *)msg );


4c82872346ca8e4a83742&690


这个函数就是发送事件,这里不做讨论,因为这涉及到OS的内容,比较麻烦!


只要知道这个时间发送到MT去了,然后只需要去看看MT的处理事件函数就可以了。


4、MTEL.C


4c82872346ca8ee4fcb34&690


5、MT_ProcessCommand( (mtOSALSerialData_t *)msg_ptr );


4c82872346ca8f784792c&690


4c82872346ca8fc05237b&690


这里的事件句柄为:CMD_DEBUG_STR;


6、MT_ProcessDebugStr( (mtDebugStr_t *)msg );


4c82872346ca904e64030&690


7MT_BuildSPIMsg


4c82872346ca90691bc52&690


这里可以看到MSG第一个字节为:SOP_VALUE


#define SOP_VALUE       0x02


第二、三个字节为:SPI_RESPONSE_BIT | SPI_SYS_STRING_MSG,


#define SPI_RESPONSE_BIT                0x1000


#define SPI_SYS_STRING_MSG              0x0015


最后结果为:0x1015


第四个字节为:*msg++ = dataLen;数据长度


最后一个字节为*msg = SPIMgr_CalcFCS( msgPtr, (byte)(3 + dataLen) );


校验!!!!!!


 


8、HalUARTWrite


发送数据到串口!!!

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
7
关闭 站长推荐上一条 /3 下一条