搜索
bottom↓
回复: 6

STM3.5库I2C函数的应用求解,谢谢

[复制链接]

出0入0汤圆

发表于 2013-12-6 14:43:08 | 显示全部楼层 |阅读模式
正在写STM32F107VC 的应用程序, 需要用户I2C程序,想使用中断服务来发送和接收,看到3.5库里面有多个检查Flag、event、IT信息的函数以及清除flag等函数。没有相关例程,请教下高手,正常的操作流程,谢谢。

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2013-12-10 09:51:38 | 显示全部楼层
望穿秋水,未见来者。只能NXP了,哎。

出0入0汤圆

发表于 2013-12-10 10:27:14 | 显示全部楼层
  1. static void I2C_Configuration(void)
  2. {
  3.         I2C_InitTypeDef  I2C_InitStructure;
  4.         GPIO_InitTypeDef  GPIO_InitStructure;

  5.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);
  6.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
  7.    

  8.         /* PB6,7 SCL and SDA */
  9.         GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6 | GPIO_Pin_7;
  10.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  11.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD; //设置管脚为复用功能开漏输出
  12.         GPIO_Init(GPIOB, &GPIO_InitStructure);          //I2C接口使用的GPIO管脚初始化
  13.        
  14.     I2C_DeInit(I2C1);
  15.     I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;         //设置I2C接口模式
  16.     I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2; //设置I2C接口的高低电平周期
  17.     I2C_InitStructure.I2C_OwnAddress1 = 0x30;          //设置I2C接口的主机地址
  18.     I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;        //设置是否开启ACK响应         
  19.     I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
  20.     I2C_InitStructure.I2C_ClockSpeed = 100000;        //100K速度
  21.    
  22.         I2C_Cmd(I2C1, ENABLE);                            //使能I2C接口
  23.         I2C_Init(I2C1, &I2C_InitStructure);               //I2C接口初始化
  24.         /*允许1字节1应答模式*/
  25.         I2C_AcknowledgeConfig(I2C1, ENABLE);              //使能I2C接口响应

  26. }
  27. rt_uint16_t IIC_Read()
  28. {
  29.         rt_uint16_t dataH = 0,dataL = 0;
  30.         rt_uint16_t ret = 0;
  31.         /* 起始位 */
  32.           I2C_GenerateSTART(I2C1, ENABLE);
  33.           while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));

  34.         I2C_Send7bitAddress(I2C1, 0x46, I2C_Direction_Transmitter);        //写
  35.           while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
  36.         I2C_SendData(I2C1, 0x01); //Power on
  37.           while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
  38.        
  39.           /* 停止位*/
  40.           I2C_GenerateSTOP(I2C1, ENABLE);

  41.         /* 起始位 */
  42.           I2C_GenerateSTART(I2C1, ENABLE);
  43.           while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));

  44.         I2C_Send7bitAddress(I2C1, 0x46, I2C_Direction_Transmitter);        //写
  45.           while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
  46.         I2C_SendData(I2C1, 0x10); //H- resolution mode
  47.           while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
  48.        
  49.           /* 停止位*/
  50.           I2C_GenerateSTOP(I2C1, ENABLE);

  51.         rt_thread_delay(20);//等待数据转换完成

  52.         /* 起始位 */
  53.           I2C_GenerateSTART(I2C1, ENABLE);
  54.           while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
  55.         I2C_Send7bitAddress(I2C1, 0x46, I2C_Direction_Receiver);//读       
  56.         while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
  57.        
  58.         while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED));
  59.         dataH = I2C_ReceiveData(I2C1);

  60.         while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED));
  61.         dataL = I2C_ReceiveData(I2C1);
  62.         I2C_GenerateSTOP(I2C1, ENABLE);
  63.         ret = ((dataH << 8) | dataL);

  64.         return ret;
  65. }
复制代码

之前操作一个IIC接口芯片的代码,可以参考下

出0入0汤圆

发表于 2013-12-10 10:30:43 | 显示全部楼层
忘了,我用的103的芯片

出0入0汤圆

 楼主| 发表于 2013-12-10 14:21:29 | 显示全部楼层
fengdingkusong 发表于 2013-12-10 10:27
之前操作一个IIC接口芯片的代码,可以参考下

谢谢 fengdingkusong 朋友 ,古道热肠的人品! 虽然我想用的是中断方式,也在编写,但是项目时间短,只能改用LPC1766了, 。那个芯片和我原来的设计使用的是一个厂家的。

出0入0汤圆

发表于 2013-12-24 10:13:06 | 显示全部楼层
看看

出0入0汤圆

 楼主| 发表于 2013-12-24 22:00:55 | 显示全部楼层

加油 shengliangcumt  一起学习 :)
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 13:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表