STM32单片机选型原因,自己编写的IIC

来源:互联网 发布:c语言数组占几个字节 编辑:程序博客网 时间:2024/06/06 16:50

STM32这款单片机最近几年特别的火,性价比高嘛,大家都信任它。

以前也学习过STM32不过只是很浅显的学习了下大概,公司以前老是有AVR的单片机速度太慢了;所以我建议选择了这款芯片,其实也就是选型时的一些考虑,具体如下:

1)、性能没得说;72M频率,价位才20左右,划算。公司产品量大,所以成本比较严。

2)、扩展性比较强,STM32的几个系类,可以说几乎都是pin-to-pin 的,程序量小的话,就可以换个小容量的;大的话就换个大容量的

3)、比较容易更换程序;我们这个项目中用的是STM32F103RB,STM32F103RC;程序几乎都没怎么动,就可以来回的移植了。

4)、资源支持多,还有库;搞程序的有个好的支持太好了;不会的直接网上一搜,甚至源代码都可以找到,哎,诱惑太大;有时觉得比我写的好直接用了。

5)、其次的就是开发工具了;第一次接触单片机的软件就是keil;以后又用AVR的使用ICC,430的时候IAR,飞思卡尔的时候用codewarrior;学习2440的时候其实还是ADS(其实还是codewarrior),换来换去还是觉得keil是我感觉最舒服的工具;工程管理,分散加载,调试等等,实在没得说。


上面说了,这次选择STM32的原因,但是还是有让人不爽的地方,这个地方叫做IIC模块;因为做音视频的,所以基础的最多的模块估计就是IIC了;什么音频,视频控制,采集,格式转化啥的都是IIC控制接口;哎;当时网上说STM32的IIC不好使;当时还不在意,直到自己用的时候,才发现是“不听老人吃亏在眼前”啊!下面说下我当时碰到的问题,具体如下,不知道大家以前碰到过没有:

STM32的IIC模块是他们自己搞的,所以和我当时用其他单片机很不一样,用着不爽,具体不爽如下:

1)、每次发送命令后不是像其他一样收到ACK就ok啦,而是每步检测的东西都不一样;岂止一个不爽了得,刚开始特不习惯

2)、据传言说STM32的发送完数据后检测到ACK的时钟特别短,不知道是不是真的;这个就造成有写芯片不能完成应答,所以造成死锁;这时还要解锁,麻烦不说,还造成不稳定,我就碰到了这个问题,所以才把网上传言写下来了;我是解释不了自己碰到的问题才写的,具体是这样的,我在操作24LC32的时候,看资料说3.3V可以按照100k读写的,但是我在写的时候,写一个字节后,接着写下一个的时候造成IIC死锁(SDA一直为低),排查了很多原因,最后只能是怀疑,在写的时候EEPROM的时间应答比较长,STM32没有收到,所以死锁;只能这样先解释下了,如果有机会碰到FAE可以给他们讨论下这个问题。

3)、不稳定是我们做项目无法接受的,所以只能忍痛割爱,把STM32的这个功能给无情舍弃了


上面说STM32的选型原因和它的BUG,接下来该来实际的了,来解决这个问题,IIC的大家都熟悉的,这点就不一一说;主要说写STM32的相关的,和IIC的一些细节。

首先说一下:

1)、IIC总线的CLK线为低时,SDA的变化时无效的,既不是开始信号也不是ACK,更不如STOP信号,数据变化也是无效的(就是允许的)。

2)、IIC总线为CLK为高的时候,SDA的变化就会产生START,STOP。

3)、如果在死锁(SDA一直为低)时,需要发送九个CLK时钟进行解锁操作;避免总线一直被占用。

4)、接受ACK时需要发送第九个时钟,并且做一下超时退出机制;不然从设备故障,或者没有焊接时造成程序崩溃


上面写了一些自己总结的IIC操作时的注意事项,有点晚了,明天再写C语言的具体实现



1 0