新唐MCU技术
直播中

绝代双骄

13年用户 1166经验值
私信 关注
[问答]

如果引脚具有 Uart Rx 和 nRESET 功能,如何配置 UART Rx 功能?

如果引脚具有 Uart Rx 和 nRESET 功能,如何配置 UART Rx 功能?

回帖(1)

贾飞小

2025-8-27 17:47:18

当某个引脚同时具备UART Rx和nRESET(或其他复位功能)时,配置成UART接收功能需要分两步走,并且通常需要一些额外的硬件考虑,因为不能让串口数据线上的信号意外复位你的微控制器!


核心原则:



  1. 避免复位干扰: 在目标微控制器上电后,必须确保该引脚上的信号(主要是UART的RX信号)绝对不能触发复位(即,不能将引脚的电平意外拉低到复位电平)。

  2. 配置复用功能: 在固件层面,需要正确配置该引脚的复用功能选择器,将其设置为UART Rx模式。


步骤和关键点:




  1. 硬件设计(极其重要!):



    • 隔离复位功能(首选方案): 这是最常用且推荐的方法。在主控微控制器外部,使用一个简单的电阻-二极管逻辑电路将UART Rx信号“引导”至nRESET引脚。一个典型的电路是:

      • 在UART Rx线(来自外部设备)和nRESET引脚之间串联一个二极管(例如1N4148)。二极管的阴极(带标记的一端)连接到nRESET引脚。

      • 在nRESET引脚和VCC之间连接一个上拉电阻(例如10kΩ)。

      • 在UART Rx线连接到微控制器的GPIO/UART Rx输入点。


    • 原理:

      • 上电/手动复位:外部复位按钮或上电复位电路可以直接将nRESET拉低,复位微控制器。二极管此时由于反偏不会影响复位操作。

      • UART接收数据:当外部UART设备发送'0'(低电平)时,它会尝试拉低连接点。由于二极管的单向导通性(阴极接nRESET),这个低电平不会通过二极管传递到nRESET引脚(二极管反偏截止),因此nRESET引脚保持被上拉电阻拉高(高电平)。微控制器不会复位。

      • UART接收数据不影响复位:微控制器看到的UART Rx电平会正常跟随外部设备发送的高低电平变化。

      • 复位不影响UART接收(仅硬件角度看): 当外部复位源将nRESET拉低时,这个低电平可以通过二极管(正偏)传到UART Rx线的连接点。这可能会干扰此时正在进行的UART通信,导致微控制器在复位前收到错误数据。这是此方案的缺点。对于要求严格的通信场景,需要在固件中处理复位时的通信中断或增加更复杂的隔离。


    • 替代隔离方案(较复杂): 使用专用的复位控制器IC或带有独立看门狗和手动复位输入的微控制器(如果可用)。将nRESET功能完全交给该控制器/专用引脚,物理上断开它与UART Rx信号的直接连接。

    • 软件控制复位(如果可用): 如果目标芯片支持通过软件(例如写特殊寄存器)触发内部复位源(软件复位、看门狗复位等),并且你可以接受放弃使用外部复位源(按钮)或不需要该引脚本身的nRESET功能触发复位,那么:

      • 可以在固件中禁用该引脚作为nRESET输入的功能(查阅芯片手册看是否支持禁用)。

      • 在固件中启用软件复位源、配置并使用内部看门狗等。

      • 重要: 即使禁用了该引脚的nRESET输入,为了确保意外干扰引脚(ESD、噪声)不会导致复位,通常仍需要外部上拉电阻(接VCC)保证其默认处于非复位状态。

      • 风险: 如果固件跑飞,无法触发软件复位或看门狗,将失去手动或看门狗复位的保障。





  2. 固件配置:



    • 保证引脚初始稳定(防意外复位):

      • 在启动代码的最开始阶段,任何其他复杂初始化(包括UART)之前,必须先将该引脚配置为某种不会导致复位触发的状态。通常这涉及到:

        • 将该引脚配置为浮空输入带弱上拉/下拉的输入。查阅芯片手册,明确哪种状态能确保nRESET引脚识别为无效电平(通常是高电平)。

        • 在支持禁用nRESET输入的芯片上,立即禁用其复位功能(如果计划走软件复位路线)。


      • 关键: 系统上电到固件开始执行第一条指令之间,芯片内部或外部的复位电路(如阻容复位)必须确保nRESET引脚在上电瞬间保持有效复位电平足够长的时间(低电平有效,则初始为低),然后被释放到无效电平(拉高)。外部上拉电阻在这个阶段非常关键。固件初始化引脚只是为了确保后续操作的稳定性。


    • 配置复用功能:

      • 在引脚状态稳定且不会引起误复位之后,通过配置相关的复用功能寄存器,将该引脚映射到内部的UART接收器(RX)模块上。芯片手册中会有明确的寄存器说明(通常名为GPIOx_AFRL/GPIOx_AFRHxxx_MUXPINSEL等)。

      • 例如(伪代码):
        // 1. VERY EARLY: Set pin as input, optionally with pull-up to keep it high
        GPIO_PinModeSet(PORTx, PINn, gpioModeInput); // Input, no pull
        // OR (if hardware design and chip support a pull-up to keep pin high and avoid reset)
        GPIO_PinModeSet(PORTx, PINn, gpioModeInputPull); // Input with pull-up
        // 2. Later (after essential clocks/init): Configure the pin's Alternate Function to UART RX
        GPIO_PinConfigSet(PORTx, PINn, ALT_FUNC_UART_RX); // Function selector register
        // 3. Initialize and enable the UART peripheral
        UART_Init(UARTx, ...);
        UART_Enable(UARTx, true);


    • 配置UART外设: 最后按照常规方式初始化并启用UART外设(设置波特率、数据位、停止位、校验位等)。




总结:



  1. 硬件隔离是王道: 使用电阻-二极管(或更高级的隔离方案)确保UART Rx数据线上的低电平不会意外复位MCU。上拉电阻必不可少。

  2. 固件三步走:

    • 第一步(极早): 安全地初始化引脚为输入模式(通常带内部/外部上拉),避免固件初始化过程中的毛刺或不确定状态触发复位。

    • 第二步: 配置引脚的复用功能为UART Rx。

    • 第三步: 配置并启动UART外设。


  3. 仔细阅读芯片手册:

    • 如何安全地初始化该引脚(默认状态?上拉/下拉?)。

    • 如何禁用其复位功能(如果计划采用软件复位)。

    • 复用功能选择寄存器的具体配置方式。



务必查阅你所使用的具体微控制器的数据手册和参考手册! 不同厂商、不同系列的芯片在配置细节、引脚默认状态、是否可以禁用特定引脚的复位功能等方面可能存在差异。硬件隔离电路的设计参数(电阻阻值、二极管选型)也应参考芯片的电气特性(如复位阈值电压、输入电流要求等)。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分