本文作者:ST工程师 Lucien KUANG
点击下载pdf文档查看:
FAQ_如何使用任意GPIO模拟串口.pdf
(590.31 KB, 下载次数: 15)
关键词:BlueNRG
问题: 有些客户在项目后期调试时,没有串口可以引出,或者硬件串口被占用了,没有其他串口调试。
然后遇到问题时不知道怎么调试。
ST工程师解答: 我个人建议,如果简单的应用,可以用一个GPIO高低电平来验证来验证。复杂一些的调试,可以
操作步骤
a. 使用GPIO 模拟串口时序
数据帧:
是串行通讯的数据单元,其中各位的意义如下:起始位:先发出一个逻辑”0”的信号,表示传输数据的开始。数据位:紧接着起始位之后,数据位的个数可以是4、5、6、7、8等,(通常使用8位)构成一个字符,通常采用ASCII码,从最低位开始传送,通过时钟定位。奇偶校验位:数据位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。 由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。
b. 增加重写vsprintf
c. 增加FIFO存储log,控制输出
移植到其他工程方法
已给出参考Demo ,链接地址:
https://github.com/wallekuang/BlueNRG_Demo
BlueNRG_Demo/BlueNRG-1_2 DK 3.1.0/Project/Supply/BLE_Simulate_Uart/
a. 添加相关文件 cassert.c user_buffer.c simulate_uart.c 到目标工程
b. 在程序开始处设置初始化 simulate_uart_init();
c. 在sistick 中断中 void SysTick_Handler(void) 增加simulate_uart_handler();
d. 使用COMPrintf()输出日志 用法和printf一样
e. 如果调试带睡眠的程序,增加log, 需要在睡眠检测函数中增加,因为睡眠systick是不工作,会影响log输出。
SleepModes App_SleepMode_Check(SleepModes sleepMode)
{
if(SdkEvalComIOTxFifoNotEmpty() || SdkEvalComUARTBusy())
return SLEEPMODE_RUNNING;
if(simulate_uart_fifo_len())
return SLEEPMODE_RUNNING;
return SLEEPMODE_NOTIMER;
}
|