news 2026/4/18 5:39:48

单片机调试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/4/17 19:52:36

6个维度解析网盘直链下载工具:突破限速壁垒的技术方案

6个维度解析网盘直链下载工具&#xff1a;突破限速壁垒的技术方案 【免费下载链接】Online-disk-direct-link-download-assistant 可以获取网盘文件真实下载地址。基于【网盘直链下载助手】修改&#xff08;改自6.1.4版本&#xff09; &#xff0c;自用&#xff0c;去推广&…

作者头像 李华
网站建设 2026/4/18 5:37:31

GLM-4工具调用开发:Function Call对接企业API实战

GLM-4工具调用开发&#xff1a;Function Call对接企业API实战 你是不是也遇到过这样的场景&#xff1f;老板让你把大模型的能力集成到公司的CRM系统里&#xff0c;让销售团队能直接用自然语言查询客户信息。你兴冲冲地接下了任务&#xff0c;结果发现要对接企业内部的API&…

作者头像 李华
网站建设 2026/4/15 17:40:13

Mail Multiply:技术赋能的批量邮箱生成解决方案

Mail Multiply&#xff1a;技术赋能的批量邮箱生成解决方案 【免费下载链接】mailmultiply Make Unlimited Gmails 项目地址: https://gitcode.com/gh_mirrors/ma/mailmultiply 痛点解析&#xff1a;测试与隐私场景下的邮箱资源困境 在现代软件开发与网络安全测试中&am…

作者头像 李华
网站建设 2026/4/15 19:10:29

免费商用字体推荐:设计师必备的现代无衬线字体解决方案

免费商用字体推荐&#xff1a;设计师必备的现代无衬线字体解决方案 【免费下载链接】Bebas-Neue Bebas Neue font 项目地址: https://gitcode.com/gh_mirrors/be/Bebas-Neue 在设计工作中&#xff0c;选择合适的字体往往是最耗费精力却又至关重要的环节。许多设计师常常…

作者头像 李华
网站建设 2026/3/29 4:10:20

设计师必备的现代无衬线字体:Bebas Neue免费商用全解析

设计师必备的现代无衬线字体&#xff1a;Bebas Neue免费商用全解析 【免费下载链接】Bebas-Neue Bebas Neue font 项目地址: https://gitcode.com/gh_mirrors/be/Bebas-Neue 在当代品牌设计领域&#xff0c;选择一款兼具视觉冲击力与实用价值的字体往往是设计成功的关键…

作者头像 李华
网站建设 2026/4/7 21:10:36

SiameseUIE与YOLOv8结合:多模态信息处理

SiameseUIE与YOLOv8结合&#xff1a;多模态信息处理 想象一下&#xff0c;你正在分析一份产品宣传海报。传统的AI工具要么只能告诉你图片里有什么&#xff08;比如一个手机、一个充电器&#xff09;&#xff0c;要么只能分析旁边的文字描述&#xff08;比如“超长续航”、“快…

作者头像 李华