msp430g2553使用硬件iic与OLED屏(SSD1306)通信

软件iic网上代码很多,也便于移植,但硬件iic相关教程就很少了,受限于硬件型号,没有找到可直接使用的代码例程。

我研究了好几天终于入门,讲讲我的一些经验。

这是两篇收益匪浅的文章:

关于MSP硬件I2C讲解

MSP430 G2553 硬件IIC OLED 单片机 OLED滚动显示_ucb0txifg-CSDN博客

踩过的一些坑:

1.  IIC的地址为7位,总长为8位,最低位为读写控制位。硬件IIC与软件IIC写入的从机地址不一样。IIC初始化时需填入的地址是长度为7位的地址。

2.  msp430单片机内部有USCI_A和USCI_B两种USCI模块,其中只有USCI_B可以配置成I2C模式。

3.  这里把USCI_B硬件模块配置成了IIC,所以连线是连USCI_B模块,而非芯片原理图上的I2C接线。

4.  默认状态下,开发板USCI_B模块的一个引脚(P1.6)通过一个跳帽与某引脚相连,具体功能不明,但导致I2C通信异常。需去掉该跳帽。

数据发送流程如下:
1、    写入从机地址
2、    配置为发送模式
3、    产生起始信号
4、    判断发送缓冲寄存器是否为空:while((IFG2 & UCB0TXIFG) != UCB0TXIFG);
5、    为空则将写的地址写入发送缓冲寄存器
6、    判断从机应答信号,有应答信号了
7、    则判断发送缓冲寄存器是否为空,是为空了
8、    则发送数据
9、    若有多个数据则循环到第七步,若只发送一个数据,则产生停止信号

部分关键代码,重写OLED(SSD1306)所需的Write_IIC_Command、Write_IIC_Data、OLED_WR_Byte函数。

void Write_IIC_Command(unsigned char IIC_Command)
{
    while( UCB0CTL1& UCTXSTP );
    UCB0CTL1 |= UCTR;                // 写模式
    UCB0CTL1 |= UCTXSTT;             // 发送启动位

    // 等待UCTXIFG=1与UCTXSTT=0 同时变化等待一个标志位即可
    while((IFG2 & UCB0TXIFG)==0);
    UCB0TXBUF = 0x00;                // 发送字节内容
    while((IFG2 & UCB0TXIFG)==0);    // 等待UCTXIFG=1
    UCB0TXBUF = IIC_Command;         // 发送字节内容
    while((IFG2 & UCB0TXIFG)==0);    // 等待UCTXIFG=1
    UCB0CTL1 |= UCTXSTP;
    while(UCB0CTL1& UCTXSTP);        // 等待发送完成

    return 0;
}

void Write_IIC_Data(unsigned char IIC_Data)
{
    while( UCB0CTL1& UCTXSTP );
    UCB0CTL1 |= UCTR;                // 写模式
    UCB0CTL1 |= UCTXSTT;             // 发送启动位

    // 等待UCTXIFG=1与UCTXSTT=0 同时变化等待一个标志位即可
    while((IFG2 & UCB0TXIFG)==0);
    UCB0TXBUF = 0x40;                // 发送字节内容
    while((IFG2 & UCB0TXIFG)==0);    // 等待UCTXIFG=1
    UCB0TXBUF = IIC_Data;            // 发送字节内容
    while((IFG2 & UCB0TXIFG)==0);    // 等待UCTXIFG=1
    UCB0CTL1 |= UCTXSTP;
    while(UCB0CTL1& UCTXSTP);        // 等待发送完成

    return 0;
}

void OLED_WR_Byte(unsigned dat,unsigned cmd)
{
    if(cmd) Write_IIC_Data(dat);
    else    Write_IIC_Command(dat);
}

错漏之处还请指出,一同进步。

  • 17
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值