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.

[参考译文] MSPM0L1304:我想将 SWCLK 引脚用作 GPIO。

Guru**** 2376610 points
Other Parts Discussed in Thread: SYSCONFIG, MSPM0L1304
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1529139/mspm0l1304-i-want-to-use-the-swclk-pin-as-an-gpio

部件号:MSPM0L1304
主题中讨论的其他器件:SysConfig

工具/软件:

您好!
我正在使用 MSPM0L1304、并希望使用引脚 PA20 (SWCLK) 作为数字输出。 在 sysconfig () 中、“ SWD 引脚上的调试“已激活。

我的 main() 如下所示:

int main (void){                   
 SYSCFG_DL_init ();

 if (DL_GPIO_readPins (BTN_port、BTN_DI_Switch_PIN)){
  dl_sysctl_disableSWD ();
  DL_GPIO_enablePower (GPIOA);
  DL_GPIO_initDigitalOutput (IOMUX_PINCM21);
  DL_GPIO_enableOutput (GPIOA、DL_GPIO_PIN_20);
  DL_GPIO_setPins (GPIOA、DL_GPIO_PIN_20);
 }
 而 (1){}
}

在电路图中、我放置了一个与 SWCLK 引脚并联的串联电阻 LED。 LED 在闪存过程中也会发出脉冲。


我无法管理将 SWCLK 引脚设置为逻辑高电平来为 LED 供电。
我已经阅读到调试器可能会阻止接口。
但是、即使我只是闪存、我也无法将引脚设置为高电平。

“你有什么事就说吧。“

谨致问候、C. Zwingmann

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

    您好 Christian:  

    感谢您联系我们。 要将 SWCLK 引脚用作 GPIO、您需要通过 SysConfig 取消选中“Debug Enable on SWD Pins“。  此外、您可以点击  “Debug Enable on SWD Pins“旁边的问号以进行进一步说明。 请注意、一旦禁用了 SWD 功能、唯一恢复该状态的方法是触发上电复位 (POR)。 在此之前、您需要阻止应用软件(禁用了 SWD)运行 到购买时间、以便触发 POR。 这可以通过在 POR 期间使用 NRST 引脚将器件保持在复位状态来实现、也可以在“SysConfig_WEAK void SYSCFG_DL_DEBUG_init“函数中添加延迟、如下所示:  

    SysConfig_weak void SYSCFG_DL_DEBUG_init (void)
    DELAY_CYCLES (500000000);
    /*设置 SYSCTL 的 SWDCFG 寄存器中的 DISABLE 位以及 KEY */
    SysCtl->SOCLOCK.SWDCFG =(SYSCTL_SWDCFG_KEY_VALUE | SYSCTL_SWDCFG_DISABLE_TRUE);
    }
    有关 POR 的更多信息、请访问下面链接的技术参考手册(第 196 页)  

    此致、Jojo

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

    你好 Jo,

    感谢您的反馈。
    我已停用 SysConfig 中的“Debug Enable on SWD Pins“、并在“SysConfig_weak SYSCFG_DL_DEBUG_init“中集成了 15 秒的延迟。

    void SYSCFG_DL_DEBUG_init (void){
     DELAY_CYCLES (500000000);
     SysCtl->SOCLOCK.SWDCFG =(SYSCTL_SWDCFG_KEY_VALUE | SYSCTL_SWDCFG_DISABLE_TRUE);
    }
    int main (void){
     SYSCFG_DL_init ();
     //代码
    }

    我有以下问题:
    1) 您的复位建议(在 POR 期间 NRST 为低电平)不起作用。
    1A) 您能准确描述何时按下并释放重置吗?
    1b) 是否可以在 IDE 中的某个位置设置此重置将自动执行?

    2) 我是否正确实现了弱函数、是否在“ti_msp_dl_config.c"中“中覆盖了该函数?

    3) 延迟是否意味着在冷启动后有 15 秒的时间来刷写程序,然后才禁用 SWD 接口?

    4) 如果我要将 GPIO PA20 用作数字输出、我是否必须在 SysConfig 中将引脚定义为如此、或者我是否要在单独的功能中手动执行此操作?
    4A) 如果我在主器件中手动设置 GPIO、则无法将输出切换为高电平:

    void SYSCFG_DL_DEBUG_init (void){
     DELAY_CYCLES (500000000);
     SysCtl->SOCLOCK。 SWDCFG =(SYSCTL_SWDCFG_KEY_VALUE | SYSCTL_SWDCFG_DISABLE_TRUE);
    }
    int main (void){
     SYSCFG_DL_init ();
     DL_GPIO_initDigitalOutput (IOMUX_PINCM21);
     DL_GPIO_setPins (GPIOA、DL_GPIO_PIN_20);
     DL_GPIO_enableOutput (GPIOA、DL_GPIO_PIN_20);
     //代码
    }

    4B) 当我在 SysConfig 中设置 GPIO 时、LED 会亮起 15 秒(只要延迟时间长)、然后再次熄灭。 调试访问也会在 15 秒后停止。 (从此处开始,我只能通过 BSL 刷写控制器)

    欢迎您回答我的问题。

    你好,基督徒

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

    您好 Christian:  

    感谢您的提问。 请在下面找到我的答案:

    1.为了使此功能正常工作、您需要确保 NRST 引脚实际上是这样设置的、而不是常规 GPIO。 在这种情况下是否如此?

    1A) 对于 NRST、实际上这需要保持超过 1 秒才能用于 POR。 此外、为了使器件成功引导、需要将其保持在高电平。 可在 链接的文档的第 2.4.1.1.1 节和第 2.4.1.3 节中找到此信息  

    1B) 不幸的是,该选项在 IDE 上不存在。  

    2.我应该进一步澄清一下,但这只是一个例子。 实际上、使用此选项实现此目的的方法是启用 SWD、在应用程序代码中、可以通过添加延迟、然后禁用 SWD 来手动禁用 SWD。 下面是这方面的实例:  

    while (1){

     DELAY_CYCLES (500000000);

    SysCtl->SOCLOCK.SWDCFG =(SYSCTL_SWDCFG_KEY_VALUE | SYSCTL_SWDCFG_DISABLE_TRUE);

    }

    3、是的、设置的 15 秒是在禁用 SWD 之前分配的时间  

    4.如果你走我在步骤 2 中所说的路由,那么你需要手动将 PA20 配置为 GPIO。  

    4A. 根据给定的代码、由于 SWCLK 引脚具有内部下拉电阻、请确保内部下拉电阻也设置为无。 请让我知道这是怎么做的!  

    此致、Jojo

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

    你好 Jo,

    我已经解决了这个问题。
    我修复了另一个内部错误、然后项目运行。

    “SWD 引脚上的调试启用“已停用。
    运行以下语法:

    void SYSCFG_DL_DEBUG_init (void){
      #ifdef DEBUG_MODE
        DELAY_CYCLES (500000000);
      #endif
      SysCtl->SOCLOCK.SWDCFG =(SYSCTL_SWDCFG_KEY_VALUE | SYSCTL_SWDCFG_DISABLE_TRUE);
     }

    int main (void){
     SYSCFG_DL_init ();

     if (DL_GPIO_readPins (BTN_port、BTN_DI_Switch_PIN)){
      DL_GPIO_initDigitalOutput (IOMUX_PINCM21);
      DL_GPIO_enableOutput (GPIOA、DL_GPIO_PIN_20);
      DL_GPIO_clearPins (GPIOA、DL_GPIO_PIN_20);
     }

    while (1){
    }

    不得将下拉电阻设置为“None"。“。

    非常感谢您的帮助!

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

    您好 Christian:  

    很高兴知道这一切现在都在工作,你是最受欢迎的! 有一个很棒的周末!  

    此致、Jojo