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.

[参考译文] TM4C123GH6PM:如何解锁 PD7引脚以将其用作 TM4C123GH6PM 定制板中的 UART2发送引脚?

Guru**** 2468610 points
Other Parts Discussed in Thread: TM4C123GH6PM

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/671293/tm4c123gh6pm-how-to-unlock-pd7-pin-to-use-it-as-uart2-transmit-pin-in-tm4c123gh6pm-custom-board

器件型号:TM4C123GH6PM

大家好、

我设计了自己的 TM4C123GH6PM 定制板。 我在设计 PCB 时漏掉了 PD7是锁定引脚的一点 。 现在、我想在定制板上使用 UART2。

所有其他 UART 工作正常。 非常好的建议!

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

    您好、Sumit、

    请参阅我们论坛常见问题解答 中的第1期:https://e2e.ti.com/support/microcontrollers/tiva_arm/f/908/t/374640

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

    我尝试按照您提到的链接中的建议解锁引脚、但我的代码进入故障 ISR

    以下是解锁和 UART 初始化的代码

    #include "inc/hw_memmap.h"
    #include "inc/hw_types.h"
    #include "inc/hw_gpio.h"
    #include "driverlib/uart.h"

    int main()

    SysCtlClockSet (SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHz);// 80MHz 时钟

    ui32SysClkFreq = 8000000;

    HWREG (GPIO_PORTD_BASE_GPIO_O_O_LOCK)= GPIO_LOCK_KEY;

    HWREG (GPIO_PORTD_BASE_GPIO_O_O_CR)|= GPIO_PIN_7;

    /******* UART2 INTILIAZATION ******** /
    SysCtlPeripheralEnable (SYSCTL_Periph_UART2);
    while (!(SysCtlPeripheralReady (SYSCTL_Periph_UART2)));

    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);

    GPIOPinConfigure (GPIO_PD6_U2RX);
    GPIOPinConfigure (GPIO_PD7_U2TX);
    GPIOPinTypeUART (GPIO_PORTD_base、GPIO_PIN_6| GPIO_PIN_7);

    UARTConfigSetExpClk (UART2_base、ui32SysClkFreq、115200、(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE));


    UARTFlowControlSet (UART2_base、UART_FlowControl_NONE);
    IntEnable (INT_UART2);
    UARTIntEnable (UART2_base、UART_INT_RX | UART_INT_RT);

    IntMasterEnable();

    while (1)






    但我的代码进入故障 ISR。 我已在 startup.c 文件中为 UART2添加了 ISR
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Sumit、

    我觉得初始化没问题、如果您将正确的 ISR 添加到了 startup_ccs.c 的 UART2部分、那么我不会立即提出根本原因的建议。

    请参阅我们的故障诊断应用手册、尝试找出故障的根本原因: http://www.ti.com/lit/an/spma043/spma043.pdf

    如果您在确定故障后遇到问题、请告诉我您已从应用手册中采取了哪些步骤以及结果如何、然后我可以尝试进一步指导您。

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

    所示代码并不能证明、

    "SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);"-包含在"UART2_init"中

    "HWREG (GPIO_PORTD_BASE_GPIO_O_O_LO_LOCK)= GPIO_LOCK_KEY;"-这将导致对"Fault ISR"的访问之前执行。

    通过"单步执行"您的代码-您应该能够识别"进入故障 ISR"的"确切位置"。    您的报告将极大地帮助远程诊断...

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

    您好 CB1、

    很好的收获,我没有记得订购解锁序列的重要性。 是的、SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);需要在解锁过程被执行前被调用。

    因此、正确的顺序是(为了 Sumit 的完全明确):

    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);
    HWREG (GPIO_PORTD_BASE+GPIO_O_LOCK)= GPIO_LOCK_KEY;
    HWREG (GPIO_PORTD_BASE+GPIO_O_CR)|= GPIO_PIN_7; 

    然后是任何配置 API。

    感谢你抓住我的失败:)

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

    拉尔夫

    一如既往地感谢您。

    你的 crüe 回答“那么多”-我的破解人员(但从来没有 Moi... HA!) 犯了这么多错误-它(几乎)卡住了!

    您没有失败-海报"错过" PD7的(强制)要求-(这违反了 kiss)-偏离他的"中心目标!"    KISS 规定 、"计划目标"最初应通过 最短/最简单和最直接的方式实现。   (即不通过任何端口解锁!)   

    实现这种简单 性的方法是:"最初选择一个不受"解锁"负担的 UART 引脚-使其正常工作-然后仅使用该代码(修改为用户所需的端口)与(稍后添加的)"端口解锁"结合使用。   

    已经证明、代码流程的捆绑"会出错!"    相反-将代码构建局限于单个流程 - 一次一个流程、测试/验证 (kiss)始终 是最佳的!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢拉尔夫以正确的方式指导我。
    我的问题得到了解决!!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 CB1_MOBILE 以正确的方式指导我。
    我的问题得到了解决!! 嗯、人们总是从错误中学习。 在未来的设计中、我绝不会再错过这一点。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我想建议您(真的)创建一个"代码示例文件"、其中详细说明了外设的"完全/正确处理"。

    请注意、您不必为"每个/每个"外设创建这样一个示例。 我希望您创建一个"常规设置/配置"。 示例-适用于大多数(希望是所有) MCU 外设。 这样可以确保"匹配的"GPIO 端口-和外设模块-接收它们的到期函数"SysCtlPeripheralEnable()"调用。

    这样一个"代码安全模板"-也可针对 MCU 编程的其他方面创建。 与"飞机飞行员检查清单"非常相似、在我们的"绕车"检查以及驾驶舱检查过程中(始终)提供建议。 航空公司和您的 MCU 的检查清单都应尽可能完整、并"尽力而为"。