stm32f103 i2c gpio
在STM32F103系列MCU中配置I2C通信时,GPIO的设置是关键步骤之一。以下是核心要点:
1. I2C引脚分配
STM32F103的I2C模块通常使用以下引脚(默认复用功能):
- I2C1:
- SCL:
PB6(或备用引脚PB8,需查看具体型号手册) - SDA:
PB7(或备用引脚PB9)
- SCL:
- I2C2:
- SCL:
PB10 - SDA:
PB11
- SCL:
2. GPIO配置步骤
(1) 启用时钟
// 启用GPIOB时钟(假设使用PB6/PB7)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
// 启用I2C1时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);
(2) 配置GPIO模式
I2C通信需要将GPIO设置为复用开漏输出模式,并启用内部/外部上拉电阻:
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; // PB6(SCL), PB7(SDA)
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_OD; // 复用开漏模式
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; // 速度可选
GPIO_Init(GPIOB, &GPIO_InitStruct);
3. I2C模块配置(以标准库为例)
I2C_InitTypeDef I2C_InitStruct;
I2C_InitStruct.I2C_Mode = I2C_Mode_I2C;
I2C_InitStruct.I2C_DutyCycle = I2C_DutyCycle_2; // 50%占空比
I2C_InitStruct.I2C_OwnAddress1 = 0xA0; // 本机地址(7位或10位)
I2C_InitStruct.I2C_Ack = I2C_Ack_Enable; // 启用应答
I2C_InitStruct.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStruct.I2C_ClockSpeed = 100000; // 100kHz标准模式
I2C_Init(I2C1, &I2C_InitStruct);
I2C_Cmd(I2C1, ENABLE); // 启用I2C1
4. 常见问题排查
- 通信失败:
- 检查SCL/SDA是否接4.7kΩ上拉电阻(必须外接)。
- 确认从设备地址正确(7位地址需左移1位,末尾补0)。
- 检查时钟速度是否过高(尤其是长线连接时)。
- 硬件连接:
- 确保I2C设备共地。
- 避免与其他外设引脚冲突。
5. HAL库配置(替代方案)
若使用STM32CubeMX/HAL库,可通过以下代码初始化:
// GPIO配置
__HAL_RCC_GPIOB_CLK_ENABLE();
GPIO_InitTypeDef gpio;
gpio.Pin = GPIO_PIN_6 | GPIO_PIN_7;
gpio.Mode = GPIO_MODE_AF_OD;
gpio.Pull = GPIO_PULLUP;
gpio.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOB, &gpio);
// I2C配置
hi2c1.Instance = I2C1;
hi2c1.Init.ClockSpeed = 100000;
hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
hi2c1.Init.OwnAddress1 = 0xA0;
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
HAL_I2C_Init(&hi2c1);
如有具体问题(如通信超时、ACK失败等),请提供更多细节以进一步分析!
STM32F103硬件I2C Slave
MCU:STM32F103IDE:STM32CubeIDEHAL库硬件I2C当作Slave,模拟EEPROM行为测试工具:树莓派为
资料下载
goodmbby
2021-12-20 19:38:54
STM32作为I2C从机中断接收和从模式中断应答数据总结
之前在项目中用到了STM32F103的i2c功能,大致功能是两个单片机进行i2c通信,而且通信模式是主问从答模式。这里我研究了一下
资料下载
远不及你
2021-12-02 19:21:32
STM32F103硬件I2C Slave的相关资料分享
MCU:STM32F103IDE:STM32CubeIDEHAL库硬件I2C当作Slave,模拟EEPROM行为测试工具:树莓派为
STM32F103与STM32F103F407寄存器和配制差异
别。默认复用功能:只需要开启该外设的时钟和相对应的GPIO时钟,然后再配置相应外设即可。(例:开启I2c时钟和PB6和PB7时钟)重映射复用:不仅要开启该外设的时钟和相对应的
STM32F103的I2C软件模拟实验
例程:STM32F103系列 I2C软件模拟实验(mini板)问题:下面两行关于“IO方向”的代码不太明白。//IO 方向设置#define SDA_IN() {GPIOC->CRH&=0XFFFF0F
STM32F103系列芯片的相关资料推荐
信号线。内核通过总线矩阵与FLASH、SRAM、外设连接。而外设包括GPIO、USART、I2C、SPI等。STM32芯片系统结构
STM32F103 硬件I2C主从机通信 精选资料分享
肝了这么多天,查了很多资料,逛了不少论坛终于把stm32f103的硬件I2C写出来了,就先做个记录。开发板是自己画的兼容原子精英两块板子,型号是f103
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- dtmb信号覆盖城市查询
- EDA是什么?有什么作用?
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- amoled屏幕和oled区别
- 单片机和嵌入式的区别是什么
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机
- 元宇宙概念龙头股一览