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.

[参考译文] LUNCHTXL-F2.8377万S:运行时在Simulink中更改GPIO引脚的输入/输出状态

Guru**** 2538960 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/641634/launchxl-f28377s-changing-input-output-status-of-gpio-pin-in-simulink-during-runtime

部件号:LAUNCHXL-F2.8377万S

大家好! ;)

我正在推进逆变器的编程(TIDA-0.0366万)! 但是,仍然存在一个问题:在参考设计TIDA-0.0366万的PDF中,提到应将一个GPIO引脚的状态从输入更改为输出一段短时间,以便将禁用信号的电势拖至GND。 因为在板上电时,禁用电位很高,并阻止栅极驱动器的所有PWM信号。
但我的问题是在Simulink中运行时无法更改GPIO引脚的状态。 如果我的模型中有与输入和输出相同的GPIO引脚,则Simulink在编译C代码时总是会抛出错误。 即使我使用已启用的子系统来防止一个GPIO的输入和输出块同时处于活动状态。
您知道我如何解决问题吗? 我附上了示意图的图片,这些图片可以帮助您了解我的问题。

PS:我无法将GPIO状态设置为始终输出,因为MCU会指示禁用信号的潜力。 但是,在逆变器操作期间(如果发生错误),逻辑门应将禁用信号设置为高电平。

此致,
Armin

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

    Mathworks的专家将很快回答您的问题。 谢谢。

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

    您好,Chen:

    感谢您的专业支持! 我可能应该添加以下有关我的设置的信息:
    我使用的是MATLAB R2017a和TI C2000支持软件包版本17.1。2 我安装了CCSv6。

    此致,
    Armin

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

    您可以使用内存复制块写入GPIO寄存器以更改其方向。
    我们提供了在发货型号c2.8035万pmsmfin00_CLA/Hall Sensor B中相同的用例示例
    HTH,

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

    您好,Venkatesh,

    感谢您的回答! 我现在已经实施了一些内存复制块来读取和写入GPIO寄存器。 但我的模型没有按计划工作。 我将很快添加一些屏幕截图并解释哪些内容不起作用。

    此致,
    Armin

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

    您好,Venkatesh,

    感谢您的回答! 我现在已经实施了一些内存复制块来读取和写入GPIO寄存器。 但我的模型没有按计划工作。
    该模型通过SCI连接接收来自主机PC的信号,主机PC是值为0或1的uint16。
    如果SCI信号为1,则应执行已启用的子系统,该子系统将通过启动顺序执行,并应将GPIO71设置为输出引脚,并将其电势设置为低。
    如果SCI信号为0,则执行另一个已启用的子系统,将GPIO状态设置回输入。
    但是,当我将SCI信号值从0更改为1并在主机PC上更改回时,引脚GPIO71不会改变其电势。
    我附上了我的模型的一些屏幕截图,也许您会看到一个错误? 我配置所有其他块(例如其他内存复制块)的方式与配置屏幕截图中显示的块的方式相同。

    我是否正确写入了所有源代码符号? 或者,这种错误行为的潜在原因还有哪些?

    此致,
    Armin

    根模型:

    已启用的子系统(具有启动顺序):

    阻止"I/O状态的内存副本":

    阻止"Memory Write to Set Output Status"(写入内存以设置输出状态):

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

    您好,Armin:

    您是否对生成的代码进行过调查,并查看它是否与您所放置的模型内嵌?

    由于您正在更改GPIO板的方向,而不是真正读取引脚的状态,因此作为备用,您也可以使用系统输出块。

    请查看下图,其中系统输出块用于生成将GPIO板设置为输出的代码。

    此代码将在模型步骤函数内生成,并在收到的SCI消息周围显示'if'条件。

    加热

    此致,

    Venkatesh C

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

    您好,Venkatesh,

    感谢您的帮助! 我真的很喜欢使用这个“系统输出”块直接访问编译的代码!
    但是,将我的代码手动写入此块不会产生任何效果。 我现在直接访问GPIO71的位,而不是换档和屏蔽操作。
    当我查看无法正常工作的C代码时,真正让我感到困惑的是以下几点: 每次Simulink编码器通过更改"GpioCtrlRegs"中的值来更改GPIO的I/O状态时,代码生成都会在一个块的开头插入表达式"EALLOW",最后插入表达式"EDIS;"
    我是否也必须编写这些命令? 我很快就会测试。

    此致,
    Armin

    编辑:当我使用EALLOW和EDIS时,它工作正常;! 非常感谢您的详细帮助! ;)