串口数据调试-直观表示

cs 复制代码
/*串口测试*/
/*下载此段程序后,分别旋转4个电位器旋钮,OLED显示的4个AD值会对应变化*/
/*同时这些值也会通过串口以文本格式发送出去*/
uint16_t RP1, RP2, RP3, RP4;

int main(void)
{
	/*模块初始化*/
	OLED_Init();		//OLED初始化
	RP_Init();			//电位器旋钮初始化
	Serial_Init();		//串口初始化,波特率9600
	
	while (1)
	{
		/*获取4个电位器旋钮的AD值*/
		RP1 = RP_GetValue(1);
		RP2 = RP_GetValue(2);
		RP3 = RP_GetValue(3);
		RP4 = RP_GetValue(4);
		
		/*OLED显示4个电位器旋钮的AD值*/
		OLED_Printf(0, 0, OLED_8X16, "RP1:%04d", RP1);
		OLED_Printf(0, 16, OLED_8X16, "RP2:%04d", RP2);
		OLED_Printf(0, 32, OLED_8X16, "RP3:%04d", RP3);
		OLED_Printf(0, 48, OLED_8X16, "RP4:%04d", RP4);
		
		/*OLED更新*/
		OLED_Update();
		
		/*使用串口格式化打印函数,将4个AD值通过串口发送出去*/
		Serial_Printf("%d,%d,%d,%d\r\n", RP1, RP2, RP3, RP4);
		
		/*延时10ms,避免发送过快*/
		Delay_ms(10);
	}
}

图片展示的是 SerialPlot 软件的界面,它正在实时绘制从串口接收到的数据波形。结合你之前提供的单片机代码(RP1, RP2, RP3, RP4),我们可以非常直观地分析出当前系统的运行状态。

1. 软件与数据对应关系
  • 软件名称:SerialPlot(一款开源的串口示波器软件)。
  • 数据来源 :你的单片机通过串口发送的数据,格式为 %d,%d,%d,%d\r\n。
  • 通道映射 :
    • Channel 1 (粉红色) →→ 对应代码中的 RP1。
    • Channel 2 (紫色) →→ 对应代码中的 RP2。
    • Channel 3 (青色/蓝绿色) →→ 对应代码中的 RP3。
    • Channel 4 (橙黄色) →→ 对应代码中的 RP4。

其中也有相应需要注意的点:

1.1.格式匹配是核心(最容易出错的地方)

代码中使用的是 %d,%d,%d,%d\r\n。

  • 分隔符必须严格一致 :你的 SerialPlot 软件(截图底部)设置的是 Comma (逗号) 作为分隔符。如果你的代码里写成了空格(%d %d...)或者分号,SerialPlot 就无法识别这是 4 个独立的数据,可能会把它们当成 1 个巨大的数字,或者直接报错。
  • 换行符的作用 :\r\n (回车换行) 非常重要。很多串口绘图软件(包括 SerialPlot)是靠检测"换行符"来判断 "这一帧数据结束了,可以开始画图了" 。如果你忘了加 \n,软件可能会一直等待,直到缓冲区溢出才画出一堆乱七八糟的线。
1.2. 发送速率与阻塞风险(性能瓶颈)

这是一个典型的"阻塞式"发送逻辑。

  • 耗时操作 :串口发送速度(9600波特率)远低于 CPU 运行速度。
    • 发送一个字符大约需要 1/96001/9600 秒 ≈104μs≈104μs 。
    • 你的数据格式大概是 4095,4095,4095,4095\r\n,大约 20 个字符。
    • 发送一次大概需要 20×104μs≈2ms20×104μs≈2ms 。
  • CPU 等待 :在 Serial_Printf 执行期间,CPU 是停下来等待发送完成的。这意味着在这 2ms 内,你的单片机什么别的都干不了(不能响应按键、不能控制电机)。
  • 延时配合 :代码最后的 Delay_ms(10) 是非常明智的。如果没有这个延时,主循环全速跑,串口发送队列瞬间就会塞满,导致程序卡死在发送函数里,甚至触发看门狗复位。

总结:调试建议

结合你的 SerialPlot 截图,如果波形出现以下情况,请检查 Serial_Printf:

  1. 波形是一条斜线直冲云霄或跌入谷底 →→ 检查分隔符是不是逗号,或者有没有漏掉逗号。
  2. 波形断断续续,或者很久才动一下 →→ 检查是否忘记加 \r\n,或者 Delay_ms 时间太短导致堵塞。
  3. 数值显示错误(比如 4095 变成了 -1) →→ 检查 %d 和变量类型是否匹配。
相关推荐
~kiss~1 小时前
LangChain 基础学习
学习·langchain
一木 之林1 小时前
提示词工程学习总结:用 Few-shot 把大模型调教成金融文本分类、抽取与匹配的自动化流水线
人工智能·学习·计算机视觉·金融·分类
传奇开心果编程2 小时前
【Compose Multiplatform 跨端开发学与练】第7课 平台适配与互操作
android·windows·学习·ui·ios·kotlin·composer
我命由我123452 小时前
Photoshop - Photoshop 使用对齐功能定位元素
学习·职场和发展·产品运营·求职招聘·职场发展·产品经理·学习方法
阳光九叶草LXGZXJ4 小时前
达梦数据库-报错-16-MERGE INTO提示:无效的列名[XX]
linux·运维·数据库·sql·学习
xxwl5854 小时前
RabbitMQ 学习笔记
笔记·学习·rabbitmq
黑妹天下第一乖4 小时前
第 08 讲:阿加犀 AidGenSE 端侧大模型服务化与 OpenAI 兼容接口
人工智能·嵌入式硬件·深度学习·机器人·iot
辰哥单片机设计4 小时前
漏水传感器(STM32)
stm32·单片机·嵌入式硬件
恶魔泡泡糖5 小时前
stm32F103C8T6标准库串口接收之多串口基础应用5
stm32·单片机·嵌入式硬件
木子单片机5 小时前
基于51单片机计步器—无线蓝牙APP上传
单片机·嵌入式硬件·51单片机·keil