打印
[应用相关]

串口不能正确发数的解决方法(转载)

[复制链接]
597|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
heimaojingzhang|  楼主 | 2019-6-18 13:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天这个问题一定要记录下来,使用485总线时,串口不能正确发送数据。串口的驱动程序已应用在多个实际项目中,自己并未认识到串口的驱动程序会有什么问题,而且在STM32F0芯片中,已经使用过了485,那时很是正常,所以这次问题的出现,倍感以外。

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

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


使用特权

评论回复
沙发
heimaojingzhang|  楼主 | 2019-6-18 13:24 | 只看该作者
但是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);


使用特权

评论回复
板凳
heimaojingzhang|  楼主 | 2019-6-18 13:25 | 只看该作者
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);


使用特权

评论回复
地板
heimaojingzhang|  楼主 | 2019-6-18 13:25 | 只看该作者

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

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


使用特权

评论回复
5
643757107| | 2019-6-18 20:30 | 只看该作者
多谢分享。

使用特权

评论回复
6
heimaojingzhang|  楼主 | 2019-7-4 15:50 | 只看该作者
非常感谢支持

使用特权

评论回复
7
wakayi| | 2019-7-8 11:47 | 只看该作者

非常感谢楼主分享

使用特权

评论回复
8
wowu| | 2019-7-8 11:53 | 只看该作者

非常感谢楼主分享

使用特权

评论回复
9
木木guainv| | 2019-7-8 11:58 | 只看该作者

非常感谢楼主分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

77

主题

4012

帖子

4

粉丝