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.

[参考译文] MSP432P401M:实现 I2C 通信

Guru**** 2589275 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/628287/msp432p401m-implementing-i2c-communication

器件型号:MSP432P401M

您好!

我正在尝试初始化 MSP432、以便通过 I2C 与另一个芯片进行通信、但我似乎遇到了一些问题。 该器件连接在 P1.6和 P1.7上、我粘贴了用于初始化 I2C 连接的代码、然后查询器件的 ID。 初始化中的第3点可能缺少某些内容、或者传输过程可能错误。 有人对此有任何经验?

#define MAIN_I2C EUSCI_B0

#include "MSP.h"

/*
用于初始化 i2c
的函数*/
void init_B_i2c ()
{
/*
*
建议的 eUSCI_B 初始化和重新配置过程为:
1.置位 UCSWRST。
UCSWRST=1时初始化所有 eUSCI_B 寄存器(包括 UCxCTL1)。
3.配置端口。
4.在软件中清除 UCSWRST。
5.启用中断(可选)
*
*

/*1. 设置 UCSWRST */
MAIN_I2C->CTLW0 = UCSWRST;

/*2. UCSWRST = 1时初始化所有 eUSCI_B 寄存器(包括 UCxCTL1)。 *
MAIN_I2C->CTLW0 = UCMODE_3 + UCMST + UCSYNC + UCSSEL_2 + UCSWRST;//I2C 模式、主器件、SYNC 和 SMCLK


/*3. 配置端口*/
P1SEL0 |=(1 << 6)|(1 << 7);//引脚 P1.6、P1.7
P1SEL1 &=~((1 << 6)|(1 << 7));

/*4. 清除 USCWRST */
MAIN_I2C->CTLW0 &=~UCSWRST;

/*5. 在 RX*/上启用中断
MAIN_I2C->IE |= UCRXIE;
}


void q_ID_i2c ()
{
MAIN_I2C->I2CSA = 0b0001011;//地址

MAIN_I2C->CTLW0 = UCTR;//发送器模式

MAIN_I2C->CTLW0 = UCTXSTT;//Start 信号

MAIN_I2C->TXBUF = 0x11;//查询 ID

MAIN_I2C->CTLW0 = UCTXSTP;//Stop 信号


}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在步骤3中、您将 IO 配置为由 eUSCI 模块控制。 除了软件、您还需要 SCL 和 SDA 线路上的上拉电阻。 我还建议查看其中一个 I2C 示例并进行测试、以确认操作。

    dev.ti.com/.../

    dev.ti.com/.../

    dev.ti.com/.../

    此致、
    Chris