STM32开发笔记36: 串口不能正确发数的解决方法

发布者:lambda21最新更新时间:2019-07-16 来源: eefocus关键字:STM32  串口  正确发数 手机看文章 扫描二维码
随时随地手机看文章

单片机型号:STM32L053R8T6


今天这个问题一定要记录下来,使用485总线时,串口不能正确发送数据。串口的驱动程序已应用在多个实际项目中,自己并未认识到串口的驱动程序会有什么问题,而且在STM32F0芯片中,已经使用过了485,那时很是正常,所以这次问题的出现,倍感以外。


先说一下现象,使用485向计算机发数,计算机接到的全部都是0x00,开始怀疑很多问题,例如连线焊接等,一一排除,不能解决。使用示波器进行查看,发现单片机发送的数据就是这样的,很是奇怪。好在线路板设计时,单片机所在的线路板可以取下,将其插在带有USB转串口的板子上,发现一切正常。这说明单片机所在的电路是没有问题的,应该在外设板上。继续查找原因,直到将外设板上的所有元器件全部都焊下,也没有解决。再次比较485和USB转串口板,只剩下USB转串口芯片了,将这个芯片焊下后,USB转串口板也同样呈现这个问题。


用示波器查看串口的发送端,可以是高电平,但串口的接收端一直是低电平。此时开始怀疑电平问题,当有芯片存在时,将串口的接收端上拉到高电平,所以串口收发正常,当没有芯片时,接收端悬空,反复触发接收中断,所以串口异常。


但是F0的芯片,为什么可以呢?打开原先的程序看一下配置。


F0配置:


    GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;

    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;

    GPIO_InitStruct.Pull = GPIO_PULLUP;

    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

    GPIO_InitStruct.Alternate = GPIO_AF2_USART6;

    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

L0配置


    GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;

    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;

    GPIO_InitStruct.Pull = GPIO_NOPULL;

    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;

    GPIO_InitStruct.Alternate = GPIO_AF4_USART2;

    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

这样一看就很明显了,STM32CubeMX在生成F0代码时,引脚是上拉的,但是L0没有上拉,将此代码更正后,一切正常。


所有的代码都是人写的,无论他的水平有多高,也有犯错误的时候,哈哈。



关键字:STM32  串口  正确发数 引用地址:STM32开发笔记36: 串口不能正确发数的解决方法

上一篇:STM32开发笔记37: 485总线的收发切换时间
下一篇:STM32开发笔记35:USB FS的枚举方法

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved