在完成了多通道的代码编写后的测试阶段,前几个通道测试正常。最后一个通道的数据异常,receive为0。
遇到这种情况,我开始用逻辑分析仪抓取I2C波形
发现该通道的SDA(PB3)引脚全程没有高低电平输出,一开始我推测为主机SDA引脚配置错误。仔细查看SDA引脚配置无问题,用逻辑分析仪直接抓取COM8的SCL、SDA引脚,SDA引脚(PB3)仍然没有高低电平输出。
我开始用万用表测试该引脚与MCU是否导通,结果是正常导通的。
然后,我让这个引脚在while(1)循环内不停翻转输出高低电平,仍然没有高电平的输出。后来突然想到,在STM32F10x系列的芯片中,PB3是JTDO数据输出位,不能直接作为普通IO口使用。在完成引脚功能重映射后,全部通道都可以正常采集数据。
如果要将这些引脚作为普通IO口使用,需要对这些 引脚的功能进行重映射。
步骤:
1、开启AFIO复用时钟
2、GPIO_PinRemapConfig(x, ENABLE);有三种参数可以完成引脚功能重映射:
(1)GPIO_Remap_SWJ_JTAGDisable
PB3,PB4,PA15做普通IO;PA13、PA14用于SWD调试
(2)GPIO_Remap_SWJ_Disable
5个引脚全变为普通引脚,不能再用JTAG和SWD仿真器调试,只能用st-link调试
(3)GPIO_Remap_SWJ_NoJTRST
PB4变为普通IO口,JTAG和SWD可以正常进行仿真器调试,但JTAG没有复位