stm串口通信常见问题及解决含第一个字符不能够成功发送

本文记录了STM与PC进行串口通信时遇到的问题,包括分频系数计算、stdio.h头文件的重要性、printf到串口的转换以及首个字符无法发送的解决方法。在初始化函数中确保分频系数正确,包含stdio.h头文件,使用' '组合进行换行,并通过检查UART_SR状态解决第一个字符丢失的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

笔者由于项目的需求,做起了stm与PC的串口通信工作。由于是新手,一路上磕磕绊绊,踩了不少坑,这儿做下记录(ennn~,几天不写博客,感觉自己懒了可怜),大家可以参考~

一):分频系数要写正确

          下面是初始化函数:

void Init_UART1(void)
{
    UART1_CR1=0x00;
    UART1_CR3=0x00;
    
    UART1_BRR2=0x00;//2M的计算方式,2000 000/9600=00D0h,BRR2为高四,低四
    UART1_BRR1=0x0D;//BRR1为中间的八位
    
    UART1_CR2=0x08;
}

其中一定要根据自己系统时钟频率来计算相应的分频系数 。以stm8s103f3p6为例,内部有16MHz的高速振荡器,启动后系统用的是它的八分频作为系统时钟源,要想得到9600kbs的波特率,则用两者相除即可。需要注意的UART1_BRR2为高四,低四位,UART1_BRR2为中间的八位。如果写的不正确,则很有可能出现乱码。

二):头文件stdio.h一定要包含

尽管编译的时候,没有包含stdio.h是能通过的,但是却不能够正确输出。笔者起初没有包含,结果愣是奇怪,费了近一天工夫,一步步地调试,还是不行,一脸懵逼,怀疑人生,结果对比别人的工程,然后就#include一下,发现奇迹般地好了。。心里默念三遍:头文件stdio.h一定要包含!头文件stdio.h一定要包含!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值