stm32f407硬件iic
stm32f407硬件iic
STM32F407 的硬件 I²C(IIC)接口使用相对复杂,需严格遵循时序和配置。以下是关键步骤和代码示例(基于 HAL 库):
硬件配置要点
-
引脚复用(以 I2C1 为例):
- SCL:PB6(或 PB8)
- SDA:PB7(或 PB9)
- 配置为复用开漏输出模式(
GPIO_MODE_AF_OD),启用内部/外部上拉电阻(4.7kΩ)。
-
时钟使能:
__HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_I2C1_CLK_ENABLE();
初始化步骤
1. GPIO 配置
GPIO_InitTypeDef GPIO_InitStruct = {0};
// 配置 SCL (PB6) 和 SDA (PB7)
GPIO_InitStruct.Pin = GPIO_PIN_6 | GPIO_PIN_7;
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; // 复用开漏
GPIO_InitStruct.Pull = GPIO_PULLUP; // 启用上拉
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF4_I2C1; // 复用功能 AF4
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
2. I²C 参数配置
I2C_HandleTypeDef hi2c1;
hi2c1.Instance = I2C1;
hi2c1.Init.ClockSpeed = 100000; // 100kHz 标准模式
hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2; // 50% 占空比
hi2c1.Init.OwnAddress1 = 0x00; // 主设备地址通常设为 0
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; // 7 位地址
hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hi2c1.Init.OwnAddress2 = 0;
hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
if (HAL_I2C_Init(&hi2c1) != HAL_OK) {
// 错误处理
}
3. 时钟配置(可选)
// 在 HAL_I2C_MspInit() 中自动调用
void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c) {
if(hi2c->Instance == I2C1) {
__HAL_RCC_I2C1_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
// ... 引脚复用配置
}
}
常用读写函数
1. 主设备写数据(无寄存器地址)
uint8_t data[] = {0x01, 0x02};
HAL_I2C_Master_Transmit(&hi2c1, DEV_ADDR << 1, data, 2, HAL_MAX_DELAY);
DEV_ADDR << 1:7 位设备地址左移 1 位(最低位为 R/W 位)。
2. 主设备读数据
uint8_t rx_data[2];
HAL_I2C_Master_Receive(&hi2c1, DEV_ADDR << 1, rx_data, 2, HAL_MAX_DELAY);
3. 带寄存器地址的写入
uint8_t reg_addr = 0x10;
uint8_t value = 0xAA;
HAL_I2C_Mem_Write(&hi2c1, DEV_ADDR << 1, reg_addr, I2C_MEMADD_SIZE_8BIT, &value, 1, HAL_MAX_DELAY);
4. 带寄存器地址的读取
uint8_t reg_addr = 0x10;
uint8_t rx_value;
HAL_I2C_Mem_Read(&hi2c1, DEV_ADDR << 1, reg_addr, I2C_MEMADD_SIZE_8BIT, &rx_value, 1, HAL_MAX_DELAY);
常见问题解决
-
卡死或超时:
- 检查 SCL/SDA 上拉电阻(必须接 4.7kΩ)。
- 确保 设备地址正确(7 位地址需左移 1 位)。
- 降低
ClockSpeed(如 10kHz)调试。
-
总线错误:
- 在
HAL_I2C_ErrorCallback()中处理错误:void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *hi2c) { if (hi2c->ErrorCode & HAL_I2C_ERROR_AF) { // ACK 失败 HAL_I2C_Init(hi2c); // 重新初始化 } }
- 在
-
多字节传输:
- 使用
HAL_I2C_Mem_Write/Read()传输连续数据。
- 使用
关键注意事项
- 上拉电阻:硬件 I²C 必须外接 4.7kΩ 上拉电阻(SCL 和 SDA 均需)。
- 时序配置:严格匹配从设备的速度要求(标准模式 100kHz,快速模式 400kHz)。
- 中断/DMA:高实时性场景建议使用中断或 DMA(如
HAL_I2C_Master_Transmit_IT())。
完整示例参考 STM32CubeF4 库中的 I2C 例程(路径:
STM32Cube_FW_F4_Vxx/Projects/Board/I2C)。
stm32f407 double类型
STM32F407是意法半导体(STMicroelectronics)推出的一款ARM Cortex-M4内核的微控制器。它是针对智能电动车领域的实时操作、数字信号处理和高性能应用而设计的。在这
2024-01-07 16:45:45
stm32f407 LAN8720A速率调整
STM32F407和LAN8720A的速率是非常重要的,尤其是在网络环境中。下面我将详细介绍如何通过软件和硬件来调整速率。 软件配置: 首先,我们需要在STM
2024-01-05 13:54:13
STM32F407与STM32F105 CAN通讯失败的定位解决
STM32F407与STM32F105 CAN通讯失败的定位解决问题的发现问题的现象测试过程硬件调整测试软件调整测试结论基本结论结论扩展验证问题
资料下载
小峰
2021-12-02 16:51:16
STM32F407 DCMI摄像头源码
STM32F407 DCMI摄像头源码(电源技术存在的问题总结)-【资源描述】:STM32F407 DCMI摄像头源码【编程语言】:C语言
资料下载
h1654155275.0032
2021-09-16 16:15:00
stm32f407浮点运算速度
支持硬件浮点运算单元(FPU),可以提供快速和高效的浮点运算性能。本文将详细介绍 STM32F407 的浮点运算速度。 浮点运算是很多应用中常用的一种运算类型,特别是对于需要进行较复杂计算的任务,如图像处理、信号处理
2024-01-04 10:58:34
国产优秀替代_APM32F407替代STM32F407记录
前言 最近一段时间在玩极海的APM32F407系列的MCU,在研究一段时间后发现其资源和意法半导体的STM32F407不相上下。通过对比两者的数据手册和参考手册,我发现APM32
2022-05-10 11:22:36
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- EDA是什么?有什么作用?
- dtmb信号覆盖城市查询
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- 单片机和嵌入式的区别是什么
- amoled屏幕和oled区别
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机
- 元宇宙概念龙头股一览