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

【经验分享】STM32 I2C 硬件中断方式实现方法,带流程图

[复制链接]
STMCU小助手 发布时间:2022-1-11 21:16
流程图如下:
QXX4@71V@C4T9_Z1O`NUS]I.png

RE:STM32 I2C 硬件中断方式实现方法,带流程图


I2C 中断处理函数如下:
  1. <table class="t_table"><tbody><tr><td><div align="center"><table class="t_table"><tbody><tr><td>/**
  2.   * @brief  This function handles I2C1 Event interrupt request, tx, rx
  3.   *         buffer and number of bytes will be changed.
  4.   * @param  None
  5.   * @retval None
  6.   */
  7. void I2C1_EV_IRQHandler(void)
  8. {
  9. #ifdef ARC_I2C_IRQ
  10.     uint32_t i2cEvent;
  11.     I2C_param_struct __IO *pI2C_param;

  12.     pI2C_param = ARC_get_I2C_param();
  13.     i2cEvent = I2C_GetLastEvent(I2C1);
  14.    
  15.     switch (i2cEvent)
  16.     {
  17.         case I2C_EVENT_MASTER_MODE_SELECT:/* EV5 */
  18.             if(pI2C_param->I2C_DIRECTION == ARC_I2C_DIRECTION_TX)
  19.             {
  20.                 I2C_Send7bitAddress(I2C1, pI2C_param->DeviceAddr, I2C_Direction_Transmitter);
  21.             }
  22.             else
  23.             {
  24.                 I2C_Send7bitAddress(I2C1, pI2C_param->DeviceAddr, I2C_Direction_Receiver);
  25.             }
  26.             break;

  27.         /* Master Transmitter -------------------------------------------------------*/
  28.         case I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED:
  29.             I2C_SendData(I2C1, pI2C_param->SubAddr);
  30.             if(pI2C_param->TxNumOfBytes == 0)
  31.                 I2C_ITConfig(I2C1, I2C_IT_BUF, DISABLE);
  32.             break;
  33.          
  34.         case I2C_EVENT_MASTER_BYTE_TRANSMITTING:  /* Without BTF, EV8 */   
  35.             if(pI2C_param->TX_I2C_Index < pI2C_param->TxNumOfBytes)
  36.             {
  37.                 I2C_SendData(I2C1, pI2C_param->TxData[pI2C_param->TX_I2C_Index++]);
  38.             }
  39.             else
  40.             {     
  41.                 I2C_ITConfig(I2C1, I2C_IT_BUF, DISABLE);
  42.             }
  43.             break;

  44.         case I2C_EVENT_MASTER_BYTE_TRANSMITTED: /* With BTF EV8-2 */
  45.            if(pI2C_param->TX_Generate_stop == 1)
  46.            {
  47.              I2C_GenerateSTOP(I2C1, ENABLE);
  48.              I2C_ITConfig(I2C1, I2C_IT_EVT, DISABLE);
  49.            }
  50.            else
  51.            {
  52.              pI2C_param->I2C_DIRECTION = ARC_I2C_DIRECTION_RX;
  53.              I2C_ITConfig(I2C1, I2C_IT_BUF, ENABLE);
  54.              I2C_GenerateSTART(I2C1, ENABLE);
  55.            }
  56.            break;

  57.         /* Master Receiver -------------------------------------------------------*/
  58.         case I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED:
  59.             if(pI2C_param->RX_I2C_Index == (pI2C_param->RxNumOfBytes - 1))
  60.             {
  61.                 I2C_AcknowledgeConfig(I2C1, DISABLE);
  62.                 I2C_GenerateSTOP(I2C1, ENABLE);
  63.             }
  64.             break;

  65.         case I2C_EVENT_MASTER_BYTE_RECEIVED:
  66.             pI2C_param->RxData[pI2C_param->RX_I2C_Index++] = I2C_ReceiveData (I2C1);
  67.             if(pI2C_param->RX_I2C_Index == (pI2C_param->RxNumOfBytes - 1))
  68.             {
  69.                 I2C_AcknowledgeConfig(I2C1, DISABLE);
  70.                 I2C_GenerateSTOP(I2C1, ENABLE);
  71.             }
  72.             break;

  73.         default:
  74.             break;
  75.     }

  76. #endif
  77. }</td></tr></tbody></table></div></td></tr></tbody></table>
复制代码

收藏 评论0 发布时间:2022-1-11 21:16

举报

0个回答

所属标签

相似分享

官网相关资源

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