1986643_zh-CN

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

1986643_zh-CN

1986643_zh-CN

MCXN系列的RS485硬件连接和软件

1.RS485硬件连接

RS-485 是一种多点通信协议,其中 LPUART 收发器的驱动器为三态,除非 LPUART 正在驱动。发射器可以使用 RTS_B 信号来启用收发器的驱动器。RTS_B 的极性可以通过固件配置,以与收发器的驱动器使能信号的极性相匹配。

下图显示了接收器使能信号已置位。此连接还可以将 RTS_B 连接到 DE 和 RE_B。当 UART 发送器发送字符时,收发器的接收器将被禁用。在此期间,上拉电阻可以将 RXD 拉至非浮动值。您可以通过在单线模式下操作 LPUART 来进一步优化此选项,从而释放 RXD 引脚用于其他用途。

 

xiangjun_rong_0-1730685793982.png

当uart通过TXD引脚发送字符时,RTS_b信号自动置位,经过RS-485收发器后,urat发送器可以驱动差分信号Y/Z。当uart不传输字符时,RTS_b信号无效,因此RS-485收发器处于tr状态,差分信号Y/Z不由此RS-485收发器驱动。对于RS-485收发器的接收器部分,如果将RTS_b信号直接连接到RS-485收发器的接收器的RE_b引脚,或者根据RS-485收发器所需的逻辑通过反相器连接到RS-485收发器的接收器,当uart发送字符时,RS-485收发器的接收器被禁用,RS485的RO引脚处于三态,因此RO引脚上需要一个上拉电阻,并且LPUart的RXD引脚不能从它自己的发射器接收任何字符。

RTS_B信号可以作为硬件流控制,但请注意,应用程序使用RTS_b信号来控制RS485启用而不是硬件流控制。

)


2. RTS_b pin assigmnet.

 

对于MCXN系列的uart模块,FCx_P0为UARTx模块的RXD引脚,FCx_P1为UARTx模块的TXD引脚,FCx_P2为UARTx模块的RTS_b引脚。

xiangjun_rong_1-1730686061880.png

对于 MCXN94x 系列,P1_8 引脚可作为 UART4 的 FC4_P0 或 RXD 引脚;P1_9 引脚可作为 UART4 的 FC4_P1 或 TXD 引脚;P1_22 引脚可作为 UART4 的 FC4_P2 或 RTS_b 引脚,并将 PORT1_PCR22[MUX]位设置为十进制 3;

xiangjun_rong_2-1730686303719.png

3)软件

3.1 引脚分配

void BOARD_InitPins(void)

{

/* 启用 PORT1 的时钟:启用时钟 */

时钟启用时钟( kCLOCK_Port1 );


const port_pin_config_t port1_8_pinA1_config = {/* 内部上拉/下拉电阻已禁用 */

kPORT_PullDisable

/* 选择低内部上拉电阻值。*/

kPORT_LowPullResistor

/* 配置快速转换速率 */

kPORT_FastSlewRate

/* 无源输入滤波器已禁用 */

kPORT_PassiveFilterDisable

/* 开漏输出被禁用 */

kPORT_OpenDrainDisable

/* 配置低驱动强度 */

kPORT_LowDriveStrength

/* 引脚配置为 FC4_P0 */

kPORT_MuxAlt2 端口

/* 数字输入启用 */

kPORT_InputBufferEnable

/* 数字输入未反转 */

kPORT_InputNormal

/* 引脚控制寄存器字段[15:0]未锁定 */

                                                    kPORT_UnlockRegister};

/* PORT1_8(引脚A1)配置为FC4_P0 */

    PORT_SetPinConfig(PORT1, 8U, &port1_8_pinA1_config);


const port_pin_config_t port1_9_pinB1_config = {/* 内部上拉/下拉电阻已禁用 */

kPORT_PullDisable

/* 选择低内部上拉电阻值。*/

kPORT_LowPullResistor

/* 配置快速转换速率 */

kPORT_FastSlewRate

/* 无源输入滤波器已禁用 */

kPORT_PassiveFilterDisable

/* 开漏输出被禁用 */

kPORT_OpenDrainDisable

/* 配置低驱动强度 */

kPORT_LowDriveStrength

/* 引脚配置为 FC4_P1 */

kPORT_MuxAlt2 端口

/* 数字输入启用 */

kPORT_InputBufferEnable

/* 数字输入未反转 */

kPORT_InputNormal

/* 引脚控制寄存器字段[15:0]未锁定 */

                                                    kPORT_UnlockRegister};

/* PORT1_9(引脚B1)配置为FC4_P1 */

    PORT_SetPinConfig(PORT1, 9U, &port1_9_pinB1_config);


//* PORT1_22(引脚 L4)配置为带有 ALT3 的 FC4_P2*/


const port_pin_config_t port1_22_pinC3_config = {/* 内部上拉/下拉电阻已禁用 */

kPORT_PullDisable

/* 选择低内部上拉电阻值。*/

kPORT_LowPullResistor

/* 配置快速转换速率 */

kPORT_FastSlewRate

/* 无源输入滤波器已禁用 */

kPORT_PassiveFilterDisable

/* 开漏输出被禁用 */

kPORT_OpenDrainDisable

/* 配置低驱动强度 */

kPORT_LowDriveStrength

/* 引脚配置为 FC4_P1 */

kPORT_MuxAlt3 端口

/* 数字输入启用 */

kPORT_InputBufferEnable

/* 数字输入未反转 */

kPORT_InputNormal

/* 引脚控制寄存器字段[15:0]未锁定 */

                                                       kPORT_UnlockRegister};

/* PORT1_9(引脚B1)配置为FC4_P1 */

       PORT_SetPinConfig(PORT1, 22U, &port1_22_pinC3_config);

}

 

函数

 

//P1_22作为RTS_b信号

void RTS_b_init(LPUART_Type *base)

{

 base->MODIR |=LPUART_MODIR_TXRTSE(1); //                   (((uint32_t)(((uint32_t)(x)) << LPUART_MODIR_TXRTSE_SHIFT)) & LPUART_MODIR_TXRTSE_MASK)


}

 

4)示波器测试UART时序

xiangjun_rong_3-1730686359583.png

结论:

从上面的示波器屏幕截图中,您可以看到,当 uart 发射器发送字符时,RTS_b 信号变低,因此它可以作为 RS485 收发器使能信号。


Tags (1)
No ratings
Version history
Last update:
‎01-05-2026 12:08 PM
Updated by: