你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM8s单片机从机硬件IIC程序代码(主机为STM32)

[复制链接]
linchenchen 发布时间:2019-12-25 15:42
硬件IIC配置如下:

main.c文件
#define SLAVE_ADDR 0xA0  //该从机地址
#define I2CSPEED 100000 //i2c速度


/******************************IIC从机初始化******************************************************/
void IIC_INIT()
{
        I2C_Init(I2CSPEED, SLAVE_ADDR , I2C_DUTYCYCLE_2, I2C_ACK_CURR, I2C_ADDMODE_7BIT, 16);//I2C初始化
        I2C_ITConfig((I2C_IT_TypeDef)(I2C_IT_ERR | I2C_IT_EVT | I2C_IT_BUF), ENABLE);
        //100K速率,16位自身地址,占空比=2,应答当前字节,从模式地址长度
        //8位输入时钟频率
        //I2C_ITConfig((I2C_IT_TypeDef)(I2C_IT_ERR | I2C_IT_EVT | I2C_IT_BUF), ENABLE);
        //I2C_Cmd(ENABLE);//开启IIC               
}


int main(void)
{
     CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);//时钟初始化(不分频)时钟为1分频16M 2分频8M
     IIC_INIT();//iic初始化
     enableInterrupts();//中断使能开启

     while(1)
    {
             ;
    }
}



stm8sit.c
u8 count = 0;



INTERRUPT_HANDLER(I2C_IRQHandler, 19)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
    /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
//接收发送
    //printf("DHT11!\r\n");
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
//接收发送
    u8 temp = 0;
    if (I2C->SR1&0x02)//地址已经匹配(读SR1,SR3清除该位)
    {
        I2C->SR3&0x07;
        ++count;
        if(count == 1)
        {
          I2C->DR = 0x11;//主机第一次读该从机,该从机发送0x11
        }
        else if(count == 2)
        {
          I2C->DR = 0x22;//主机第二次读该从机,该从机发送0x22
          count = 0;
        }
    }
    else if ((I2C->SR1&0x84)&&(I2C->SR3&0x04))//数据字节传送完
    {

        //temp = 0xA5;    //假设这里发送0xA5

    }
    else if ((I2C->SR1&0x40)&&(0 == (I2C->SR3&0x04)))//接收时数据寄存器
    {
        temp = I2C->DR;    //读取数据寄存器

    }
    else if (I2C->SR1&0x10)//检测到停止位
    {
        I2C->CR2 = I2C->CR2;//清除停止位
    }
    //错误处理
    if (I2C->SR2&0x01)//总线错误
    {
        I2C->SR2 &= ~0x01;//清零
    }
    else if(I2C->SR2&0x02)//仲裁失败
    {
        I2C->SR2 &= ~0x02;//清零
    }
    else if(I2C->SR2&0x04)//应答失败
    {
        I2C->SR2 &= ~0x04;//清零
    }
    else if(I2C->SR2&0x08)//上溢、下溢
    {
        I2C->SR2 &= ~0x08;//清零
    }
    return;
}



主机读取步骤见附件
QQ截图20191225154055.png
收藏 2 评论0 发布时间:2019-12-25 15:42

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似分享

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版