硬汉嵌入式论坛

 找回密码
 立即注册
查看: 743|回复: 1
收起左侧

[技术讨论] 485,串口通信

[复制链接]

3

主题

53

回帖

62

积分

初级会员

积分
62
发表于 2022-10-25 18:50:27 | 显示全部楼层 |阅读模式
今天在调试485时,用的安富莱的程序,我的板子上485是用的串口2,串口1是用来打印调试信息。需求是通过按键控制485发送信息到上位机,通过上位机与485通信。
修改程序顺序:
                     一、先在串口初始化函数里,初始化485硬件,此语句为RS485_InitTXE(38400)(38400是我修改了程序中void RS485_SetBaud()的函数,修改为static void RS485_SetBaud(uint32_t _baud),并将该函数放在了初始话语句中),同时在这个函数里将映射的串口3,修改为串口2.

                    二、修改配置,在UartVarInit中,将  g_tUart2.SendBefor = RS485_SendBefor;               
                                                                        g_tUart2.SendOver  = RS485_SendOver;                       
                                                                        g_tUart2.ReciveNew = RS485_ReciveNew;       
                                      这三个函数修改成如上所示。

                     三、修改485芯片使能引脚的IO。

至此,修改结束。


问题:
  在调试时遇到了一些问题和疑惑,首先就是,我在basp_uart_fifo.h文件中给串口2 的波特率设置为了115200,但是在调试485时,还可以设置38400波特率?
  我先在用上位机给485发送信息时,例程中是可以立即回复一个buff的,我的程序发送不成功,通过在uart2接收中断里设置断点,发现是可以接收到信息的,然后通过单步调试,发现上位机每次都是发送了一个数字后紧接着发送了一个十六进制数,就导致无法发
送成功。临时解决办法是将接收的数字改为了十六进制数。
  在按键发送程序过程中,我通过按键设置了三个数组buff,数组一内容是0x01;数组二内容是0x02;数组三内容是0x03;但是在发送第二个数组时会先发送0x01,然后再发送0x02.发送第三个数组时也也有同样的问题,先发送0x01,0x02,再发送0x03。临时解决办法是将发送函数中的strlen函数直接去掉,换成数字1,这样就好了。






回复

使用道具 举报

80

主题

719

回帖

959

积分

金牌会员

积分
959
发表于 2022-10-25 21:30:38 | 显示全部楼层
上代码,应该是你逻辑有问题。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-6-9 02:22 , Processed in 0.241240 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表