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

【经验分享】STM32实例-I2C-EEPROM 实验⑤-I2C 初始化函数

[复制链接]
STMCU小助手 发布时间:2022-6-27 10:26
   本实验所要实现的功能是:首先检测 AT24C02 芯片是否存在,如果存在则输出提示信息,然后通过按键 K_UP 和 K_DOWN 控制 AT24C02 数据读写,并输出写入和读取的数据信息,最后让D1指示灯闪烁提示系统正常运行。程序框架如下:
(1)使能所用 GPIO端口时钟,初始化 GPIO
(2)使用软件模拟 I2C通信时序,包含起始和停止信号、应答信号等
(3)编写 AT24C02读写函数
(4)编写主函数
    前面的实验中都有 GPIO 的初始化,现在对大家来说应该不是问题,所以本章软件的重点在 I2C 时序的模拟及数据的读写上。下面我们打开“I2C-EEPROM实验” 工程, 在APP工程组中可以看到添加了iic.c和 24cxx.c 文件 (iic.c 里面包含了 I2C 驱动程序, 24cxx.c 里面包含了AT24CXX驱动程序,并且此程序支持 AT24C01/02/04/08/16/32/64/128/256 芯片),还要包含对应的头文件路径。
    这里我们分析 PZ6806L 开发板的 EEPROM 实验的几个重要函数,其他部分程序大家可以打开工程查看, 对于PZ6806D开发板EEPROM实验例程只是修改下IIC的 IO口即可。

! l6 T+ o6 z4 R* J
I2C 初始化函数
    我们是使用 STM32F1的PB10 和 PB11 模拟 I2C,所以需要使能其端口时钟,并初始化 GPIO,初始化代码如下:
  1. /****************************************************************6 r8 R6 x* L& G) \% M1 a$ Z
  2. * 函 数 名 : IIC_Init
    % L7 G; |& x& x2 c% W) R+ E" e
  3. * 函数功能 : IIC 初始化1 a2 N6 ^/ h& O) B5 F3 M
  4. * 输 入 : 无
    * I2 F8 D  Q6 D! ?4 Q
  5. * 输 出 : 无5 _$ v3 K  J% G; K; G. D0 j2 S
  6. *****************************************************************/" T2 a; x0 m/ r! ~( h
  7. void IIC_Init(void)
    * J- l: ~% N# Y4 d% j4 _+ A
  8. {
    " u/ |" r+ x( i1 a, n
  9. GPIO_InitTypeDef GPIO_InitStructure;
    1 F& b2 n7 y) P) }; d& J
  10. RCC_APB2PeriphClockCmd(IIC_SCL_PORT_RCC|IIC_SDA_PORT_RCC,ENABL
    - z& y2 h# r: N
  11. E);
    9 ~; J: W7 y1 w
  12. GPIO_InitStructure.GPIO_Pin=IIC_SCL_PIN;2 @3 r* n' v' W8 {) ]
  13. GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;& t/ k- I# o/ ?; x
  14. GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;$ P7 j# t+ o% J0 R$ x- X- o
  15. GPIO_Init(IIC_SCL_PORT,&GPIO_InitStructure);
    " _% `# f% |: U4 u% |2 R/ x  d
  16. GPIO_InitStructure.GPIO_Pin=IIC_SDA_PIN;
    $ v2 F" {2 _  H
  17. GPIO_Init(IIC_SDA_PORT,&GPIO_InitStructure);, C; s0 c5 `& c* |% O# a% C
  18. IIC_SCL=1;7 c3 F+ E/ S, a0 R& H
  19. IIC_SDA=1;
    0 J% B- b- t% H8 e% i$ T
  20. }
复制代码

( C* ^: b, z+ }2 v6 k; s
    由于我们使用的是软件模拟 I2C,所以在配置管脚为推挽输出即可,如果配置为开漏输出也是可以的,因为 PB10 和 PB11 上都外接了上拉电阻。但是如果使用STM32F1硬件I2C就必须配置为开漏输出。初始化函数内的IIC_SCL和IIC_SDA是我们定义的宏,其实就是对 PB10 和 PB11 位带的封装,可以在 iic.h 头文件查看到。

! \1 i$ o% Z. z' }! \9 d
赞 收藏 评论0 发布时间:2022-6-27 10:26

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版