记得在使用STM32F103系列时,好多人说其硬件IIC通讯不稳定。后来我们用到了STM32H743的单片机,使用了其硬件IIC对EEPROM进行读写。硬件IIC使用并不麻烦,而且相比于I/O模拟的IIC效率更高,波形更加标准,且不用考虑在运行RTOS被其他任务打断造成数据丢失。

这里我们使用了CubeMX对MCU进行了配置,生成了基础的初始化代码,蛮方便的。

硬件IIC初始化:

I2C_HandleTypeDef hi2c1;/* I2C1 init function */
void MX_I2C1_Init(void)
{hi2c1.Instance = I2C1;hi2c1.Init.Timing = 0x0090194B;hi2c1.Init.OwnAddress1 = 64;hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;hi2c1.Init.OwnAddress2 = 0;hi2c1.Init.OwnAddress2Masks = I2C_OA2_NOMASK;hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;if (HAL_I2C_Init(&hi2c1) != HAL_OK){Error_Handler();}/** Configure Analogue filter*/if (HAL_I2CEx_ConfigAnalogFilter(&hi2c1, I2C_ANALOGFILTER_ENABLE) != HAL_OK){Error_Handler();}/** Configure Digital filter*/if (HAL_I2CEx_ConfigDigitalFilter(&hi2c1, 0) != HAL_OK){Error_Handler();}}void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)
{GPIO_InitTypeDef GPIO_InitStruct = {0};if(i2cHandle->Instance==I2C1){/* USER CODE BEGIN I2C1_MspInit 0 *//* USER CODE END I2C1_MspInit 0 */__HAL_RCC_GPIOB_CLK_ENABLE();/**I2C1 GPIO ConfigurationPB6     ------> I2C1_SCLPB7     ------> I2C1_SDA*/GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;GPIO_InitStruct.Alternate = GPIO_AF4_I2C1;HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);/* I2C1 clock enable */__HAL_RCC_I2C1_CLK_ENABLE();/* I2C1 interrupt Init */HAL_NVIC_SetPriority(I2C1_ER_IRQn, 3, 0);HAL_NVIC_EnableIRQ(I2C1_ER_IRQn);/* USER CODE BEGIN I2C1_MspInit 1 *//* USER CODE END I2C1_MspInit 1 */}
}void HAL_I2C_MspDeInit(I2C_HandleTypeDef* i2cHandle)
{if(i2cHandle->Instance==I2C1){/* USER CODE BEGIN I2C1_MspDeInit 0 *//* USER CODE END I2C1_MspDeInit 0 *//* Peripheral clock disable */__HAL_RCC_I2C1_CLK_DISABLE();/**I2C1 GPIO ConfigurationPB6     ------> I2C1_SCLPB7     ------> I2C1_SDA*/HAL_GPIO_DeInit(GPIOB, GPIO_PIN_6);HAL_GPIO_DeInit(GPIOB, GPIO_PIN_7);/* I2C1 interrupt Deinit */HAL_NVIC_DisableIRQ(I2C1_ER_IRQn);/* USER CODE BEGIN I2C1_MspDeInit 1 *//* USER CODE END I2C1_MspDeInit 1 */}
}

然后我们就可以开始使用IIC接口函数了:

HAL_I2C_Mem_Write(&hi2c1, 0xa0, addr, I2C_MEMADD_SIZE_16BIT, &data, 1, 8000);

HAL_I2C_Mem_Write(&hi2c1, 0xa0, addr, I2C_MEMADD_SIZE_16BIT, pdata, datalong, 2000000);

HAL_I2C_Mem_Read(&hi2c3, 0xa0, addr, I2C_MEMADD_SIZE_16BIT, buff, 1, 5000);

使用IIC读写EEPROM前记得吧WP引脚拉低

STM32H7系列使用硬件IIC读写EEPROM(HAL库配置源码)相关推荐

  1. STM32硬件IIC读写EEPROM

    前面一篇写了软件模拟IIC读写EEPROM. 本篇介绍硬件IIC读写EEPROM.平台是STM32F103+AT24C04N.SDA和SCL接5K上拉电阻到3.3v. 首先介绍AT24C04N的基本特 ...

  2. STM32CubeMx HAL库使用硬件IIC读写AT24C02

    介绍使用硬件IIC接口读写AT24C02,STM32自带硬件IIC,比较好用,没必要千篇一律的使用模拟IIC.作为一个IIC的使用例子,可以适当修改用于其他IIC接口设备通信控制. 一.测试环境 ST ...

  3. STM32F10x_硬件I2C读写EEPROM(标准外设库版本)

    Ⅰ.写在前面 上一篇文章是"STM32F10x_模拟I2C读写EEPROM",讲述使用IO口模拟I2C总线通信,对EEPROM(AT24Xxx)进行读写操作的过程. 上一篇文章主要 ...

  4. mini2440----keil for AMR之IIC读写EEPROM(AT24C08)

    mini2440----keil for AMR之IIC读写EEPROM(AT24C08) 一:EEPROM芯片介绍 在这里分析AT24C02A/AT24C04A/AT24C08A,对于其他不同型号的 ...

  5. 【STM32H7教程】第70章 STM32H7的内部Flash基础知识和HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第70章       STM32H7的内部Flash基础知识和 ...

  6. 【STM32H7教程】第29章 STM32H7的USART串口基础知识和HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第29章       STM32H7的USART串口基础知识和 ...

  7. 【STM32H7教程】第72章 STM32H7的SPI总线基础知识和HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第72章       STM32H7的SPI总线基础知识和HA ...

  8. 【STM32-I2C学习总结】STM32:硬件-IIC详解 , 固件库编程 , 手把手教你实现IIC

    STM32:硬件-IIC详解 , 固件库编程 , 手把手教你实现IIC 一 .I2C物理层 二.协议层 1.I2C基本读写过程 (1)主机写数据到从机 (2)主机由从机中读数据 (3)I2C 通讯复合 ...

  9. 【STM32H7教程】第87章 STM32H7的SDMMC总线基础知识和HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第87章       STM32H7的SDMMC总线基础知识和 ...

最新文章

  1. msbuild FileSysExcludeFiles
  2. c语言退出程序命令_C语言#error命令,阻止程序编译
  3. Spring MVC的工作原理,我们来看看其源码实现
  4. streamsets rest api 转换 graphql
  5. SAP系统和微信集成的系列教程之九:如何将微信用户发送给微信公众号的内容自动转存到SAP C4C系统
  6. php7 ast,PHP7新特性之抽象语法树(AST)带来的变化详解
  7. 不用再更换整机了,苹果官方可修复iPhone 12系列破裂后盖玻璃
  8. python 超高精度除法_Python十进制-除法,舍入,精度
  9. Android ProgressDialog 实现圆形进度对话框 和 水平进度对话框
  10. (第十一周)俄罗斯方块测试报告
  11. 某游戏中有轰炸机、直升机、重型坦克、轻型坦克、飞行兵、步兵等六大兵种
  12. [javase学习笔记]-8.8 构造代码块
  13. 傲腾机器Linux,【收藏】傲腾装机必看!
  14. 《嵌入式系统可靠性设计技术及案例解析》读书笔记(二)
  15. 解决nacos不停刷日志 ClientWorker get changedGroupKeys:[] 问题
  16. python hist函数_Python pandas.DataFrame.hist函数方法的使用
  17. 【Python】Pandas实现二表查重高亮、去重
  18. 计算机硬件系统的五大基本组成部分分别是,计算机的硬件系统由几大部分构成,分别包括哪些硬件,基本功能是什么?...
  19. web前端之幻灯片(二)--自动播放
  20. 读《格鲁夫给经理人的第一课》

热门文章

  1. 神码ai人工智能写作机器人_游戏AI:机器人反击!
  2. 计算机绘本教程,宝宝语言启蒙培生幼儿英语教程K1~K4全144册绘本PDF+音频+电脑EXE程序...
  3. 【Git】Windows Git和TortoiseGit安装教程(Git2.23.0、TortoiseGit2.8.0、语言包2.8.0)
  4. 2022年,又新出来一个Python学习神器
  5. 计算机毕业设计(附源码)python智慧后勤系统
  6. 金证科技 java开发工程师 校招面经(已offer)
  7. 1852. Ordered Fractions
  8. 设计模式中英文汇总分类
  9. git关联云效使用教程
  10. 怎么做好钣金件产品结构设计