MSP430学习笔记(四)丨I2C通信(MSP430F5529驱动OLED显示屏)_msp430的软件iic通信控制oled

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

如果你需要这些资料,可以戳这里获取

​  笔者学习采用单片机型号为MSP430F5529,使用MSP-EXP430F5529LP开发板。
​  笔者拥有一定的STM32基础,在学习MSP430的过程中,最开始苦于没有合适的OLED显示驱动代码,所以花了很多时间钻研。综合网上的各种代码,笔者认为江协科技的STM32课程中提供的OLED代码使用方便,代码逻辑清晰便于学习和使用,所以花了很多时间来研究那一版的代码写法和MSP430的I2C通信。本篇文章主要实现MSP430的基于硬件I2C的主模式信息传输。


一、USCI_B——I2C主模式操作

1.1 函数调用顺序说明

​  为了驱动主控模块,需要按照以下顺序调用API:

  1. USCI_B_I2C_initMaster() - 初始化USCI_B_I2C主控模块。
  2. USCI_B_I2C_setSlaveAddress() - 设置主控将与之通信的从设备地址。这里的从设备地址是不加读写操作位的从设备地址。MSP430的库函数会在时序开头的起始条件后根据传输/接收模式自动拼接设备地址+读写位的第一个字节。
  3. USCI_B_I2C_setMode() - 选择操作模式(发送或接收)。
  4. USCI_B_I2C_enable() - 启用USCI_B_I2C模块。
  5. USCI_B_I2C_enableInterrupt()(如果使用中断) - 启用USCI_B_I2C中断。如果需要传输数据,则需要使能传输中断;如果需要接收数据,则需要使能接收中断。

​  接下来可以根据需要调用传输或接收相关的API。

​  用户首先需要调用USCI_B_I2C_initMaster()来初始化USCI_B_I2C模块并将其配置为主控。该函数将设置时钟和数据速率。然后使用USCI_B_I2C_setSlaveAddress来设置主控与之通信的从设备地址。接下来使用USCI_B_I2C_setMode选择操作模式(发送或接收)。现在可以使用USCI_B_I2C_enable启用USCI_B_I2C模块。建议在启用中断之前启用USCI_B_I2C模块。在启用中断(如果有)后,此时可以发起任何数据的发送或接收。

​  可以通过调用以下列出的相关API来在总线上发起传输。如果设备处于等待IFG标志设置的状态中,可以使用包含超时的API,以避免陷入无限循环。

1.2 不同情况下的函数调用顺序

​  主控单字节发送:

  • USCI_B_I2C_masterSendSingleByte()

​  主控多字节发送(之后的三个函数需要在中断中调用):

  • USCI_B_I2C_masterSendMultiByteStart()
  • USCI_B_I2C_masterSendMultiByteNext()
  • USCI_B_I2C_masterSendMultiByteFinish()
  • USCI_B_I2C_masterSendMultiByteStop()

​  主控单字节接收:

  • USCI_B_I2C_masterReceiveSingleStart()
  • USCI_B_I2C_masterReceiveSingle()

​  主控多字节接收(之后的三个函数需要在中断中调用):

  • USCI_B_I2C_masterReceiveMultiByteStart()
  • USCI_B_I2C_masterReceiveMultiByteNext()
  • USCI_B_I2C_masterReceiveMultiByteFinish()
  • USCI_B_I2C_masterReceiveMultiByteStop()

​  带超时的主控单字节发送:

  • USCI_B_I2C_masterSendSingleByteWithTimeout()

​  带超时的主控多字节发送:

  • USCI_B_I2C_masterSendMultiByteStartWithTimeout()
  • USCI_B_I2C_masterSendMultiByteNextWithTimeout()
  • USCI_B_I2C_masterReceiveMultiByteFinishWithTimeout()
  • USCI_B_I2C_masterSendMultiByteStopWithTimeout()

​  带超时的主控单字节接收:

  • USCI_B_I2C_masterReceiveSingleStartWithTimeout()

​  对于基于中断的传输,用户必须为USCI_B_I2C设备注册中断处理程序并启用USCI_B_I2C中断。

在MSP430中,超时(Timeout)是指在特定时间内未能完成某个操作或接收到预期的响应。它通常用于处理通信协议中的错误或异常情况,以防止程序陷入无限等待或死锁状态。
  在某些通信协议中,例如I2C或UART,设备之间的通信可能会发生错误或超时。当发生这种情况时,为了确保程序的正常运行,可以设置一个超时机制。超时机制会在设定的时间内检测是否收到预期的响应,如果超过设定的时间仍未收到响应,则认为操作失败或通信出现问题。
  超时可以根据具体应用和通信协议的要求进行设置。通常,可以使用定时器或计数器来实现超时功能。在超时期间,程序可以执行相应的错误处理或尝试重新发送数据。
  超时的设定取决于通信环境、通信速度和所需的响应时间。通过合理设置超时时间,可以提高系统的鲁棒性和可靠性,避免长时间的等待或阻塞情况,从而提高程序的性能和响应能力。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值