通过STM32F407芯片USART3获取485型传感器的数据,使用的是创思通信的STM32 4G开发板,红色圈的内容是这块开发板的USART3,直接通过s3485芯片引出485的AB脚
在使用USART3向485型传感器发送询问帧的时候数据一致发送不出去,其他的串口都正常
后来经过高人提点,终于发现了问题所在,主要有两个问题
1、在STM32F4芯片上,每个端口和串口都有一个外部时钟,对模块初始化时需要进行时钟初始化,对串口初始化时要先进行串口时钟初始化和串口引脚的时钟初始化我的初始化USART3的代码是在USART1的初始化代码基础上改的,查询手册第53页可以看到USART1在APB2总线上,USART3在APB1总线上,两个总线上的初始化函数时不同,而我初始化时没有注意到这个问题。
2、这个是芯片的USART3通过SP3485引出的485接口的电路图 通过图片我们可以看到和开发板连接时不仅有串口的RX和TX,还有一个485的使能引PE4,因为以前使用的都是淘宝买的TTL转485的模块,只需要连接好转换模块,控制串口收发即可,不需要控制485的使能引脚,但这种方法在这里是行不通的,SP485的工作方式是半双工的,查询SP485的手册得知使能引脚高电平控制485发数据,使能引脚低电平控制485收数据。 这个问题的解决方法很简单,在串口发数据是将是能引脚置位,发送数据完成将引脚再次复位即可。