STM32 i2c从机模式中断处理参考

这篇具有很好参考价值的文章主要介绍了STM32 i2c从机模式中断处理参考。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

void I2C1_IRQHandler(void)
{
  /* USER CODE BEGIN I2C1_IRQn 0 */
    extern void i2c1_irq(I2C_HandleTypeDef *hi2c);
    i2c1_irq(&hi2c1);
    return ;
  /* USER CODE END I2C1_IRQn 0 */
  if (hi2c1.Instance->ISR & (I2C_FLAG_BERR | I2C_FLAG_ARLO | I2C_FLAG_OVR)) {
    HAL_I2C_ER_IRQHandler(&hi2c1);
  } else {
    HAL_I2C_EV_IRQHandler(&hi2c1);
  }
  /* USER CODE BEGIN I2C1_IRQn 1 */

  /* USER CODE END I2C1_IRQn 1 */
}

void i2c1_irq(I2C_HandleTypeDef *hi2c)
{
    uint32_t ITFlags   = READ_REG(hi2c->Instance->ISR);
    uint32_t ITSources = READ_REG(hi2c->Instance->CR1);
    
    
  if (((ITFlags & I2C_FLAG_ADDR) != RESET) )
  {
      i2c_sta.rx_index=0;
      i2c_sta.tx_index=0;
      if((ITFlags&I2C_ISR_DIR)!=0)
      {
          hi2c1.Instance->ISR |= I2C_ISR_TXE;
          i2c_sta.pec=Pectable[0^I2C_SLAVE_ADD];
      }
      __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ADDR);
  }
 
    if (((ITFlags & I2C_FLAG_RXNE) != RESET) )
    {
        i2c_sta.rx_flag=1;
        i2c_sta.rx_buff[i2c_sta.rx_index] = hi2c->Instance->RXDR;
        if(i2c_sta.rx_index< I2C_BUFF_LEN-1)
           i2c_sta.rx_index++;
  }
    
 
  if (((ITFlags & I2C_FLAG_TXIS) != RESET) )
  {
        if(i2c_sta.tx_index<i2c_sta.tx_len)
        {
            hi2c->Instance->TXDR = i2c_sta.tx_buff[i2c_sta.tx_index];
            i2c_sta.pec=Pectable[i2c_sta.pec^i2c_sta.tx_buff[i2c_sta.tx_index]];

            if(i2c_sta.tx_index< I2C_BUFF_LEN-1)
            i2c_sta.tx_index++;
        }
        else
            hi2c->Instance->TXDR = i2c_sta.pec;      
          
  }
  if (((ITFlags & I2C_FLAG_STOPF) != RESET) )
  {
        __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_STOPF);
      i2c_sta.stop=1;
  }
 
    if (((ITFlags & I2C_FLAG_AF) != RESET) )
    {

        __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_AF);
    }
    
    if (hi2c1.Instance->ISR & (I2C_FLAG_BERR )) {
        __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_BERR);
    }
    
    if (hi2c1.Instance->ISR & ( I2C_FLAG_ARLO )) {
        __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_ARLO);
    }
    
    if (hi2c1.Instance->ISR & (I2C_FLAG_OVR)) {
        __HAL_I2C_CLEAR_FLAG(hi2c, I2C_FLAG_OVR);
    }
    
    
}文章来源地址https://www.toymoban.com/news/detail-813870.html

到了这里,关于STM32 i2c从机模式中断处理参考的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Clion开发STM32之I2C驱动(参考RT-Thread)

    本章是根据RT-Thread源码中的I2C组件进行抽离,主要不习惯用RT-Thread 然后在结合at24cxx模块补充测试 也为了方便移植和独立于框架的限制。 操作gpio部分 头文件 源码 头文件 源文件

    2024年02月10日
    浏览(20)
  • 【STM32 CubeMX】I2C层次结构、I2C协议

    在STM32 CubeMX环境中,I2C(Inter-Integrated Circuit)是一种常用的串行通信协议,广泛应用于连接各种外设和传感器。理解I2C的层次结构、协议和硬件结构对于STM32微控制器的开发至关重要。通过STM32 CubeMX提供的图形化配置工具,我们能够更轻松地理解和配置I2C通信,同时深入了解

    2024年02月22日
    浏览(27)
  • STM32---I2C

    目录                                       一.I2C协议 1.什么是I2C协议?  2.物理层特性                                     二.协议层 1.I2C读写过程 2.I2C外设 3.I2C外设通讯过程              三.I2C库函数                       四.EEPROM 写操作: 读操作:      

    2024年02月16日
    浏览(18)
  • STM32 I2C

    目录 I2C通信  软件I2C读写MPU6050 I2C通信外设 硬件I2C读写MPU6050 I2C通信 R/W:0写1读 十轴:3轴加速度,3轴角速度,3轴磁场强度和一个气压强度  软件I2C读写MPU6050 MyI2C.c MPU6050.c MPU6050_Reg.h(寄存器) main.c I2C通信外设 GPIO口需要配置为复用开漏输出模式。复用:就是GPIO的状态是交由

    2024年02月19日
    浏览(21)
  • STM32学习笔记(十)丨I2C通信(使用I2C实现MPU6050和STM32之间通信)

    ​  本次课程采用单片机型号为STM32F103C8T6。(鉴于笔者实验时身边只有STM32F103ZET6,故本次实验使基于ZET6进行的) ​  课程链接:江协科技 STM32入门教程   往期笔记链接:   STM32学习笔记(一)丨建立工程丨GPIO 通用输入输出   STM32学习笔记(二)丨STM32程序调试

    2024年01月19日
    浏览(27)
  • STM32——I2C通信

            I2C(Inter IC Bus)是由Philips公司开发的一种通用数据总线,它是两线式串行总线,它具有两根通信线: SCL(Serial Clock)、SDA(Serial Data) ,多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。I2C是同步半双

    2024年01月25日
    浏览(21)
  • STM32-I2C通讯

    I2C( Inter-Integrated Circuit )是一种通用的总线协议。它是由Philips(飞利浦)公司,现NXP(恩智浦)半导体开发的一种 简单的双向两线制 总线协议标准。 I2C有两根双向的信号线,一根数据线SDA用于收发数据,一根时钟线SCL用于通信双方时钟的同步。 支持同步,半双工,带数据应答,

    2024年03月14日
    浏览(24)
  • STM32 I2C详解

    I2C(Inter IC Bus)是由Philips公司开发的一种通用数据总线 两根通信线: SCL(Serial Clock)串行时钟线,使用同步的时序,降低对硬件的依赖,同时同步的时序稳定性也比异步的时序更高。 SDA(Serial Data)串行数据线,半双工,一根线兼具发送和接收,最大化利用资源。 同步,半

    2024年02月05日
    浏览(28)
  • 10:STM32------I2C通信

    目录 一:I2C通信协议 1:I2C简历 2:硬件电路 3:I2C时序基本单元 A : 开/ 终条件 2:发送一个字节 3:接收一个字节 4:应答机制  4:I2C时序  1:指定地址写 2:当前地址读 3: 指定地址读 二:MPU6050 1:简历 2:参数 3:硬件电路 4:框图 5:寄存器地址 三:案例 A:软件I2C读写 MPU6050 1:连接图 2:代码 B:硬

    2024年02月20日
    浏览(25)
  • 【【STM32----I2C通信协议】】

    我们会发现I2C有两根通信线: SCL和SDA 同步 半双工 带数据应答 支持总线挂载多设备(一主多从,多主多从) 硬件电路 所有I2C设备的SCL连在一起,SDA连在一起 设备的SCL和SDA均要配置成开漏输出模式 SCL和SDA各添加一个上拉电阻,阻值一般为4.7KΩ左右 左边的CPU就是主机,他的权

    2024年02月12日
    浏览(17)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包