STM32F042串口配置乱码问题总结

        最近手里有块板子需要加串口输出,在配置时遇到了几个问题,在此记录一下,希望可以帮助遇到相同情况的兄弟。

        首先芯片是STM32F042,由于原本的程序都是标准库写的,于是我按照串口配置的流程写了一个初始化的配置代码:

仔细对比了一下引脚的定义啥的都是对的,但是在程序调试的过程中发现当我调用串口发送函数时,串口调试助手并没有收到任何东西,但是可以看到的是TDR寄存器也就是发送数据的寄存器里的值就是我要发送的东西,思考半天没有找到解决办法后我用STM32CuBX配置了一个串口输出的HAL库程序,烧录进板子后发现串口助手有收到信息了,但是都是乱码。网上能搜到的串口输出乱码的问题一般都是波特率和时钟配置的错误,但是我的参数配置都是对的。搞了半天没找到原因后请教了一下我的主管,确认软件配置没问题后他看了一下原理图,我的天,原来是硬件连接的不对。

板子是直接将串口输出引脚引了出来,但是我直接用232的三根线将P16连到了电脑上,这是不行的,因为中间需要一个转换电路。针对这种的我们要只用USB-TTL的连接器,连接好之后发现串口输出正常。这里不禁感慨虽然作为一个嵌入式软件工程师,但是如果对硬件的知识了解不够,在日常的调试过程中会遇到很多棘手的问题,所以对硬件知识储备也是我们必不可少的。

做完这一切,STM32CuBX配置的程序跑通了,但我本来的程序缺还是有问题,串口助手还是没有显示。于是对比了一下两个程序调用完串口发送函数后寄存器的值的区别,一开始对比USART的寄存器,但是两个程序都是一样的,最后对比了一下GPIO寄存器,终于发现一个叫AFRH寄存器的值有区别,搜索发现HAL的GPIO_Init函数中会对这个寄存器的值进行修改:

这应该是复用功能的开启,但是标准库里的GPIO_Init函数并没有,所以虽然配置了引脚模式为复用模式,但是并没有开启复用。在标准库程序搜索AFRH可以找到这个函数:

于是在原本的串口引脚初始化后面加上GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_1);这一句,调试发现程序正常,自此问题完美解决。

总结发现,也不知道是这个芯片比较老的原因,标准库配置的复用功能在引脚初始化后都要再加一行这个GPIO_PinAFConfig函数,比如CAN等等。所以建议大家能直接用STM32CuBX直接配置就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值