STM32f103 的硬件IIC I2C 调试心得) W7 Z5 X: A5 e- {3 q . d" \" N# k, w. M( Z$ Y6 Y 硬件IIC调试通过(实现24c02存储器读写操作) - c# E% i" U0 O7 d) Y: S4 g6 |+ r 都说STM32的IIC有BUG,不好用,都用IO模拟,但我想说 STM32 的 硬件IIC 很好用!2 k4 `- U- R7 ?- ` 用IO模拟的话,Keil 的优化等级要设为 Level 0,这样的话代码量势必要变大,而且也不能用中断、DMA 等方式,操作方式单一。. ?6 c8 {/ u3 T) u0 r+ | 在此,本人基于 STM32CubeMx 生成初始化代码工程,参考 ST 官方列程 和 正点原子的列程 ,以及 AT24C02 的 Datasheet ,编写本 IIC_AT24CXX 列程。7 n) w( p* o- A! s. g 首先,说一下,HAL库的外设驱动是比较完整和封装比较彻底的,使用它,我们不用再写一些如IIC读写过程等过程操作函数,直接调用HAL库函数即可。 下面,开始介绍 用 IIC 读写 AT24C02 的教程。 一、CubeMx 工程配置。3 x# X/ V2 w f( J- P! I- S / n# N! D R) I3 t6 t# _5 ?. r" D * u+ x* G; X( H2 e" A: t |
不同意!. @" f3 M& J, A7 h$ e! Y
模拟IIC比硬件IIC具有更方便的跨平台移植性!不是说硬件IIC不好,之所以不用,是因为IIC是飞利浦的专利!ST为了规避专利而把它设计得难用!FAQ里面都有IIC的相关说明!/ j0 m/ A4 D7 O' C1 r- J6 u
第二,iic和usb都是短距离通信设备协议,而串口协议至今仍然是工业的常用协议之一!至少在硬件上,你的usb和iic都没办法进行长距离传输!. \( y/ s) u7 v
第三,usb转串口并不是无聊的所谓高大上的附加模块,因为电脑的设计,usb的通用以及usb本身的特点,pnp的强大优点所以把通信时间没太高要求的串口并上而使之成为usb的一个设备而增加简便性,另外在工业上,物理串口仍然是必须的!2 Z. \% l5 ? D" f. | k) b" S) r( x
你写的根本不安实际分析!所以你压根就没有对那些顽固不化的人的一顿大脸,反而彰显出你的无知!7 H9 P; ]- K, `- ]6 y6 c! Y l6 r
如果有得罪,还请见谅,技术讨论!
点评
ARM、STM32费了多大的劲把其它高性能IO功能,比如I2C、usb等加进来了,一些人反而不用,转而回头还去搞串口,发现电脑串口没了怎么办?!于是第三方板子还搞上USB转串口这种“无聊”的所谓的“高大上”的附加模块,再配上PC端的一个串口调试助手和示例程序以此彰显板子的能力,这显然是在传播自己的无知,这和那些仍然在使用模拟I2C的人如出一辙(I2C本来是一个现代的、高可用性的IO,51无法支持硬件I2C才出现的模拟,模拟天生不稳定,但“老人”都说模拟好,其实好吗)!+ }4 l; \% b( H
我非常赞同使用ST原厂的软硬件,不但能复用各种软件,而且还能学到代码良好的工程性带来的项目整体稳定和可扩展性的提升。
楼主此文就是对那些顽固不化的人的一顿打脸!7 ^; D0 y s I2 D$ z$ N
7 G0 T* w8 y( s4 ~. L+ N5 x
- S9 Y* Y' X% n" r8 l8 r
" V% ]! E& U$ w: w& J; ]: E8 B
printf不是调试,它只是你程序中输出“日志”的方式而已。一旦遇到真bug,哪还有输出“日志”的机会呢!, H" T0 Z: ]6 d5 @+ T
真正的调试是F5!是单步!是看内存!是看变量的值!9 [" b* t- w3 F0 J
而,printf一个都达不到!( l7 J/ `8 z+ J! p# N! y6 o
我会写一些关于真调试的测试文章的(看F769的申请是否通过吧)。
STM32ç硬件IICå¾å¥½ç¨.rar
2016-11-21 14:40 上传
点击文件名下载附件
2.31 MB, 下载次数: 2749
IIC_AT24C02å·¥ç¨.rar
2016-11-21 14:40 上传
点击文件名下载附件
5.17 MB, 下载次数: 3969
具体配置过程可参考:(神器)STM32CubeMx使用详解2 D' b2 p1 w. d* p# u1 d- k
https://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=608654&fromuid=3135760
(出处: 意法半导体STM32/STM8技术社区)3 h7 C' S1 M/ L% b0 X: E* I7 ^
硬件连接:
串口输出调试信息可以帮助开发者快速定位错误,难道你写了一个几千行的软件,有复杂的处理逻辑的程序,你每次都用F5去调试每一行???
" {0 @% N: \, N* n" W) _9 L
I2C、USB难道比UART先进多少吗?都只不过是一种通讯接口而已,尤其是USB通讯口除了大数据量通讯之外没什麽用途,开发时还需要复杂的接口库,占用大量空间,二实际MCU的使用中又有几个需要大数据高速通讯呢???
现在开发Contex-M的人使用模拟I2C的恐怕只有在ST的芯片上有,原因是ST提供的I2C接口不稳定或错误(去看ST的勘误表),没法办才用的,你听说过有人使用LPC、MK、AT系列的Contex-M MCU的人有使用模拟I2C的吗???人们说模拟的I2C好的原因是ST的基本没法用。
当然了,ST也在不断改进自己的I2C接口,只要看过ST提供的《勘误表》就会知道的,现在ST推出的最新版本的MCU的I2C可能没问题了(最新版本的我还没用过,不知道情况到底是什麽样子),但是老板的I2C确实存在问题(只要看过勘误表就会知道)。
/ F! I' W3 q# A6 t% Q V
你说微库不好,你可以拿出一个自己的性能优越的库来让大家使用吗???!!!* ^3 O* ~3 W+ r- A4 c
还等什么板子呀???50块钱可以做10块PCB,什么宝上可以买到芯片,自己焊板子很快就能做出板子来,做一块板子的成本也就几十块钱,做出来就可以调试了,为何非要等别人送的板子呢?就算是学生也不差这点钱吧???!!!
1 F. R% a9 T* }! Y' l$ e* r9 L
' g/ q, A' @( O7 C) S% [) [
CubeMx的详细配置过程请参考:(神器)STM32CubeMx使用详解: f- }; a- F/ l A( _
https://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=608654&fromuid=31357609 {8 \3 T2 A! \3 o& x& C9 i
(出处: 意法半导体STM32/STM8技术社区)- B+ B" _. i! u" q( u3 `; e' Q! H
本人开发板的IIC引脚兼容正点原子的开发板。. Y) R( w$ O+ B% J" q( o! H( {% i+ a
二、Cube生成的 Keil 工程的配置详解。1 B+ e. o0 i1 B1 k# w$ e8 ~3 R+ D& y
8 @" n* e7 B8 Z: @+ I" W
0 x& d. G: f$ [. A+ n
不过microLib这种烂梗尽量少推
哦,但 printf 是调试神器啊、、、