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

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扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版