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

stm32f030 的i2c 读写eeprom数据

[复制链接]
alisa123 提问时间:2016-3-15 11:09 /
我按照如下配置,但是就是不能进入接收中断,求大神帮忙看看。谢谢了
void I2C_Configuration(void)
{
GPIO_InitTypeDef  GPIO_InitStruct;
I2C_InitTypeDef  I2C_InitStruct;
NVIC_InitTypeDef  NVIC_InitStructure;

/* Configure the I2C clock source. The clock is derived from the HSI */
RCC_I2CCLKConfig(RCC_I2C1CLK_SYSCLK);
/*Enable GPIOB and I2c1 clock*/
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1 , ENABLE);

/* Connect PXx to I2C_SCL*/
GPIO_PinAFConfig(GPIOB,GPIO_PinSource6,GPIO_AF_1);
/* Connect PXx to I2C_SDA*/
GPIO_PinAFConfig(GPIOB,GPIO_PinSource7,GPIO_AF_1);

/*GPIO Configuration*/
/*Configure I2C1 pins: SCL */
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_OType = GPIO_OType_OD;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOB,&GPIO_InitStruct);

/*Configure sEE_I2C pins: SDA */
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7;
GPIO_Init(GPIOB , &GPIO_InitStruct);

/* Enable the USART1 gloabal Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = I2C1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

/*I2C configuration*/
I2C_InitStruct.I2C_Mode = I2C_Mode_I2C;
I2C_InitStruct.I2C_AnalogFilter = I2C_AnalogFilter_Enable;
I2C_InitStruct.I2C_DigitalFilter = 0x00;
I2C_InitStruct.I2C_OwnAddress1 =0x00;
I2C_InitStruct.I2C_Ack = I2C_Ack_Enable;
I2C_InitStruct.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStruct.I2C_Timing = 0x00210507;
I2C_Init(I2C1, &I2C_InitStruct);

I2C_ITConfig(I2C1,I2C_IT_RXI | I2C_IT_TXI | I2C_IT_TCI | I2C_IT_STOPI,ENABLE);
// I2C1->CR1|=0x7F<<1;  //¿ªÆôÖжÏ
I2C_Cmd(I2C1, ENABLE);
}
void sI2CInterrupt(void)
{
if(I2C_GetITStatus(I2C1,I2C_ISR_TXIS) != RESET)
{
  if(num++ < 1)
  {
   I2C_SendData(I2C1, 0x00);
  }
  else
  {
   I2C_SendData(I2C1, Data2);
   num = 0;
  }
}
else if(I2C_GetITStatus(I2C1,I2C_ISR_TCR) != RESET)
{
  I2C_TransferHandling(I2C1,0xA8,1,I2C_AutoEnd_Mode,I2C_No_StartStop);  
}
else if(I2C_GetITStatus(I2C1,I2C_IT_RXNE) != RESET)  //Êý¾Ý½ÓÊÕÖжÏ
{
  Data1 = I2C_ReceiveData(I2C1);
}
else if(I2C_GetITStatus(I2C1,I2C_ISR_TC) != RESET)
{
  I2C_TransferHandling(I2C1,0xA8,1,I2C_AutoEnd_Mode,I2C_Generate_Start_Read);
}
else if(I2C_GetITStatus(I2C1,I2C_IT_STOPF) != RESET)
{
  I2C_ClearITPendingBit(I2C1,I2C_IT_STOPF);
}
   
}

void sReadI2C(INT8U* lubData,INT16U luwI2CAddr,INT8U lubDataLen)
{
INT8U i;
INT8U lubDeviceAddr;

lubDeviceAddr = luwI2CAddr / 256;
lubDeviceAddr = (lubDeviceAddr & 0x03) << 1;

// µÈ´ý×ÜÏß¿ÕÏÐ
while(I2C_GetFlagStatus(I2C1,I2C_FLAG_BUSY));
I2C_TransferHandling(I2C1,EepromAddr | lubDeviceAddr,1,I2C_SoftEnd_Mode,I2C_Generate_Start_Write);
}

void I2C_uWriteData(INT8U *WriteBuf,INT8U lubWriteAddr,INT8U WriteLen,INT8U lubDeviceAddr)
{
INT8U i;

lubDeviceAddr = (lubDeviceAddr & 0x03) << 1;
// µÈ´ý×ÜÏß¿ÕÏÐ
while(I2C_GetFlagStatus(I2C1,I2C_FLAG_BUSY));
I2C_TransferHandling(I2C1,EepromAddr | lubDeviceAddr,1,I2C_Reload_Mode,I2C_Generate_Start_Write);
}





收藏 2 评论10 发布时间:2016-3-15 11:09

举报

10个回答
liu553824989 回答时间:2016-3-15 14:00:06
stm32的硬件有点复杂,我用模拟的比较多
wolfgang2015 回答时间:2016-3-15 14:22:23
用HAL库吧,中断方式适合DMA。也有非中断的阻塞调用方式。
alisa123 回答时间:2016-3-15 14:31:53
wolfgang2015 发表于 2016-3-15 14:22
用HAL库吧,中断方式适合DMA。也有非中断的阻塞调用方式。

HAL的库你有吗?谢谢
wolfgang2015 回答时间:2016-3-15 14:45:19
alisa123 发表于 2016-3-15 14:31
HAL的库你有吗?谢谢

下载CubeMX,HAL库自来~~
alisa123 回答时间:2016-3-15 15:11:24
wolfgang2015 发表于 2016-3-15 14:45
下载CubeMX,HAL库自来~~

找到了,就是下载下来不对,我再试试,谢谢你了
feiyingha 回答时间:2016-4-7 12:53:18
楼主1楼这个程序是通的吧?
alisa123 回答时间:2016-4-7 13:32:56
本帖最后由 alisa123 于 2016-4-7 13:34 编辑
feiyingha 发表于 2016-4-7 12:53
楼主1楼这个程序是通的吧?


我忘记了,下面这个链接是通的。
alisa123 回答时间:2016-4-7 13:35:40
alisa123 发表于 2016-4-7 13:32
我忘记了,下面这个链接是通的。

https://www.stmcu.org.cn/module/forum/thread-604877-1-1.html,这个是通的,我在板子上跑过的。
feiyingha 回答时间:2016-4-7 13:44:33
alisa123 发表于 2016-4-7 13:35
https://www.stmcu.org.cn/module/forum/thread-604877-1-1.html,这个是通的,我在板子上跑过的。 ...

12下一页

所属标签

相似问题

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