news 2026/8/29 11:02:45

单片机调试IIC笔记 — 首先检测GPIO和协议能不能用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
单片机调试IIC笔记 — 首先检测GPIO和协议能不能用

单片机协议调试笔记 — GPIO和IIC测试

问题背景

最近在调一个IIC陀螺仪,发什么命令都没反应。折腾半天才发现——GPIO引脚根本没动!

原来是移植了正点原子的库,里面的IO操作是F103的位带操作,和F401不兼容。


分享两个实用的测试函数

1. GPIO电平测试 — 确认引脚真的在动

这个函数用来验证SCL和SDA能不能正常拉高/拉低。

voidGPIO_Test(void){printf("Starting GPIO test...\r\n");// 测试SCL引脚(PA8)printf("Testing SCL (PA8)...\r\n");IIC_SCL(1);delay_ms(100);printf("SCL = 1, PA8_IDR = %d\r\n",HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_8));IIC_SCL(0);delay_ms(100);printf("SCL = 0, PA8_IDR = %d\r\n",HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_8));// 测试SDA引脚(PC9)printf("Testing SDA (PC9)...\r\n");SDA_OUT();IIC_SDA(1);delay_ms(100);printf("SDA = 1 (output), PC9_IDR = %d\r\n",HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_9));IIC_SDA(0);delay_ms(100);printf("SDA = 0 (output), PC9_IDR = %d\r\n",HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_9));printf("GPIO test completed.\r\n");}

正常应该这样:

Starting GPIO test... Testing SCL (PA8)... SCL = 1, PA8_IDR = 1 SCL = 0, PA8_IDR = 0 ← 写0能读到0,说明拉低了 Testing SDA (PC9)... SDA = 1 (output), PC9_IDR = 1 SDA = 0 (output), PC9_IDR = 0

我当时的情况:

SCL = 0, PA8_IDR = 1 ← 写0还是读到1,根本没拉低! SDA = 0 (output), PC9_IDR = 1

2. IIC设备扫描 — 找设备地址

GPIO没问题后,用这个扫描总线上的设备。

voidI2C_Scan(void){u8 i,ack;printf("Starting I2C scan...\r\n");for(i=0;i<128;i++){IIC_Start();IIC_Send_Byte((i<<1)&0xFE);// 写地址ack=IIC_Wait_Ack();IIC_Stop();if(ack==0){printf("Found device at 0x%02X (7-bit: 0x%02X)\r\n",(i<<1),i);}delay_ms(1);}printf("I2C scan completed.\r\n");}

输出示例:

Starting I2C scan... Found device at 0xD0 (7-bit: 0x68) ← 找到陀螺仪了,地址0x68 I2C scan completed.

我遇到的坑:F103的位带操作库,不兼容F401

正点原子的库里有这么一段:

#defineBITBAND(addr,bitnum)((addr&0xF0000000)+0x2000000+((addr&0xFFFFF)<<5)+(bitnum<<2))#defineGPIOA_ODR_Addr(GPIOA_BASE+12)// 0x4001080C#defineGPIOA_IDR_Addr(GPIOA_BASE+8)// 0x40010808...

这些地址是F103的!F401的寄存器布局不一样,直接用会导致IO操作失效。
F103的ODR偏移是+12
F103的IDR偏移是+8
F401的ODR偏移是+20
F401的IDR偏移是+16

解决办法

一:改为F403的位带操作

Cortex-M4编程手册 PM0214 第3.7节 Bit-Banding

#defineBITBAND(addr,bitnum)((addr&0xF0000000)+0x2000000+((addr&0xFFFFF)<<5)+(bitnum<<2))// F401的GPIO寄存器偏移(参考RM0368手册)#defineGPIOA_ODR_Addr(GPIOA_BASE+20)// 0x40020014 ← F401的ODR偏移是+20#defineGPIOA_IDR_Addr(GPIOA_BASE+16)// 0x40020010 ← F401的IDR偏移是+16...
二:改为HAL函数,更直接,通用
// 别用位带了,直接HAL#defineIIC_SCL(n)HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,n)#defineIIC_SDA(n)HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,n)// 读取SDA切换方向#defineSDA_IN(){GPIOC->MODER&=~(3<<(9*2));GPIOC->MODER|=0<<(9*2);}#defineSDA_OUT(){GPIOC->MODER&=~(3<<(9*2));GPIOC->MODER|=1<<(9*2);}#defineREAD_SDAHAL_GPIO_ReadPin(GPIOC,GPIO_PIN_9)

快速排查流程

设备没反应? ↓ 跑 GPIO_Test() ↓ 写1读1,写0读0? ──否──→ 检查IO配置/上拉电阻/代码兼容性 ↓ 是 跑 I2C_Scan() ↓ 找到设备地址? ────否──→ 检查接线/供电/设备是否损坏 ↓ 是 开始正常读写调试
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/26 1:54:43

DeepSeek-OCR-2环境配置:Windows系统安装指南

DeepSeek-OCR-2环境配置&#xff1a;Windows系统安装指南 1. 为什么需要这份Windows安装指南 最近在整理文档处理工作流时&#xff0c;我试用了DeepSeek-OCR-2&#xff0c;发现它确实能解决很多实际问题——比如扫描合同里的表格识别不准、PDF论文里的公式乱码、多栏排版的学…

作者头像 李华
网站建设 2026/8/26 23:47:15

颠覆传统科研绘图流程:代码驱动的高效工作流解决方案

颠覆传统科研绘图流程&#xff1a;代码驱动的高效工作流解决方案 【免费下载链接】tikz Random collection of standalone TikZ images 项目地址: https://gitcode.com/gh_mirrors/tikz/tikz 科研可视化正面临前所未有的精度与效率挑战&#xff0c;而代码绘图技术正在重…

作者头像 李华
网站建设 2026/8/28 12:31:26

Jimeng AI Studio中的C++高性能计算:模型推理加速方案

Jimeng AI Studio中的C高性能计算&#xff1a;模型推理加速方案 你是不是也遇到过这种情况&#xff1f;在Jimeng AI Studio里跑一个模型&#xff0c;看着进度条慢悠悠地走&#xff0c;心里干着急。尤其是处理高清图像或者复杂任务时&#xff0c;等待时间简直让人抓狂。 其实&…

作者头像 李华
网站建设 2026/8/21 17:02:10

GLM-4-9B-Chat-1M效果展示:LongBench-Chat 7.82分实测对比与可视化

GLM-4-9B-Chat-1M效果展示&#xff1a;LongBench-Chat 7.82分实测对比与可视化 1. 超长上下文模型的突破之作 当你面对一份300页的PDF文档&#xff0c;或者需要分析整本小说内容时&#xff0c;传统AI模型往往显得力不从心。大多数模型只能处理几千字的文本&#xff0c;想要让…

作者头像 李华
网站建设 2026/8/29 3:32:39

Docker部署Qwen3-ASR-0.6B:一键构建语音处理微服务

Docker部署Qwen3-ASR-0.6B&#xff1a;一键构建语音处理微服务 1. 为什么选择Qwen3-ASR-0.6B作为微服务核心 在实际业务中&#xff0c;语音识别服务往往需要同时满足三个看似矛盾的要求&#xff1a;高准确率、低延迟和可控成本。很多团队尝试过Whisper系列模型&#xff0c;但…

作者头像 李华
网站建设 2026/8/22 3:01:50

如何突破百度网盘限速?PDown下载器让大文件传输效率提升300%

如何突破百度网盘限速&#xff1f;PDown下载器让大文件传输效率提升300% 【免费下载链接】pdown 百度网盘下载器&#xff0c;2020百度网盘高速下载 项目地址: https://gitcode.com/gh_mirrors/pd/pdown 你是否曾经历过这样的绝望&#xff1a;2GB的学习资料&#xff0c;普…

作者头像 李华