
问题现象 客户在产线批量生产测试 uart 的时候,发现有一部分出现了如 noise detect,framing err 等异常状态进入中断处理1 P2 i2 k) P# C8 v* g 原因分析 从这些出错的原因看起来,比较像是物理层的错误导致,因为如果是应用代码或是代码库的 bug,复现率应该会比较高,而不是大批量量产时出现的个例,所以还是从物理层考虑,因为是个例,所以基本排除 PCB 布线的问题和外围环境干扰的问题,通过和客户工程师沟通,发现 UART 使用的时钟源为 HSI,而客户也没有对 HSI 进行 CALIBRATION。/ T( ~4 a( I* V2 d$ C 解决方法 如下寄存器 RCC_CR 中的 HSITRIM 就是对 HSI 时钟进行校准。 当使用 HSI 作为 UART 时钟源是,需要对其进行标定,而标定的方法是使用比较精确的 HSE 或者LSE,方法比较简单,如枚举 HSITRIM[4:0],也就 32 种可能(确切的说是 31 种,默认为 0 不进行调整),然后作为某个 TIMER 的时钟源,和 LSE 作为 TIMER 的时钟源进行比较,找到最近的那个HSITRIM 值写入寄存器即可,实现了对 HSI 时钟的校准。 $ U5 }' v; L- t, k0 ]2 F ![]() 5 a; M/ D/ b* l 总结 在出现异常的错误状态时,需要首先考虑的是时钟是否稳定,电源电压是否在合理范围内。3 J/ q$ L, L* M O X8 n8 p+ l; r : j7 Y! Q5 i1 N% a' y6 g4 d |
STM32G系列RS485自动收发控制以及自适应波特率实战
【STM32H7S78-DK评测】CoreMark移植和优化--兼记printf重定向实现方法及常见问题
【STM32MP135-DK】裸机移植shell
NUCLEO-U545RE-Q评测】3. 串口基本收发测试
NUCLEO-U545RE-Q评测】4. 串口实用收发测试
基于STM32模拟UART串口通信
【STM32H503评测】+ coremark跑分移植测试
基于STM32H563演示UART+DMA经验分享
STM32的通用同步异步收发器USART模块
STMCube UART与ADC配置