硬件IIC的重映射使用问题
沁恒的蓝牙系列芯片,有映射硬件模块去其他引脚的功能,可以配置各芯片的功能引脚重映射寄存器(R16_PIN_ALTERNATE),或者使用函数GPIOPinRemap函数进行配置。

比如说想要配置IIC重映射到PB20、21,可以调用如下代码↓
GPIOPinRemap(ENABLE, RB_PIN_UART2); //重映射串口2到PB22、23
GPIOB_SetBits(GPIO_Pin_23); //串口2GPIO初始化,TXD2_在配置推挽输出前先置位
GPIOB_ModeCfg(GPIO_Pin_22, GPIO_ModeIN_PU);
GPIOB_ModeCfg(GPIO_Pin_23, GPIO_ModeOut_PP_5mA);
UART2_DefInit(); //串口2初始化
以下是常用重映射的一些注意点。
①实际使用哪个引脚就初始化哪个引脚。重映射之后只初始化默认引脚,再从重映射引脚接杜邦线那就调不通。
②重映射过去,使用的引脚可能有原本有特殊功能,比如说串口2的默认引脚在PA6、7,将它重映射到PB22、23时,注意PB23多用作手动复位脚,需要在ISP工具中取消“使能RST作为手工复位输入引脚”的框选,否则串口2发送数据拉低电平,就会复位芯片。PB22作为下载配置脚可以不用改,因为它只在上电的时候会用作boot脚,进了程序之后就参考普通串口配置GPIO即可。

硬件IIC的重映射,如果使用与默认引脚PB12、13一样的代码,会出问题↓
测试现象:重映射过后,用杜邦线将PB12、13接GND,上电复位/软件后,会卡在busy判忙。如果给原先的PB12、13上电初始化加上内部上拉,不会有卡在判忙的情况,即使是运行中拉低PB12、13也不会有影响。
其实手册中有作说明↓

大概意思是说,复位后会立即进行默认引脚PB12、13上的busy检测,即使没有使能硬件IIC,也会进行检测。由于复位时PB12、13引脚的电平状态是不确定的,若判断为busy,会导致接下来的IIC读写卡在判忙。
解决方法有两个,一个是在I2C_Init()函数中增加软件复位相关代码来清busy标志。注意PB20、21要配置为上拉(GPIO_ModeIN_PU)。最新EVT中已经在I2C_Init()函数中增加了复位相关代码。代码如下↓
GPIOB_ModeCfg(GPIO_Pin_20 | GPIO_Pin_21, GPIO_ModeIN_PU); //配置重映射之后的引脚 对应使用软件复位的方式
GPIOPinRemap(ENABLE, RB_PIN_I2C); //重映射到PB20、21
I2C_Init(I2C_Mode_I2C, 400000, I2C_DutyCycle_16_9, I2C_Ack_Enable, I2C_AckAddr_7bit, HOST_NO_ADDR);

另一个是在重映射之后,用四行代码拉GPIO模拟一个停止标志,清除一下busy的硬件标志位(这里用I2C_GenerateSTOP(ENABLE)由硬件产生一个停止信号测试不通,模拟一个停止位能调通)。原引脚对于busy的影响只在重映射函数之前。注意PB20、21要配置为推挽(GPIO_ModeOut_PP_5mA)。代码如下↓
GPIOB_ModeCfg(GPIO_Pin_20 | GPIO_Pin_21,GPIO_ModeOut_PP_5mA); GPIOPinRemap(ENABLE,RB_PIN_I2C); //重映射PB20、21 GPIOB_SetBits(GPIO_Pin_21); //给予一个停止标志,清BUSY
GPIOB_ResetBits(GPIO_Pin_20);
DelayMs(10);
GPIOB_SetBits(GPIO_Pin_20); I2C_Init(I2C_Mode_I2C, 400000, I2C_DutyCycle_16_9, I2C_Ack_Enable, I2C_AckAddr_7bit, HOST_NO_ADDR);
硬件IIC的重映射使用问题的更多相关文章
- usart2 重映射
今天拾起闲置很久的灰机,测试发现nrf2401坏掉,重新淘宝.还发现机上搭载的usart1坏掉,换成usart2,发现端口被电机占用,重映射到PD5,PD6 关键是后面两句不要忘记了 RCC_APB1 ...
- ARM地址重映射机制
转:http://blog.csdn.net/yuanzhangmei1/article/details/8395028 ARM体系结构中,系统上电或复位后,处理器将从地址0x0处取第一条指令,因此, ...
- STM32 部分重映射和完全重映射(查看数据手册)
数据手册如何查找对应的映射: 打开官网直接搜索STM32F可以看到数据手册,里面有关于重映射的表格,输入第6页的页码,点击9.3中的9.3x可打开对应的链接. 举例说明: STM32中拥有重映射功能 ...
- STM32重映射(PinRemap)的使用,注意!
STM32重映射,内容和细节稍后补充,这里只说几个注意点,花了我一晚上的时间调试终于找到问题所在了... 芯片: STM32f107vct6 晶振: 25M 通过分频器与锁相环,使系统时钟为72M 背 ...
- STM32F0系列MCU中断向量表的重映射
最近使用了一款Cortex-M0内核的芯片STM32F030CC,发现它中断向量表的重映射方法与STM32F10x系列的有所区别,在这里记录与分享一下. 由于需要通过IAP进行固件升级,所以芯片的FL ...
- STM32管教复用与重映射关系
摘自:http://blog.csdn.net/lincheng15/article/details/51789093 概括一下:复用就是一个引脚有几个功能,1.做普通IO输入输出 2.其他外设的输入 ...
- STM32 UART 重映射
在进行原理图设计的时候发现管脚的分配之间有冲突,需要对管脚进行重映射,在手册中了解到STM32 上有很多I/O口,也有很多的内置外设像:I2C,ADC,ISP,USART等 ,为了节省引出管脚,这些内 ...
- STM32 TIM重映射
复用功能 没有重映射 部分重映射 完全重映射 TIM3_CH1 PA6 PB4 PC6 CH2 PA7 PB5 PC7 CH3 PB0 PB0 PC8 CH4 PB1 PB1 PC9 /**重映射 t ...
- STM32硬件IIC操作
Stm32具有IIC接口,接口有以下主要特性 多主机功能:该模块既可做主设备也可做从设备 主设备功能 C地址检测 位/10位地址和广播呼叫 支持不同的通讯速度 状态标志: 发送器/接收器模式标志 字节 ...
- OpenCV探索之路(八):重映射与仿射变换
重映射 重映射就是把一幅图像中某个位置的像素放置到另一个图片中指定位置的过程. 用一个数学公式来表示就是: 其中的 f 就是映射方式,也就说,像素点在另一个图像中的位置是由 f 来计算的. 在Open ...
随机推荐
- Java反射获取方法参数名 IDEA配置 Maven
默认情况下无法获得具体的参数名,只能得到arg0, arg1等. 进行如下配置即可通过反射获得具体的参数名. -parameters 如果是Maven项目,还需要在pom.xml文件中增加如下配置 & ...
- _Bool類型
_Bool類型:布爾變量,其值只有1(真)和0(假).是C語言中的變量名,C語言中所有的非0數字都被視爲真. 給布爾變量取一個能表示真或假值的變量名是一種常見的做法. 1 /*boolean.c--使 ...
- Docker 基础 - 3
Web 服务器与应用 Nginx 我的Nginx Docker镜像 ## 设置继承自己创建的 sshd 镜像 FROM caseycui/ubuntu-sshd ## 维护者 LABEL mainta ...
- vue 中引入iframe,动态设置其src,遇到的一些小问题总结
1.重置其样式,去掉外框以及滚动条等 <iframe id="myIframe" ref="iframe_a" :src="mySrc" ...
- 编程思想转换-Lambda表达式
编程思想转换 做什么,而不是怎么做 我们真的希望创建一个匿名内部类对象吗?不.我们只是为了做这件事情而不得不创建一个对象.我们真正希望做的事情是︰将run方法体内的代码传递给 Thread类知晓. 传 ...
- vue3 ts遇到的问题
main.ts中的 createApp(App),只作用于一个,如果,有两个,则并不是一个对象,另一个会不生效
- 搭建Git服务器教程(整理自腾讯云开发者实验室)
搭建Git服务器教程(整理自腾讯云开发者实验室) 下载安装 Git Git 是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. 此实验以 CentOS 7.2 x64 的系统 ...
- Cesium JulianDate(十八)
代表天文朱利安日期,它是自4712年1月1日(公元前4713年)正午以来的天数.为了提高精度,该类存储的日期部分和秒数部分是分开的.并且为了算术安全和表示闰秒,该日期始终存储在国际原子时间标准中 (T ...
- Mac 创建Python3虚拟环境
Mac 创建Python3虚拟环境 1.安装virtualenv pip3 install virtualenv 安装virtualenvwrapper pip3 install virtualenv ...
- IDEA插件Apifox,一键自动生成接口文档!
有关Apifox软件之前写过一篇文章: 接口测试神器Apifox,亲测好用! 如何一键自动生成数据库文档之前也写过一篇文章: 数据库界的Swagger:一键生成数据库文档! 一.Apifox插件的优势 ...