打印
[STM32L0]

L0用内部RC跑UART时串口老出错

[复制链接]
78|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
公羊子丹|  楼主 | 2025-6-20 07:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想省个晶振结果串口就不准,发出去上位机经常接收乱码。

使用特权

评论回复
沙发
Clyde011| | 2025-6-20 07:27 | 只看该作者
UART配上DMA还容易出错,RC时钟确实不稳。

使用特权

评论回复
板凳
公羊子丹|  楼主 | 2025-6-20 07:28 | 只看该作者
RC振荡器偏差大,波特率超出容忍范围了吧。

使用特权

评论回复
地板
周半梅| | 2025-6-20 07:29 | 只看该作者
我试过用内部RC跑9600,误码率也挺高的。

使用特权

评论回复
5
帛灿灿| | 2025-6-20 07:30 | 只看该作者
要不加个外部晶振?稳定不少。

使用特权

评论回复
6
童雨竹| | 2025-6-20 07:31 | 只看该作者
用示波器抓抓TXD,看波形有没有毛刺。

使用特权

评论回复
7
万图| | 2025-6-20 07:32 | 只看该作者
HAL_UART_Init里面的时钟源要确认清楚。

使用特权

评论回复
8
Wordsworth| | 2025-6-20 07:33 | 只看该作者
内部RC得用工厂校准值,不然误差更大。

使用特权

评论回复
9
Bblythe| | 2025-6-20 07:34 | 只看该作者
用低速串口比如4800试试会不会好点。

使用特权

评论回复
10
Pulitzer| | 2025-6-20 07:35 | 只看该作者
我之前RC震荡加了温度补偿才稳定些。

使用特权

评论回复
11
Uriah| | 2025-6-20 07:36 | 只看该作者
建议直接开LSE,用它当系统时钟更靠谱。

使用特权

评论回复
12
flycamelaaa| | 2025-6-20 09:59 | 只看该作者
STM32L0的内部RC振荡器默认精度为±2%,但在温度变化或电压波动时,频率可能漂移,导致UART波特率误差超过±3%,引发通信错误。

使用特权

评论回复
13
laocuo1142| | 2025-6-20 10:06 | 只看该作者
硬件连接问题?

使用特权

评论回复
14
jcky001| | 2025-6-20 10:10 | 只看该作者
缩短UART信号线长度,避免平行走线。

使用特权

评论回复
15
elephant00| | 2025-6-20 10:12 | 只看该作者
在MCU电源引脚附近添加0.1μF陶瓷电容和10μF钽电容,降低电源噪声。

使用特权

评论回复
16
onlycook| | 2025-6-20 10:15 | 只看该作者
可能未处理UART错误标志如帧错误、噪声错误、溢出错误。

使用特权

评论回复
17
onlycook| | 2025-6-20 10:16 | 只看该作者
可能未处理UART错误标志如帧错误、噪声错误、溢出错误。

使用特权

评论回复
18
powerantone| | 2025-6-20 10:36 | 只看该作者
启用RCC_CR寄存器中的HSICAL和HSITRIM位,或使用HAL_RCCEx_PeriphCLKConfig函数配置时钟校准。

使用特权

评论回复
19
豌豆爹| | 2025-6-20 10:48 | 只看该作者
用外部晶振。

使用特权

评论回复
20
stormwind123| | 2025-6-20 11:02 | 只看该作者
手动校准,通过读取RCC_ICSCR寄存器中的HSITRIM值,结合实际波特率误差调整校准值。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

137

主题

5535

帖子

3

粉丝