硬汉嵌入式论坛

 找回密码
 立即注册
查看: 485|回复: 3
收起左侧

[STM32H7] 菜鸟发问,想请教一下硬件串口fifo的问题

[复制链接]

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2025-3-23 15:02:03 | 显示全部楼层 |阅读模式
本帖最后由 liqingxin0092 于 2025-3-23 15:07 编辑

各位大佬,我用的stm32h750,我想直观地 看下串口硬件接收fifo的效果.

设计了一个小实验:
屏幕截图 2025-03-23 143850.png
串口初始化完成延迟6s,在这6s内用串口助手给单片机发16个u8类型的数.(0~0xf)

我本以为6s一到,我keil5 debug会在a数组里看到,我串口助手发送的16个数.

结果却一点不一样, 如果延时是6s的话,接收到8,9,10,11,12,13,14,15,15,15,15,15...
                           如果延时时间再长一点,12s,接收到16个15.

我就感觉硬件串口fifo里面的数据再随时间流逝,被读走了, 但是我的软件并没有在读,被我那个for循环以外的力量给读走了,实际上我只有那一个for循环在读

后来我串口初始化完,直接关中断(rx中断没有开,中断函数也没实现),后面来个while(1);

我发数据,一直发直到置了rx fifo满标志位, 后来奇怪的来了,rx fifo满这个标志位自己消失了.....我明明没有读它呀,软件里都没有碰RDR寄存器...就while(1),也没中断.

我发数据直到满,满标志位自己又清了....

谁能帮帮孩子呀,难道我不能通过硬件串口fifo 读到 1分钟前 串口接收到的数据吗....


回复

使用道具 举报

6

主题

306

回帖

324

积分

高级会员

积分
324
发表于 2025-3-23 17:28:38 | 显示全部楼层
本帖最后由 fxyc87 于 2025-3-23 17:29 编辑

有可能你的代码测试没错,但你忽略了一点,你是不是开了寄存器窗口?

默认MDK也会自动读取你说的这个RDR寄存器,所以数据会少
你可以测试将这个窗口关掉,再用你的代码测试
企业微信截图_20250323172517.png 屏幕截图 2025-03-23 172731.png
见图,你将对应的外设寄存器窗口关闭再试试,以及wather1窗口也关闭。

回复

使用道具 举报

6

主题

306

回帖

324

积分

高级会员

积分
324
发表于 2025-3-23 17:31:37 | 显示全部楼层
就是在调试阶段,你的数据有可能被MDK读取,然后FIFO对应的就会变少,关掉这个窗口就不会自动读取了。包括以前STM32F103状态寄存器,以前调试时,在调试阶段没问题,正常运行时就串口就溢出报警了,原来是调试阶段状态寄存器被MDK读取,然后错误就消除了。
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2025-3-23 17:42:21 | 显示全部楼层
fxyc87 发表于 2025-3-23 17:31
就是在调试阶段,你的数据有可能被MDK读取,然后FIFO对应的就会变少,关掉这个窗口就不会自动读取了。包括 ...

感谢诶,还真是
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 18:46 , Processed in 0.039247 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表