金牌会员
 
- 积分
- 1332
- 金钱
- 1332
- 注册时间
- 2021-1-2
- 在线时间
- 121 小时
|
本帖最后由 tongzhihong 于 2021-1-26 12:18 编辑
1、我接触stm32f1起步是买的《stm32自学笔记》第二版+配套的电子园的开发板,它就是使用的硬件I2C,加上过去搞51单片机,用的是软件模拟I2C,所以个人趋向使用硬件I2C,认为有硬件接口,比软件模拟省事。但stm32f1的固件库,I2C部分过于逻辑化,简单说就是不好理解,初接触感到复杂,而I2C又是应答机制,稍一出错,就崩溃了。而固件库I2C部分的注释又不细,造成网上绝大部分人都说:stm32f1的硬件I2C有问题。
2、我能在电子园的开发板(《stm32自学笔记》)使用硬件I2C,后又在刘洋的“大黄蜂stm32开发板”上使用硬件I2C,其实质是一样的。2020年又在买的战舰V3开发板上使用硬件I2C。当然都是对24Cxx系列芯片使用。
3、2020年7、8月份,战舰V3开发板的触摸屏实验,用到了I2C,它是用的软件模拟I2C,我就把软件模拟I2C部分,自己改成了硬件I2C(其实战舰V3前面的24Cxx,I2C实验也是软件模拟I2C,我自己使用时,把它改成的硬件I2C)。
4、在战舰V3上、触摸屏实验中,把用到的I2C部分,从软件模拟I2C,改为硬件I2C,我开始认为效果一样;但一上电运行,程序死掉了。用JLink一调试,程序是死在硬件I2C。
5、使用的硬件I2C,在战舰V3上前面单独针对24Cxx的实验是通过了的,我开始想是不是TFTLCD的接口与硬件I2C有冲突,但又一想,软件模拟I2C 和 硬件I2C,用的接口引脚完全一样,不应该是这个问题。
6、我就在阿里旺旺上,向正点原子的老师请教,回答是,正点原子使用的是软件模拟I2C。我就把上面的情况简要重复了一遍,特别说,在战舰V3上单独的I2C实验,硬件I2C能通过,在触摸屏实验中,硬件I2C通不过,问一下原因。可惜那位老师可能太忙,对此类问题没兴趣,他叫我百度,或到正点原子的论坛发帖。
7、我对照战舰V3原理图、程序,反复搞了一天,TFTLCD的硬件接口,与I2C硬件接口,没有关系,程序也没有关系。就是触摸屏初始化开始时,从24Cxx读一个数据,判别是否校准,没校准就把校准的数据存在24Cxx,并做个标记。按理:触摸屏实验中,既然硬件、软件都没有干涉,单独的I2C实验,硬件I2C又能通过,那么,触摸屏实验中,硬件I2C就应该能通过。 但是,目前通不过,问题在哪里?
8、第二天,本着中国足球,越败越战的精神,又开始查找问题所在。由于 TFTLCD 显示部分是使用的 stm32f1 的"FSMC" 硬件接口,就查看 "FSMC" 硬件接口 与 I2C硬件接口,是否冲突。
结果发现:I2C1_SDA : PB7, FSMC_NADV : PB7; 明显冲突;
需要说明的是,虽然 TFTLCD 显示部分 使用的 stm32f1 的"FSMC" 硬件接口,没用到这个管脚,FSMC_NADV : PB7; 但这个管脚是 stm32f1 的"FSMC" 硬件接口的一部分,开启stm32f1 的"FSMC" 时,FSMC_NADV : PB7 是处于FSMC复用模式。
9、针对这个问题 ---- I2C1_SDA : PB7, FSMC_NADV : PB7; 复用模式冲突了,我是这样在触摸屏实验中处理的:
当要使用硬件I2C1时,先关闭FSMC的时钟,这样硬件I2C1就能正常使用了. 硬件I2C1使用完后,再把FSMC的时钟开启就行了。(没关闭I2C1时钟,是因为 TFTLCD 显示部分,并未用到 FSMC_NADV : PB7;我想,关闭I2C1时钟当然更好。)
10、经2020年下半年数月实际验证,这样处理,在战舰V3上、触摸屏实验中,就可以正常使用硬件I2C1了。
|
|