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.

[参考译文] TMS320F28377D:GPIO_SetupPinOptions 函数参数混淆

Guru**** 2524550 points
Other Parts Discussed in Thread: C2000WARE, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1163395/tms320f28377d-gpio_setuppinoptions-function-parameters-confusion

器件型号:TMS320F28377D
主题中讨论的其他器件:C2000WARESysConfig

我尝试在 GPIO4、5上设置 CANA、为了帮助我、我尝试使用  CAN_EXTERNAL_Transmit .c 中的示例  

在 F2837xD_GPIO_C 中、函数 GPIO_SetupPinOptions 具有以下注释:

//对于输出引脚、有效标志为:
开漏模式下的//GPIO_OPENDRAIN 输出
//GPIO_PULLUP 如果启用了漏极开路、也会启用上拉
//和上面列出的输入限定标志(SYNC/QUAL3/QUAL6/SYNC)。
//
//没有标志,默认输入状态为同步,没有
//上拉或极性反转。 默认输出状态为
//标准数字输出。

然后、示例文件 CAN_EXTERNAL_Transmit .c 中的代码使用一个不同的参数来调用这个函数: GPIO_PushPull

  GPIO_SetupPinOptions (4、GPIO_OUTPUT、GPIO_PushPull);

定义有很大不同:

#define GPIO_PushPull 0
#define GPIO_PULLUP (1 << 0)
#define GPIO_INVERE (1 << 1)
#define GPIO_OPENDRAIN (1 << 2)

我正在单步执行 代码、当我监控 CAN_A_TX 引脚时 、我看不到任何活动。

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

    您好、Traian、

    感谢您的提问。 我相信您使用的是最新 C2000Ware 版本上的"device_support"目录是否正确?

    如果是、您可以正确地看到注释不再有效、现在可用的各种选项包括 F2837xD_Gpio_defines.h 文件中提供的选项:

    //
    //Flags for GPIO_SetupPinOptions(). The qualification flags (SYNC, QUAL3,
    //QUAL6, and ASYNC) take up two bits and must be in the order specified.
    //
    #define GPIO_INPUT         0
    #define GPIO_OUTPUT        1
    #define GPIO_PUSHPULL      0
    #define GPIO_PULLUP        (1 << 0)
    #define GPIO_INVERT        (1 << 1)
    #define GPIO_OPENDRAIN     (1 << 2)
    #define GPIO_SYNC          (0x0 << 4)
    #define GPIO_QUAL3         (0x1 << 4)
    #define GPIO_QUAL6         (0x2 << 4)
    #define GPIO_ASYNC         (0x3 << 4)

    对于 CAN、应选择以下值:

    (GPIO_PUSHPULL | GPIO_PULLUP | GPIO_ASYNC)

    现在、由于没有活动、这听起来好像没有为您的输出正确设置 GPIO 多路复用器选项。 您能否查看这是否适用于示例中选择的默认 GPIO?

    此致、

    Vince

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

    Vince、

    在我看来、我认为多路复用器设置正确、您不会说吗?

    GPIO_SetupPinMux (5、GPIO_MUX_CPU1、6);//GPIO5 - CANRXA
    GPIO_SetupPinOptions (5、GPIO_INPUT、GPIO_异 步);
    GPIO_SetupPinMux (4、GPIO_MUX_CPU1、6);//GPIO4 - CANTXA
    GPIO_SetupPinOptions (4、GPIO_OUTPUT、GPIO_PushPull);

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

    您好、Traian、

    您能否提供您正在使用的 C2000Ware 和 CCS 的哪个版本? 这似乎是较旧版本。

    您是否还可以尝试使用 SysConfig 进行配置并查看这些 CAN 引脚的结果设置?

    此致、

    Vince

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

    我尝试使用 SysConfig、但遇到编译错误。 也许我做得不对。 我刚刚在 项目中删除了 SysConfig 文件。

    您能否向我介绍有关如何在  CCS 项目中使用 SysConfig 的文章/文档/指南?

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

    您好、Traian、

    请参阅以下常见问题解答指南、了解如何在工程中设置 SysConfig。 这肯定会使配置过程变得更快/更容易。

    https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/910829/faq-how-do-i-add-sysconfig-support-pinmux-and-peripheral-initialization-to-an-existing-driverlib-project

    此致、

    Vince

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

    是的、这是我第一次做的...让我再试一次、我会向您发送我在做时得到的错误...

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

    Vince、

    我遇到了 SysConfig 的各种问题。

    1.我按照"SPRACX3–2021年10月"文档中的说明操作、发送的链接指向的链接与我在联机手册(https://dev.ti.com/tirex/explore/node?node=A__ACnU18qE90mafEP.f5euJg__c2000ware_software_package__gYkahfz__4.01.00.00): )中看到的链接类似(我在 SysConfig 应用程序中创建的 SysConfig 添加到项目中)。 然后、我将查看工程属性并添加 SDK.json 文件的路径。 奇怪的是、当我添加 json 路径时、我在  SysConfig  文件中看不到任何 SysConfig 设置。 所有条目均为空。 一旦我移除 json 路径、我就可以看到所有引脚、就像我定义的那样。

    使用任一设置、当我尝试构建时、我会收到一个错误、表示它找不到 .h 文件  

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

    我找到了.h 文件并添加了项目的路径: C:\ti\c2000Ware_4_01_00_00\driverlib\f2837xd\driverlib

    但是、现在、当我构建时、我遇到了以下错误:

    但是...我在项目中的其中一个文件中找到了 INT_CANA_0定义:hw_ints.h

    当我进入 CAN.c 并单击"inc/hw_ints.h"时、它会打开该文件、我可以看到 AIN_CANA0变量

    不确定哪一个是正确的 CANA_0或 CANA0?

    删除 SysConfig 文件可解决所有这些问题、但会返回无法找到 include.h 文件的错误。

    在我看来、SysConfig 似乎与示例文件夹中的一些文件相冲突。

    我使用的是 CAN_EXTERNAL_Transmit 示例。

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

    您好、Traian、

    我想我知道它可能会出现什么问题、我过去也遇到过类似的问题、当时我忘记在主文件中添加适当的 include 和函数。

    请确保执行以下操作:

    1.将"#include board.h"添加到主文件中

    2.在 main 中,在 Device_init、Device_initGPIO、Interrupt_initModule 和 Interrupt_initVectorTable 后面添加"Board_init();"

    board.h 应处理所有依赖项并包含这些依赖项。

    如果上述操作不起作用、并且您的项目在其大部分开发中未使用 SysConfig、则您只需在另一个项目中使用 SysConfig 即可查看代码的外观、而不是生成代码。

    您可以打开 SysConfig "Code"视图(它是 SysConfig 窗口右上角的括号徽标"<>")。 然后从此处打开 board.c 和 board.h、以查看根据您的配置生成的代码。 然后、您只需复制粘贴到现有项目中即可。 如果您想跳过将 SysConfig 合并到没有 SysConfig 的现有工程中的过程、这会更容易。

    此致、

    Vince