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

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

[复制链接]
armrunc 发布时间:2012-2-1 13:48
流程图如下:
i2c_interrupt.png
收藏 5 评论324 发布时间:2012-2-1 13:48

举报

324个回答
armrunc 回答时间:2012-2-1 13:52:56

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

I2C 中断处理函数如下:
 
/**
  * @brief  This function handles I2C1 Event interrupt request, tx, rx
  *         buffer and number of bytes will be changed.
  * @param  None
  * @retval None
  */
void I2C1_EV_IRQHandler(void)
{
#ifdef ARC_I2C_IRQ
    uint32_t i2cEvent;
    I2C_param_struct __IO *pI2C_param;

    pI2C_param = ARC_get_I2C_param();
    i2cEvent = I2C_GetLastEvent(I2C1);
   
    switch (i2cEvent)
    {
        case I2C_EVENT_MASTER_MODE_SELECT:/* EV5 */
            if(pI2C_param->I2C_DIRECTION == ARC_I2C_DIRECTION_TX)
            {
                I2C_Send7bitAddress(I2C1, pI2C_param->DeviceAddr, I2C_Direction_Transmitter);
            }
            else
            {
                I2C_Send7bitAddress(I2C1, pI2C_param->DeviceAddr, I2C_Direction_Receiver);
            }
            break;

        /* Master Transmitter -------------------------------------------------------*/
        case I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED:
            I2C_SendData(I2C1, pI2C_param->SubAddr);
            if(pI2C_param->TxNumOfBytes == 0)
                I2C_ITConfig(I2C1, I2C_IT_BUF, DISABLE);
            break;
          
        case I2C_EVENT_MASTER_BYTE_TRANSMITTING:  /* Without BTF, EV8 */    
            if(pI2C_param->TX_I2C_Index < pI2C_param->TxNumOfBytes)
            {
                I2C_SendData(I2C1, pI2C_param->TxData[pI2C_param->TX_I2C_Index++]);
            }
            else
            {     
                I2C_ITConfig(I2C1, I2C_IT_BUF, DISABLE);
            }
            break;

        case I2C_EVENT_MASTER_BYTE_TRANSMITTED: /* With BTF EV8-2 */
           if(pI2C_param->TX_Generate_stop == 1)
           {
             I2C_GenerateSTOP(I2C1, ENABLE);
             I2C_ITConfig(I2C1, I2C_IT_EVT, DISABLE);
           }
           else
           {
             pI2C_param->I2C_DIRECTION = ARC_I2C_DIRECTION_RX;
             I2C_ITConfig(I2C1, I2C_IT_BUF, ENABLE);
             I2C_GenerateSTART(I2C1, ENABLE);
           }
           break;

        /* Master Receiver -------------------------------------------------------*/
        case I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED:
            if(pI2C_param->RX_I2C_Index == (pI2C_param->RxNumOfBytes - 1))
            {
                I2C_AcknowledgeConfig(I2C1, DISABLE);
                I2C_GenerateSTOP(I2C1, ENABLE);
            }
            break;

        case I2C_EVENT_MASTER_BYTE_RECEIVED:
            pI2C_param->RxData[pI2C_param->RX_I2C_Index++] = I2C_ReceiveData (I2C1);
            if(pI2C_param->RX_I2C_Index == (pI2C_param->RxNumOfBytes - 1))
            {
                I2C_AcknowledgeConfig(I2C1, DISABLE);
                I2C_GenerateSTOP(I2C1, ENABLE);
            }
            break;

        default:
            break;
    }

#endif
}
 
armrunc 回答时间:2012-2-1 13:57:15

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

c 文件请看附件
 

i2c_api.rar

下载

4.13 KB, 下载次数: 841

armrunc 回答时间:2012-2-1 15:26:23

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

具体实例,使用硬件 I2C 访问 EEPROM.

12_I2C.pdf

下载

615.08 KB, 下载次数: 718

火雷达 回答时间:2012-2-2 17:51:27

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

谢谢分享啊
anpec 回答时间:2012-2-3 15:41:15

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

haohaohao
seewolf 回答时间:2012-2-7 14:48:43

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

回复一个,看下,呵呵
wangzhiqi 回答时间:2012-2-8 16:37:32

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

呵呵
谢谢楼主
tedlin 回答时间:2012-2-8 18:17:32

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

Thanks !!!!!
袋鼠-339785 回答时间:2012-2-8 22:21:11

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

回复看看啦
。。。。。

所属标签

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 手机版