你使用PA9与PA10脚加一个控制引脚控制柜MAX485芯片,然后走MODBUS通信协议即可!
STM32是无法直接实现RS485总线的,你可以通过下面方式来实现:
选择STM32内部的一个UART部件,作为串行的接口;
将该UART信号线连接到一个485的驱动芯片,如MAX485,实现电平的转换,这样就可以实现RS485总线了。
上述是实现了RS485的物理层面功能,以这个为基础,通过设计相应的数据格式,就可以实现RS485的数据采集了。
关于STM32的USART配置,需要完成以下几个步骤
1,打开USART时钟
2,配置PA9及PA10
由于USART属于可选功能项
所以TX要设置成GPIO_Mode_AF_PP;,即复用推挽输出
RX用于数据输入,被设置成浮空输入
这是由于STM32的IO口引脚总共只有以下几种模式
GPIO_Mode_AIN = 0x0,
GPIO_Mode_IN_FLOATING = 0x04,
GPIO_Mode_IPD = 0x28,
GPIO_Mode_IPU = 0x48,
GPIO_Mode_Out_OD = 0x14,
GPIO_Mode_Out_PP = 0x10,
GPIO_Mode_AF_OD = 0x1C,
GPIO_Mode_AF_PP = 0x18
对于特殊功能模式,只有一个复用开漏及复用推挽。
这两种都是用于输出的情况。
所以RX只能被设置成浮空输入
这不仅是USART,对于其他的如SPI也是如此。
在中断关闭期间系统将不再响应任何中断,也就不能响应外部的事件。
所以中断锁对系统的实时性影响非常巨大,当使用不当的时候会导致系统完全无实时性可言(可能导致系统完全偏离要求的时间需求);
而使用得当,则会变成一种快速、高效的同步方式。
典型的串口通信标准有 RS232 和 RS485,RS232 是全双工点对点的通信,而 RS485 是半双工通信(2 线制),可以一点对多点进行组网,而且 RS485 是用缆 线两端的电压差值来表示传递信号,这与 RS232 电气特性大不一样。RS485 仅仅 规定了接受端和发送端的电气特性,并没有规定或推荐任何数据协议,因此 RS485 的协议层可以和 RS232 一样。
发送数据时,串口控制器的 TX 信号经过 收发器转换成差分信号传输到总线上,而接收数据时,收发器把总线上的差分信 号转化成 TTL 信号通过 RX 引脚传输到串口控制器中
SP3485是板子上的收发器。对收发器,RO是接收输出端,DI是发送数据输入端, RE 是接收使能信号(低电平有效), DE 是发送使能信 号(高电平有效)
开发板把RE和DE共同连接到了PG3,用高低电平来表示是输出有效还是接收有效。
本次列程是用USART2
rs485.c
rs485.h
main.c
本文标签:stm32f407的485的配置