This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSPM0L1106:有关 GPIO 设置的问题:

Guru**** 2455560 points
Other Parts Discussed in Thread: MSPM0L1106, LP-MSPM0L1306, SYSCONFIG

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1487405/mspm0l1106-question-on-gpio-settings

器件型号:MSPM0L1106
主题中讨论的其他器件: LP-MSPM0L1306SysConfig

工具与软件:

尊敬的团队:

在对我的 MSPM0L1106 PCBA 进行测试期间、我有以下问题、请帮助我提供建议和解决方案:

问题1:
- MCU VDD = 1.8V
-一个质子分压器,上部 R1=220K,下部 R2=100K 接地。
- MCU PA2连接到 R1和 R2之间的连接。
- PA2被配置为没有任何拉电阻器的输入。

通过使用软件和万用表在 PA2上测量、结果分别为0和0V。 当向 R1施加5V 电压时、将获得相同的结果。 预期结果应为1且~1.56V。

当 R1更改为22K 时、测得结果将分别为1和~1.6V。 问题的原因是什么? (备注:此电路与其他8051内核 MCU 配合工作。)

问题2:
在上面的 Q1中使用相同的软件时、我在 LP-MSPM0L1306 LaunchPad 上进行了测试。
向电路板上的5V 和 R6添加了220K 电阻器。 尽管 LaunchPad 上的 VDD 为3.3V、但 R6上的电压也为0V。
-通过使用原始 LaunchPad 和 Q1中的固件,我添加了以下代码,以在系统初始化后将 PA2设置为带有上拉电阻器的输入,并测量 R6上的电压。 电压也接近0、我需要一定的电压。 这是什么原因呢?
   DL_GPIO_initDigitalInput (GPIO_PA_PA2_IOMUX);
   DL_GPIO_initDigitalInputFeatures (GPIO_PA_PA2_IOMUX、DL_GPIO_INVERSION _DISABLE、DL_GPIO_RESISTOR_PULL_UP、DL_GPIO_HYSTERESIS_DISABLE、DL_GPIO_WAKEUP_DISABLE);
-如果在系统初始化后更改代码以将 PA2设置为输出高电平,并测量 R6上的电压。 电压也接近0、我预期电压为3.3V、原因是什么?
   DL_GPIO_initDigitalOutput (GPIO_PA_PA2_IOMUX);
   DL_GPIO_setPins (GPIO_PA_PORT、GPIO_PA_PA2_PIN);

问题3:
根据 Q2、我再次对 PA3进行测试。 在.syscfg 中将 PA3配置为输出低电平。
- PA3在系统初始化后设置为带有上拉电阻器的输入、并测量 PA3 (接头 J2)上的电压。 电压也接近0、我需要的是3.3V。 这是什么原因呢?
   DL_GPIO_initDigitalInput (GPIO_PA_PA3_IOMUX);
   DL_GPIO_initDigitalInputFeatures (GPIO_PA_PA3_IOMUX、DL_GPIO_INVERSION _DISABLE、DL_GPIO_RESISTOR_PULL_UP、DL_GPIO_HYSTERESIS_DISABLE、DL_GPIO_WAKEUP_DISABLE);
- PA3被设置为输出高电平,可以测量3.3V。

问题4:
我注意到生成的函数 SYSCFG_DL_GPIO_init ()没有 PA2的代码"DL_GPIO_initDigitalInput (GPIO_PA_PA2_IOMUX);"作为输入。 是这样吗? (备注:其他输入 GPIO 具有相应的行。)

AlanC。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在 LaunchPad 上有一个连接到 ROSC PA2的电阻器。 我不知道他们为什么不放置跳线:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Alan:
    您能否共享 SysConfig 文件? 我想检查它是否有问题。 此外、设置输出的方法是在 initDigitalOutput 和 setPins 之后添加"DL_GPIO_enableOutput"函数。 同时请记住 Keith 对 LaunchPad 中有下拉电阻器的引脚的评论。

    此致、

    Diego Abad

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Diego Abad:

    我注意到 launchpad 中有一个 R6下拉电阻器、它在我的产品中的值相同。 以下是我的测试与 launchpad 之间的连接。

    我创建了空工程、并将 PA2配置为输入、无需任何内部拉电阻器。 我将整个项目附加到了您的 reference.e2e.ti.com/.../empty_5F00_new.zip 上

    在我的测试中、当开关闭合时、PA2的电压应该为~1.5V。 但测量值为0V。

    在 main()函数中、我添加了将 PA2和 PA3设置为输入和输出的代码。 (备注:默认情况下、通过#if 和#endif 禁用它们。) 我将锁定您的分析结果。 感谢您的支持。

    AlanC。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Alan:
    在我看来、该问题依赖于这样一个事实、即如果引脚在连接到下拉电阻器时没有遇到任何电压输入、则电阻器的值可能会阻碍在引脚中读取数据、也即、下拉值应减小。 至于您的其他问题:
    2. 使用上拉电阻器(约100mV)初始化为输入时、PA2似乎具有少许电压。 这很可能是由于与其连接了下拉电阻器(此外、很难证明小 R6电阻器的值)。 但是、当配置为输出高电平(3.3V)时、我确实会看到此引脚的常规 I/O 行为。 请记住、默认情况下、输入读数值应是高阻抗、也就是说、它并不会真正输出信号。 有关更多信息、我建议查看图9-1。 TRM 中的超集 IO 切片
    3.我做了两个测试(输入+上拉和输出高电平),并且都给了我大约3.3V。 配置在 SysConfig 中完成、代码运行一个空循环。
    4.您可能会在从另一种模式(也称为输出模式)切换时使用此功能。 I/O 的默认功能是输入、因此 SysConfig 只需设置其配置。
    此致、
    Diego Abad

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Diego Abad:

    "3. 我做了两个测试(输入+上拉和输出高电平)、并且都提供了大约3.3V 的电压。 配置在 SysConfig 中完成、代码会运行一个空循环。"
    针对 LaunchPad 本身、我得到了与您相同的结果。 但我的问题是、我在 SysConfig 中将 PA2设置为输入而没有任何拉电阻器、并向其添加了220K 5V 分压器。 该引脚上的电压将变为0。 理论电压应为~1.5 x V。 是由 GPIO 上的钳位二极管引起的吗? (很抱歉告诉您、我是一个软件专家、对电子产品不太熟悉。)

    "4. 在从另一种模式(也称为输出模式)切换回时、您可能会使用此函数。 I/O 的默认功能是输入、因此 SysConfig 只需设置其配置。"
    否 我不是从其他模式切换 IO、而是在输入和输出之间切换。 在我上面提供的项目中、PA2和 PA3在 SysConfig 中设置为不带拉电阻器的输入。 在主循环之前、如果通过移除#if 和#endif 将 PA2和 PA3切换到输出高电平的代码。 我发现无法在引脚上测量3.3V。 如果 PA2和 PA3直接在 SysConfig 中设置为输出高电平、则可实现此功能。 这段代码中有什么问题吗?

    AlanC。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Alan:
    3.让我看看这个问题

    4. 您正在进行的配置对我来说似乎很好(除了 resetGPIO。) 但是、if else define 语句对我来说很奇怪、因为它似乎可以同时运行所有代码(使其输入、然后输出低电平、然后输出高电平)。 我将尝试一次只配置一个、看看哪些添加的代码会导致中断。 可表示为:

    #if 0
      DL_GPIO_initDigitalInput (GPIO_GRP_0_PIN_0_IOMUX);
      DL_GPIO_initDigitalInputFeatures (GPIO_GRP_0_PIN_0_IOMUX、
        DL_GPIO_INVERSION DISABLE、DL_GPIO_RESISTOR_NONE、DL_GPIO_HYSTERESIS_DISABLE、DL_GPIO_WAKEUP_DISABLE );
      DL_GPIO_initDigitalInput (GPIO_GRP_0_PIN_1_IOMUX);
      DL_GPIO_initDigitalInputFeatures (GPIO_GRP_0_PIN_1_IOMUX、
        DL_GPIO_INVERSION DISABLE、DL_GPIO_RESISTOR_PULL_UP、DL_GPIO_HYSTERESIS_DISABLE、DL_GPIO_WAKEUP_DISABLE );
    #endif

    #if 1.  
      DL_GPIO_initDigitalOutput (GPIO_GRP_0_PIN_0_IOMUX);
      DL_GPIO_initDigitalOutput (GPIO_GRP_0_PIN_1_IOMUX);
      DL_GPIO_enableOutput (GPIOA、DL_GPIO_PIN_2);
      DL_GPIO_enableOutput (GPIOA、DL_GPIO_PIN_3);
      DL_GPIO_clearPins (GPIOA、DL_GPIO_PIN_2);
      DL_GPIO_clearPins (GPIOA、DL_GPIO_PIN_3);
    #endif

    #if 2.  
      DL_GPIO_setPins (GPIOA、DL_GPIO_PIN_2);
      DL_GPIO_setPins (GPIOA、DL_GPIO_PIN_3);
    #endif
    此致、
    Diego Abad
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Diego Abad:

    根据我的理解、"#if 0"内的上述代码将不会执行。 其他参数将不会执行。

    就像无符号字符变量中的值0将被视为 False、而其他值则为 True。

    AlanC。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Alan:
    我认为目的是使 GPIO 在一个功能和另一个功能之间发生变化。 如果是这种情况、则应在 SysConfig 配置的任何器件上配置 I/O。 根据您发送的代码、这将是 PA2和 PA3作为输入。 我认为,如果你试图使他们的输出和是高,代码波纹应做的技巧:

      DL_GPIO_initDigitalOutput (GPIO_GRP_0_PIN_0_IOMUX);
      DL_GPIO_initDigitalOutput (GPIO_GRP_0_PIN_1_IOMUX);
      DL_GPIO_setPins (GPIOA、DL_GPIO_PIN_2);
      DL_GPIO_setPins (GPIOA、DL_GPIO_PIN_3);
      DL_GPIO_enableOutput (GPIOA、DL_GPIO_PIN_2);
      DL_GPIO_enableOutput (GPIOA、DL_GPIO_PIN_3);
    至于您询问的分压器问题、您是正确的。 电压应该约为1至1.5V。 输入可能通过引脚吸收一些电流、所以我将自行测试这个方案、而且知道我是否可以复制这个方案。   
    此致、
    Diego Abad
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Diego Abad:

    非常感谢您的支持。 是的、您回答正确。 我真的希望在运行时在输入和输出之间切换 GPIO。

    关于分压器问题、我期待您的测试结果。

    仅供参考、我们的产品中 PA17上有完全相同的分压器。 PA2和 PA17的配置在 SYSCFG 中相同。 但在 PA17上测得的电压是正确的。 我们的硬件团队和我都无法解释它。

    AlanC。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Alan:
    听起来不错。 我之前提供的代码应该会使引脚成为输出。 我需要更多时间对此进行测试。 我应该在明天或下周星期一之前收到这方面的最新消息。

    此致、

    Diego Abad

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Alan:
    我复制了设置、并注意到出现了与您提到的类似的行为。 R1为220K 时、我得到的值约为22.588mV、而使用22K 时、我得到的值为1.158V。 MCU 可能会消耗 PA2的部分功率。 这可能是由于 PA2/ROSC 如何连接到 MCU 的 FCL 电路。 现在、我的建议是使用另一个引脚或电阻器值来提供您需要的电压。
    此致、
    Diego Abad

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Diego Abad:

    再次感谢您的支持。 很抱歉地告诉您、所有 IO 都已用完。 偶数、PA18 (BSL 调用)、PA19和 PA20 (调试端口)作为应用程序使用共享。 您的消息已传递给我们的硬件团队、他们将进行处理。

    AlanC。