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

【经验分享】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口即可。

I2C 初始化函数
    我们是使用 STM32F1的PB10 和 PB11 模拟 I2C,所以需要使能其端口时钟,并初始化 GPIO,初始化代码如下:
  1. /****************************************************************
  2. * 函 数 名 : IIC_Init
  3. * 函数功能 : IIC 初始化
  4. * 输 入 : 无
  5. * 输 出 : 无
  6. *****************************************************************/
  7. void IIC_Init(void)
  8. {
  9. GPIO_InitTypeDef GPIO_InitStructure;
  10. RCC_APB2PeriphClockCmd(IIC_SCL_PORT_RCC|IIC_SDA_PORT_RCC,ENABL
  11. E);
  12. GPIO_InitStructure.GPIO_Pin=IIC_SCL_PIN;
  13. GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  14. GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  15. GPIO_Init(IIC_SCL_PORT,&GPIO_InitStructure);
  16. GPIO_InitStructure.GPIO_Pin=IIC_SDA_PIN;
  17. GPIO_Init(IIC_SDA_PORT,&GPIO_InitStructure);
  18. IIC_SCL=1;
  19. IIC_SDA=1;
  20. }
复制代码

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

收藏 评论0 发布时间:2022-6-27 10:26

举报

0个回答

所属标签

相似技术帖

官网相关资源

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