1. 系统环境
- 硬件环境
- stm8s003
- 8M 外部晶振
- 软件环境
- IAR
- 官方库
2. 问题描述
-
在9600 可以正常收发,但是改成115200 就出现了大面积的异常,是不是和时钟精度有关系?
-
串口通讯 允许的误码率是多少
3. 分析问题
- 串口接收 采样方式
对一个信号进行 进行16分频采样, 即将信号分成16等分后,一般是取中间的采样值
- 115200 波特率的由来
最初是由 11.0592MHz 的晶振 通过6分频, 然后在16分频后,得到的
- 采样数据的误差
在最后一个Bit位采样时,允许极限偏移为50%,假如用1个起始位+9个数据位+1个奇偶;校验位+1个停止位来计算,那么每位偏差最高为:
±50% / 12 = ±4.16%
因此,对于串口通信来说,可以粗略认为,当时钟误差小于±2%时,通信是比较可靠的。对于客户实际的应用系统,考虑到UART是一个异步通讯,通讯的稳定性取决于双方的时钟精度,不是说只有一方的精度满足要求,系统就能正常工作,所以需要系统去考虑。
- 常见的误差
- 官方
- 我补充的
- 官方
4. 解决方法
暂时还没找到, 先留一个眼,后面再来补充