大家早上好、
我并不是 MSP430领域的新手、作为嵌入式固件编程人员、我有着相当好的体验。 Driverlib 是我以前在 MSP430方面的经验中的一个新东西、和
我觉得这是一个很棒的工具……一旦我能使它工作…
我只是添加了这个内容,这样一旦问题得到解决,我就会更像一个傻瓜:)。
我的问题是、我需要开发一个非常简单的项目、其中的传感器通过 I2C 连接到 MSP430器件、CPU 会定期读取该值。
到目前为止都很好……我想。 我订购了2个 MSP430开发套件、阅读了 driverlib 文档、并决定使用 I2C 示例作为参考。 示例中使用的 MSP 为
FR4133、但我认为区别在于端口和引脚配置。
为了简短地讲述长故事、我从几天以来一直在努力让 I2C 正常工作! 无论我尝试什么、我的逻辑分析仪上始终没有任何东西、这都让我疯了!
现在、我可以想象的配置是最简单的:我通过 USB 将开发板连接到 PC、我的逻辑分析仪连接到 Eusci_B0引脚、这是应该的
要用作 I2C (1.3和1.2)、我运行下面的基本代码
#include "driverlib.h" volatile uint8_t transmitData; int main (void){ WDT_A_HOLD (WDT_A_base); GPIO_setPeripheralModuleFunctionInputPin ( GPIO_PORT_P1、 GPIO_PIN2 + GPIO_PIN3、 GPIO_PRIMARY_MODULE_FUNCTION ); PMM_unlockLPM5 (); //初始化主设备 EUSCI_B_I2C_initMasterParam param ={0}; param.selectClockSource = EUSCI_B_I2C_CLOCKSOURCE_SMCLK; param.i2cClk = CS_getMCLK (); param.datarate = EUSCI_B_I2C_SET_DATA_RATE_400KBPS; param.byteCounterThreshold = 1; param.autoSTOPGeneration = EUSCI_B_I2C_NO_AUTO_STOP; EUSCI_B_I2C_initMaster (EUSCI_B0_BASE、param); //指定从器件地址 EUSCI_B_I2C_setSlaveAddress (EUSCI_B0_BASE、 0x48 ); //设置为发送模式 EUSCI_B_I2C_setMode (EUSCI_B0_BASE、 EUSCI_B_I2C_Transmit 模式 ); //启用 I2C 模块以启动操作 EUSCI_B_I2C_ENABLE (EUSCI_B0_BASE); transmitData = 1; while (1) { //发送单字节数据。 EUSCI_B_I2C_masterSendSingleByte (EUSCI_B0_BASE、 传输数据 ); //延迟直到传输完成 while (EUSCI_B_I2C_isBusBusy (EUSCI_B0_BASE)); //每次传输之间的延迟 _DELAY_CYCLES (50); //递增发送数据计数器 transmitData++; } 返回(0); }
我希望在逻辑分析仪上看到一些东西、但信号永远不会移动(是的、我仔细检查了分析仪 works....it)。
所以,我的问题是……这里有什么问题? 我已经尝试了示例代码(singleTX、multipleSlaves 等),我已经尝试了第二块板,我尝试了所有可能的时钟系统配置和时钟源… 始终是相同的问题。 out_for_box 示例工作正常、我还能够在板 LED 上闪烁并将引脚移至高/低... 但 I2C 无法正常工作!
请,有人给我指出正确的方向来理解这种奇怪的… 我缺少什么??