前言
shineblink core 开发板(简称Core)的库函数支持Uart功能,所以只需要调用两个API,即可实现Uart通信。
PS:Core 仅用五、六行代码即可实现Wifi/Ble/NB/Lora/ThreadMesh/RFID/Eth/Usb/RS485/RS232通信、以及30多种传感器/10多种硬件外设/10多种Mcu内设功能,并且这些功能最多可以 5 种随机组合同时运行。更多关于Core的内容可以在 shineblink.com 上了解。
一、UartLogger功能介绍
我们在开发过程中,有时需要一个第三方的硬件工具(UartLogger)来监控串口Tx、Rx的具体通信内容,这时我们用Core就可以很容易实现这一目的。并且Core可以将监控到的Tx、Rx通信内容以各种形式输出或存储在Core的TF卡上。
下图举了一个典型的例子来诠释UartLogger的作用:
利用UartLogger我们就可以在开发ESP8266串口WIFI模块时,捕捉到MCU和ESP8266通信的具体内容。其他类似的场景只要是Uart接口,UartLogger都可以发挥其作用。
二、完整源代码
注意:本例中假设被监控的Uart口波特率是115200,实际波特率需要您自己调整。
--配置Core的USB接口作为虚拟串口连接电脑,打印输出UartLogger捕捉到的内容
--当然,您也可以配置成蓝牙输出,WIFI输出,看您心情了
LIB_UsbConfig("CDC_PD")
LIB_GpioOutputConfig("D8","STANDARD")
LIB_GpioOutputConfig("D9","STANDARD")
LIB_Uart0Config("BAUDRATE_115200")
LIB_Uart1Config("BAUDRATE_115200")
prefix0 = {13, 10, 82, 88, 48, 58, 13, 10} --"\r\nRX0:\r\n"
prefix1 = {13, 10, 82, 88, 49, 58, 13, 10} --"\r\nRX1:\r\n"
--开始大循环
while(GC(1) == true)
do
recv_flag0,recv_tab0 = LIB_Uart0Recv()
if recv_flag0 == 1 then
LIB_GpioToggle("D8") --LED1 Toggle
LIB_UsbCdcSend(prefix0)
LIB_UsbCdcSend(recv_tab0)--在串口终端上显示RX0引脚捕捉到的内容
end
recv_flag1,recv_tab1 = LIB_Uart1Recv()
if recv_flag1 == 1 then
LIB_GpioToggle("D9") --LED2 toggle
LIB_UsbCdcSend(prefix1)
LIB_UsbCdcSend(recv_tab1)--在串口终端上显示RX1引脚捕捉到的内容
end
end
三、实验结果
本实验中,我们捕捉和ESP8266串口WIFI模块的通信内容,并打印输出到终端软件上,下图为捕捉到的具体内容:
四、更多花样
将监控到的Tx、Rx通信内容存储在TF卡这一功能在找问题时非常方便,我们不用一直守着设备,而是在某个时间取出TF卡查看内容即可。
具体实现很简单,只需要将上面例程中的LIB_UsbCdcSend()函数换成LIB_Fwrite()即可,例如:
原代码
LIB_UsbCdcSend(prefix0)
LIB_UsbCdcSend(recv_tab0)--在串口终端上显示RX0引脚捕捉到的内容
LIB_UsbCdcSend(prefix1)
LIB_UsbCdcSend(recv_tab1)--在串口终端上显示RX1引脚捕捉到的内容
替换后的代码:
LIB_Fwrite("abc.txt", prefix0)
LIB_Fwrite("abc.txt", recv_tab0)--将RX0引脚捕捉到的内容存到TF卡上abc.txt文件中
LIB_Fwrite("abc.txt", prefix1)
LIB_Fwrite("abc.txt", recv_tab1)--将RX1引脚捕捉到的内容存到TF卡上abc.txt文件中