你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32 的 硬件IIC 很好用  

[复制链接]
cuyebiren 发布时间:2016-11-21 13:46
STM32f103 的硬件IIC I2C 调试心得
5 v: J- l, }. F, m/ @
: R$ ^9 C; V4 z* Q& Z* h硬件IIC调试通过(实现24c02存储器读写操作)
) f$ _) t$ C9 s9 q' [
# }* b6 R4 c8 e. F6 l! e( x' M4 g/ l" {! G
都说STM32的IIC有BUG,不好用,都用IO模拟,但我想说 STM32 的 硬件IIC 很好用!
7 |: l5 \5 }" U用IO模拟的话,Keil 的优化等级要设为 Level 0,这样的话代码量势必要变大,而且也不能用中断、DMA 等方式,操作方式单一。6 z! f9 k$ u, W" a% o
在此,本人基于 STM32CubeMx 生成初始化代码工程,参考 ST 官方列程 和 正点原子的列程 ,以及 AT24C02 的 Datasheet ,编写本 IIC_AT24CXX 列程。  E$ d9 d* x1 Y- N) H. O# m  U: ~
首先,说一下,HAL库的外设驱动是比较完整和封装比较彻底的,使用它,我们不用再写一些如IIC读写过程等过程操作函数,直接调用HAL库函数即可。& H, D- g$ C  N0 ]# ?
下面,开始介绍 用 IIC 读写 AT24C02 的教程。& P9 {$ T4 H: ^( d3 i6 }* b# [# M
一、CubeMx 工程配置。
# W/ }1 @6 C  \/ m& X* | 1.png $ T* [- i. K5 F  s
9 a' X% S, z8 h1 o+ ?: ]/ u
2.png
6 \1 r& B8 E+ `9 _) E: U% _
+ J7 G+ g) T9 t4 L2 T( u( h6 ~ 3.jpg ; F5 `4 R# t  r$ e/ }1 X

2 S( I5 {( _) G) G3 r) r' B7 b$ ?- \ 4.jpg + H6 M% l# g/ H" A& Z. d- P
0 p" G" I8 i; M

评分

参与人数 1 ST金币 +10 收起 理由
zero99 + 10

查看全部评分

2 收藏 23 评论117 发布时间:2016-11-21 13:46

举报

117个回答
Inc_brza 回答时间:2016-11-22 11:46:13
moyanming2013 发表于 2016-11-21 16:39
3 B( Q# V$ p/ q+ D  `) y5 K% a) V: wprintf其实是什么所谓的“IO重定向”,早年间的MCU能力太弱,但串口功能总还是有的。但,现在都什么年代 ...
2 _7 ]6 S* P8 t- z* ~1 I
不同意!
6 Z- g9 a% q8 g4 G- x2 w& v' l模拟IIC比硬件IIC具有更方便的跨平台移植性!不是说硬件IIC不好,之所以不用,是因为IIC是飞利浦的专利!ST为了规避专利而把它设计得难用!FAQ里面都有IIC的相关说明!
; _: ]6 g5 k* @1 t第二,iic和usb都是短距离通信设备协议,而串口协议至今仍然是工业的常用协议之一!至少在硬件上,你的usb和iic都没办法进行长距离传输!( x2 Q% Q3 g: K; p7 J6 u
第三,usb转串口并不是无聊的所谓高大上的附加模块,因为电脑的设计,usb的通用以及usb本身的特点,pnp的强大优点所以把通信时间没太高要求的串口并上而使之成为usb的一个设备而增加简便性,另外在工业上,物理串口仍然是必须的!2 `# O$ M1 a# m0 g1 C" c/ a+ [  s$ y

+ S; w. l4 \' i9 E7 s/ }- b+ n你写的根本不安实际分析!所以你压根就没有对那些顽固不化的人的一顿大脸,反而彰显出你的无知!: P! B. N1 p& E# d
如果有得罪,还请见谅,技术讨论!

点评

IIC是80年代的产物, 不知道哪来专利可以为时40年之久, 呵呵  发表于 2021-1-30 17:39
moyanming2013 回答时间:2016-11-21 16:39:57
本帖最后由 moyanming2013 于 2016-11-22 17:02 编辑
" Z) _- y1 t9 ^+ a( y4 Q, {6 `
cuyebiren 发表于 2016-11-21 14:06
) h( t3 \" ]/ U! }2 C6 F哦,但 printf 是调试神器啊、、、
更多讨论移步:https://www.stmcu.org.cn/module/forum/thread-609249-1-1.html)printf其实是什么所谓的“IO重定向”,早年间的MCU能力太弱,但串口功能总还是有的。但,现在都什么年代了,你找个带物理串口的电脑都很难了。& _8 y/ G6 \' J
ARM、STM32费了多大的劲把其它高性能IO功能,比如I2C、usb等加进来了,一些人反而不用,转而回头还去搞串口,发现电脑串口没了怎么办?!于是第三方板子还搞上USB转串口这种“无聊”的所谓的“高大上”的附加模块,再配上PC端的一个串口调试助手和示例程序以此彰显板子的能力,这显然是在传播自己的无知,这和那些仍然在使用模拟I2C的人如出一辙(I2C本来是一个现代的、高可用性的IO,51无法支持硬件I2C才出现的模拟,模拟天生不稳定,但“老人”都说模拟好,其实好吗)!; U+ {7 n; a/ n+ [# E* @4 x
我非常赞同使用ST原厂的软硬件,不但能复用各种软件,而且还能学到代码良好的工程性带来的项目整体稳定和可扩展性的提升。  P; z4 E- D% W2 r) |- \
楼主此文就是对那些顽固不化的人的一顿打脸!- n  [& K$ r/ x6 S& r6 V1 B

& z  _" i% b3 M6 E* G; q3 T5 G3 D. d
0 D$ z2 }# ?0 _# X+ q! `
moyanming2013 回答时间:2016-11-21 16:49:17
本帖最后由 moyanming2013 于 2016-11-22 17:03 编辑
$ f- ~& M: ?* V& ~* A: c
cuyebiren 发表于 2016-11-21 14:06
5 W; m, G4 X6 d哦,但 printf 是调试神器啊、、、
更多讨论移步:https://www.stmcu.org.cn/module/forum/thread-609249-1-1.html)! m! R+ v2 h6 n0 c* N  Z
0 m+ p) s8 A& |! Y3 {6 B
/ P* I+ M. p; b+ W% _9 }' H
/ s! Z$ S7 r7 s% V2 m6 T/ l) Z5 N" C% w9 {
2 t9 X) K! b9 L; I
printf不是调试,它只是你程序中输出“日志”的方式而已。一旦遇到真bug,哪还有输出“日志”的机会呢!
9 @. v6 y8 {3 L* d+ L/ d* g1 T6 g真正的调试是F5!是单步!是看内存!是看变量的值!# r# n3 o$ C( O$ ?9 u. R2 ~
而,printf一个都达不到!5 V1 b4 f: A5 B' F( R" V
我会写一些关于真调试的测试文章的(看F769的申请是否通过吧)。
cuyebiren 回答时间:2016-11-21 14:40:46
奉上汇总文件和工程。6 {; F5 M/ c3 y* m( V/ I8 u/ V

STM32的硬件IIC很好用.rar

下载

2.31 MB, 下载次数: 2753

IIC_AT24C02工程.rar

下载

5.17 MB, 下载次数: 3973

cuyebiren 回答时间:2016-11-22 17:33:06
五哥1 发表于 2016-11-22 17:074 v+ x$ f9 j6 ]7 F' S: C
这个确实很简单就配置好了,前提是必须很熟练的知道怎样配置,包括硬件的连接。 ...
% a0 [# G; `. h; G
具体配置过程可参考:(神器)STM32CubeMx使用详解
: N# k0 m- q$ }9 O' }9 i+ Phttps://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=608654&fromuid=31357608 l  I# E5 x: T2 [
(出处: 意法半导体STM32/STM8技术社区)0 X8 o& t4 t8 j1 _
硬件连接:: A7 r8 ^8 y0 S# _* o* Q( q
2.jpg
截图未命名.jpg
中山无雪 回答时间:2016-11-21 21:59:05
moyanming2013 发表于 2016-11-21 16:39  I. U8 x0 B. D
printf其实是什么所谓的“IO重定向”,早年间的MCU能力太弱,但串口功能总还是有的。但,现在都什么年代 ...

; v1 u' N6 B$ V# h" W串口输出调试信息可以帮助开发者快速定位错误,难道你写了一个几千行的软件,有复杂的处理逻辑的程序,你每次都用F5去调试每一行???6 W" A+ K: v3 h  z; i1 [3 ?* X- j
% Y' B7 ^6 x5 |5 _, d' F, m7 o
I2C、USB难道比UART先进多少吗?都只不过是一种通讯接口而已,尤其是USB通讯口除了大数据量通讯之外没什麽用途,开发时还需要复杂的接口库,占用大量空间,二实际MCU的使用中又有几个需要大数据高速通讯呢???9 O; r% k; m+ x6 r. e# b' u9 o! t
5 {( F/ z( [/ k( \" V6 M
现在开发Contex-M的人使用模拟I2C的恐怕只有在ST的芯片上有,原因是ST提供的I2C接口不稳定或错误(去看ST的勘误表),没法办才用的,你听说过有人使用LPC、MK、AT系列的Contex-M MCU的人有使用模拟I2C的吗???人们说模拟的I2C好的原因是ST的基本没法用。
! ?0 o$ J" |# \* \/ G
' i" h2 S& ?, R) D4 Z当然了,ST也在不断改进自己的I2C接口,只要看过ST提供的《勘误表》就会知道的,现在ST推出的最新版本的MCU的I2C可能没问题了(最新版本的我还没用过,不知道情况到底是什麽样子),但是老板的I2C确实存在问题(只要看过勘误表就会知道)。
1 x1 X) c/ o0 T# V, L1 g$ j- }  |$ y+ h3 E7 z
你说微库不好,你可以拿出一个自己的性能优越的库来让大家使用吗???!!!) X, c( K4 C5 h) V# ^

  w, ~$ i. `, _* m5 \0 G还等什么板子呀???50块钱可以做10块PCB,什么宝上可以买到芯片,自己焊板子很快就能做出板子来,做一块板子的成本也就几十块钱,做出来就可以调试了,为何非要等别人送的板子呢?就算是学生也不差这点钱吧???!!!
cuyebiren 回答时间:2016-11-21 13:59:21
五、编写测试文件。! u, S2 ?8 i6 t2 b5 ^

" l/ v/ j4 l! n0 E% I$ `
19.jpg
20.jpg
cuyebiren 回答时间:2016-11-21 13:52:03
本帖最后由 cuyebiren 于 2016-11-21 13:53 编辑
7 `: b% \0 [/ U4 S. G0 i! ?
! I/ e2 j' a7 `CubeMx的详细配置过程请参考:(神器)STM32CubeMx使用详解* q$ I% ^' ^+ k* ?8 H* R7 [
https://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=608654&fromuid=3135760: R4 i' |' {. f' i; J  v( i
(出处: 意法半导体STM32/STM8技术社区). s* b5 i" ^, B9 p) u( v5 _6 ]
本人开发板的IIC引脚兼容正点原子的开发板。
6 T: r5 {0 k6 q/ L; ^0 [
: `* H" _7 T( G6 G3 y二、Cube生成的 Keil 工程的配置详解。
- C" _8 p8 N" S) b4 h1 K
# C8 |! `' w: `: U8 p$ u
, |+ p; ?4 t" ?; g( ]$ ?8 n
5.jpg
6.jpg
8.jpg
忘记一切Q 回答时间:2016-11-21 13:54:04
cuyebiren 回答时间:2016-11-21 13:54:54
三、添加文件。8 M. \; |8 S+ [, Q4 N( M# Q
7.jpg
9.jpg
cuyebiren 回答时间:2016-11-21 13:56:52
四、文件分析。
9 L( |* \+ E% U; L# [  \3 q! L
10.jpg
10_1.jpg
11.jpg
12.jpg
13.jpg
14.jpg
14_1.jpg
14_2.jpg
15.jpg
16.jpg
17.jpg
cuyebiren 回答时间:2016-11-21 14:00:59
六、测试。$ ]8 p. E/ J0 b) Y1 f3 H& }& c" P
21.jpg
moyanming2013 回答时间:2016-11-21 14:02:24
嗯,支持。
* z! X3 r5 F  Y) c不过microLib这种烂梗尽量少推
cuyebiren 回答时间:2016-11-21 14:04:25
cuyebiren 回答时间:2016-11-21 14:06:24
moyanming2013 发表于 2016-11-21 14:028 f1 ]) p' {. d+ d+ Q  w5 [5 }
嗯,支持。0 X" H  D  q" ]8 Z: M6 N
不过microLib这种烂梗尽量少推

1 }/ m& C7 Z6 g; Q$ {哦,但 printf 是调试神器啊、、、
cuyebiren 回答时间:2016-11-21 14:38:30
七、总结。
STM32的硬件IIC能够正确读写AT24C02,使用HAL库只需要两个API函数,而且我们也不用关心具体的实现过程,十分方便。
学习STM32的最好方法就是学习官方列程。
5 q0 V) W, s, v2 O1 D5 H# F8 h: s
294479435@qq.co 回答时间:2016-11-21 15:40:35
说的很详细,对新人帮助很大啊
zhoupxa 回答时间:2016-11-21 15:59:46
使用CubeMx这样的自动化工具让人担心以后的单片机开发分工会越来越细,单片机工程师的技能降低,职位含金量大减
anobodykey 回答时间:2016-11-21 16:17:32
感谢楼主分享

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版