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.

[参考译文] MSP430FR6047:MSP430FR6047

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1313715/msp430fr6047-msp430fr6047

器件型号:MSP430FR6047

大家好、我使用 EVM430FR6047开发了应用" MSP430FR6047EVM_USS_EVM" Water_Demo。 想法是通过 I2C 协议从 MSP430向我的 Arduino 板发送数据。 但是、当我在主源代码中实现 I2C 函数时、EVM430FR6047板和 USS (超声波传感设计中心)软件之间的连接会断开。 这是否是因为板通过 I2C 与计算机通信而使用 I2C 的问题?  

根据我从数据表中看到的、这个评估板有两个 I2C 外设、我认为这可以解决这个问题。有什么方法可以解决这个问题吗? 现在、我也将为您提供我的代码。 如果这是使用 I2C 的问题,并且在不中断与 USS 的通信的情况下不能使用 I2C 进行数据发送,那么它是否能与 UART 一起工作? 感谢你的帮助。 (注释掉 UART 协议)  

空 main (void)
{

WDTCTL = WDTPW + WDTHOLD;

/* EUSCI_A_UART_initParam uartParams ={
.selectClockSource = UCSSEL_2、// SMCLK 作为时钟源
.msborLsbFirst = 0、// MSB 优先
numberofStopBits = 0、// 1个停止位
.patity = EUSCI_A_UART_NO_CHECKI、//不进行奇偶校验
.clockPrescalar = 104、//波特率控制
.firstModReg = 1、//第一个调制阶段
.secondModReg = 0、//第二个调制阶段
.OVERSAMPLING = 0、//无过采样
.uartMode = UCMODE_0、// UART 模式
};


EUSCI_A_UART_init (EUSCI_A0_BASE、&uartParams);
EUSCI_A_UART_translData (EUSCI_A0_BASE、'A');
*/


EUSCI_B_I2C_initMasterParam i2cParams ={
.selectClockSource = EUSCI_B_I2C_CLOCKSOURCE_SMCLK、//使用 SMCLK 作为时钟源
.i2cClk = 100000、// I2C 时钟频率(Hz)
.datarate = 10000、//所需的数据速率(Hz)
.autoSTOPGeneration = EUSCI_B_I2C_NO_AUTO_STOP、//无自动停止生成
.byteCounterThreshold = 0、//无字节计数器阈值
};


uint16_t RESET_SOURCE = 0x00;

//初始化系统的基本功能
HAL_SYSTEM_Init ();

//初始化用户接口,包括按钮、LCD、GUI
HMI_Init ();

//验证重置源并记录/报告是否存在错误
reset_source = hal_system_GetResetSource ();
if (reset_source!= 0x00)
{
USSLibGUIApp_send_error (command_handler_error_fault_reset_error、
RESET_SOURCE);

__enable_interrupt ();

//初始化 USS 库
USSLibGU45CDIC(); App_Init


//EUSCI_B_I2C_initMaster (EUSCI_B0_BASE、&i2cParams);
// EUSCI_B_I2C_setSlaveAddress (EUSCI_B0_BASE、0x42);
// EUSCI_B_I2C_ENABLE (EUSCI_B0_BASE);

while (1){


EUSCI_B_I2C_initMaster (EUSCI_B0_BASE、&i2cParams);
EUSCI_B_I2C_setSlaveAddress (EUSCI_B0_BASE、0x42);
EUSCI_B_I2C_ENABLE (EUSCI_B0_BASE);
EUSCI_B_I2C_masterSendSingleByte (EUSCI_B0_BASE、'A');

USSLibGU45CDIC(); App_Engine


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

    尊敬的 UMUT:

    您可能更正了初始 I2C 问题的原因是 EVM 使用 I2C 与计算机进行通信。 但是、我还希望更改与 Arduino 配合使用的 I2C 外设有助于解决此问题。 我个人来说、尚未向 EVM 添加 I2C 外设、因此需要一些时间来调试和找出这里的问题。

    如果 UART 是可行的选项、我建议您使用 FR6047 USSSWLIB 模板示例。 该版本旨在用作生产用途的参考、因此它没有 GUI 功能、但它已设置 UART 外设以与 Arduino 等其他器件通信。 我自己也使用过这条线路、因此如果您走这条路线、我可以为您提供更好的帮助。  

    如果这有帮助、或您需要有关 I2C 外设的进一步帮助、请告诉我。

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

    尊敬的 Dylan:

    n`t、即使用与 I2C 相同的方式尝试、我也无法成功地初始化 UART。但是、如果没有 GUI、我可以让 I2C 正常工作。 但我必须有函数  App_Engine ();工作,所以我需要整个超声波传感应用。 我不明白您具体说 UART 是什么、但如果 GUI 功能不能与 UART 配合使用、我不能选择这种情况。 如果能找到一个可以使用 GUI 功能和 I2C 的解决方案、我会很高兴。   

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

    我明白了。 我的意思是在没有 GUI 的情况下使用 UART、所以我们可以继续这条建议。

    您可能需要尝试一种不对 GUI 使用 I2C 中断的方法。 GUI 似乎经常会出现一些问题。 您能否在实施中尝试一下?  

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

    n`t、Dylan、我在我的实现中不使用任何中断。 n`t、`s 此完整源代码中的文件可能会出现中断。我找不到它、这就是我需要 TI 专家帮助的原因。  

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

    您应该保留 GUI 使用的中断、它们对 GUI 行为至关重要、因此您无需深挖源代码即可查找其中包含的中断。 我在上面看到了您的初始化代码、您能否向我展示您用于实际执行 I2C 发送的代码? 您是否已经实施了此策略?

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

    我实际上是在 while (1)循环内部使用上述代码发送我的 I2C 消息

    while (1){
    EUSCI_B_I2C_initMaster (EUSCI_B0_BASE、&i2cParams);
    EUSCI_B_I2C_setSlaveAddress (EUSCI_B0_BASE、0x42);
    EUSCI_B_I2C_ENABLE (EUSCI_B0_BASE);
    EUSCI_B_I2C_masterSendSingleByte (EUSCI_B0_BASE、'A');

    USSLibGU45CDIC(); App_Engine

    请参阅突出显示的功能。

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

    哦、您还没有启动 App_Engine、不能使用 I2C 呢? 您是否曾尝试使用 I2C (不包括 USS)示例之一来检查 I2C 的行为? 或者、您是否在没有任何 USS 代码的情况下测试了 I2C 实现? 在我们开始查看更复杂的 USS 代码之前、将问题隔离到 I2C 非常重要。

    如果您尚未准备就绪、可以尝试使用 MSP430FR60x3_euscib0_i2c_11.c 并在其中测试 I2C 吗? 工作正常后、可以将 I2C 功能添加到 USS 演示代码中。

    如果您尝试过该功能、或者您已经完成该功能、请告诉我。 我很惊讶地看到、在 GUI 应用引擎运行之前就出现了这些问题。  

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

    我来再次解释一下代码的表述。 我的 I2C 函数在上面您刚才看到的代码中正常工作。 我已经使用 Arduino 来查看是否正在发送 I2C 消息、成功发送、所以我收到了来自 EVM430板的消息。 但是 I2C 函数只有在我在  USSLibGU谱 库 App_Engine ()之前调用它时才起作用。 因此、对于我的问题、有两种说法是有效的、例如、

    n`t ,我在 USSLIBGUI 前调用 I2C 函数,并成功地向 Arduino 发送消息,但我无法与 USS 应用程序连接。

    n`t ,我调用 USSLIBGUI 之前 I2C 函数,我可以连接 USS 应用程序,但我的 Arduino 不会收到任何消息.


    如上所示、我n`t 在 I2C 函数之后也调用了 USSLibGUI 函数、但仍然无法连接到 USS 应用。

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

    尊敬的 UMUT:

    我真的不知道这些代码中的任何一个。 但我怀疑这是 SW 的一个问题。 假设这两个部分中的任何部分在某个点处于阻塞状态(等待某些数据)。 正常情况下、接收数据的中断会设置一个标志以取消阻止处理。 然后、这将使主函数继续并处理数据。 现在、如果您将两个这样的函数组合在一个单线程系统中、如果不更改某些代码、这些函数将无法正常工作。

    一种查明方法是使用调试器查看代码被阻止的位置。 您是否还尝试过该方法? 基本上、运行应用、一旦它停止响应、就使用调试器停止 t、并查看 PC 所处的位置。 您也可以执行一些单步操作来查看正在发生的情况。  

    此致、Frank

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

    大家好、Frank、我们已经决定用 UART 代替 I2C、于是我们与我的同事共同实施了该协议。 它按我想要的方式工作、现在没有问题。 我们可以结束本次讨论。 谢谢大家。 :)  

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

    尊敬的 UMUT:

    感谢您的更新。 您可以通过单击 Resolved (已解决)按钮来确认此操作已关闭。 谢谢。  
    我看到了您的最新条目、并将让我们的专家跟进此事。

    此致、Frank