(更多讨论移步:https://www.stmcu.org.cn/module/forum/thread-609249-1-1.html)printf其实是什么所谓的“IO重定向”,早年间的MCU能力太弱,但串口功能总还是有的。但,现在都什么年代了,你找个带物理串口的电脑都很难了。 9 h& @' S; L2 W s$ x) c8 sARM、STM32费了多大的劲把其它高性能IO功能,比如I2C、usb等加进来了,一些人反而不用,转而回头还去搞串口,发现电脑串口没了怎么办?!于是第三方板子还搞上USB转串口这种“无聊”的所谓的“高大上”的附加模块,再配上PC端的一个串口调试助手和示例程序以此彰显板子的能力,这显然是在传播自己的无知,这和那些仍然在使用模拟I2C的人如出一辙(I2C本来是一个现代的、高可用性的IO,51无法支持硬件I2C才出现的模拟,模拟天生不稳定,但“老人”都说模拟好,其实好吗)! 8 y U( x' D0 h6 P. A1 z1 H我非常赞同使用ST原厂的软硬件,不但能复用各种软件,而且还能学到代码良好的工程性带来的项目整体稳定和可扩展性的提升。7 G& f1 c0 m, U( Q! F2 M$ r
楼主此文就是对那些顽固不化的人的一顿打脸! : R; u9 M9 ~7 p) ?* X : w! Z/ D4 N. W: t0 K3 T3 Q$ v ; y8 Q0 v& R% d Y5 U
' ~, V5 M! l+ s1 Q# x% n$ A) n
串口输出调试信息可以帮助开发者快速定位错误,难道你写了一个几千行的软件,有复杂的处理逻辑的程序,你每次都用F5去调试每一行??? ; b1 q+ c4 A9 P! l* D o- u a" Z+ s' g' DI2C、USB难道比UART先进多少吗?都只不过是一种通讯接口而已,尤其是USB通讯口除了大数据量通讯之外没什麽用途,开发时还需要复杂的接口库,占用大量空间,二实际MCU的使用中又有几个需要大数据高速通讯呢???, g! P( p: h( K @3 |! m
9 ^$ [8 O; V" o7 `" E$ h现在开发Contex-M的人使用模拟I2C的恐怕只有在ST的芯片上有,原因是ST提供的I2C接口不稳定或错误(去看ST的勘误表),没法办才用的,你听说过有人使用LPC、MK、AT系列的Contex-M MCU的人有使用模拟I2C的吗???人们说模拟的I2C好的原因是ST的基本没法用。 ) ^) L3 b- B, u1 A & {, `8 R# [- ]9 n# P+ M当然了,ST也在不断改进自己的I2C接口,只要看过ST提供的《勘误表》就会知道的,现在ST推出的最新版本的MCU的I2C可能没问题了(最新版本的我还没用过,不知道情况到底是什麽样子),但是老板的I2C确实存在问题(只要看过勘误表就会知道)。 $ w+ C$ j# E, h7 z9 C- n; }% O4 ^" d y% ~- F
你说微库不好,你可以拿出一个自己的性能优越的库来让大家使用吗???!!! % u# \! @0 @3 q . U. ?* y, ~3 e还等什么板子呀???50块钱可以做10块PCB,什么宝上可以买到芯片,自己焊板子很快就能做出板子来,做一块板子的成本也就几十块钱,做出来就可以调试了,为何非要等别人送的板子呢?就算是学生也不差这点钱吧???!!!
ARM、STM32费了多大的劲把其它高性能IO功能,比如I2C、usb等加进来了,一些人反而不用,转而回头还去搞串口,发现电脑串口没了怎么办?!于是第三方板子还搞上USB转串口这种“无聊”的所谓的“高大上”的附加模块,再配上PC端的一个串口调试助手和示例程序以此彰显板子的能力,这显然是在传播自己的无知,这和那些仍然在使用模拟I2C的人如出一辙(I2C本来是一个现代的、高可用性的IO,51无法支持硬件I2C才出现的模拟,模拟天生不稳定,但“老人”都说模拟好,其实好吗)!
我非常赞同使用ST原厂的软硬件,不但能复用各种软件,而且还能学到代码良好的工程性带来的项目整体稳定和可扩展性的提升。7 G& f1 c0 m, U( Q! F2 M$ r
楼主此文就是对那些顽固不化的人的一顿打脸!
9 p( e# O0 p6 h6 F
$ F2 f4 B1 p& L9 y# Y
printf不是调试,它只是你程序中输出“日志”的方式而已。一旦遇到真bug,哪还有输出“日志”的机会呢!
真正的调试是F5!是单步!是看内存!是看变量的值!7 ?: P; V+ [3 I4 ^0 Q( A+ x
而,printf一个都达不到!! [7 n& m8 ]& H% L& \
我会写一些关于真调试的测试文章的(看F769的申请是否通过吧
哎!我也是从新人一步步走过来的,第一次接触STM32是野火的教程,后来爱上了正点原子。。。
这么方便的神器为什么要排斥它呢?它只是工具,人 才是 主体。单片机也是工具。。。
嗯,受教了!很期待大神的文章。+ m6 T9 n/ j4 g: M
实际项目中,用 printf 打印程序运行信息还是很方便的,不需用复杂的上位机,只需要串口调试助手。& W4 t9 q' n+ n, a
另外,正点原子的重定向 可以 不用 微库
楼主啊,我之前也用STM32CUBEMX调通了硬件IIC,但是我有时候还是会通信卡死,楼主有遇到吗
串口输出调试信息可以帮助开发者快速定位错误,难道你写了一个几千行的软件,有复杂的处理逻辑的程序,你每次都用F5去调试每一行???
I2C、USB难道比UART先进多少吗?都只不过是一种通讯接口而已,尤其是USB通讯口除了大数据量通讯之外没什麽用途,开发时还需要复杂的接口库,占用大量空间,二实际MCU的使用中又有几个需要大数据高速通讯呢???, g! P( p: h( K @3 |! m
现在开发Contex-M的人使用模拟I2C的恐怕只有在ST的芯片上有,原因是ST提供的I2C接口不稳定或错误(去看ST的勘误表),没法办才用的,你听说过有人使用LPC、MK、AT系列的Contex-M MCU的人有使用模拟I2C的吗???人们说模拟的I2C好的原因是ST的基本没法用。
当然了,ST也在不断改进自己的I2C接口,只要看过ST提供的《勘误表》就会知道的,现在ST推出的最新版本的MCU的I2C可能没问题了(最新版本的我还没用过,不知道情况到底是什麽样子),但是老板的I2C确实存在问题(只要看过勘误表就会知道)。
9 C- n; }% O4 ^" d y% ~- F
你说微库不好,你可以拿出一个自己的性能优越的库来让大家使用吗???!!!
还等什么板子呀???50块钱可以做10块PCB,什么宝上可以买到芯片,自己焊板子很快就能做出板子来,做一块板子的成本也就几十块钱,做出来就可以调试了,为何非要等别人送的板子呢?就算是学生也不差这点钱吧???!!!
最好仔细看一下《勘误表》
感觉串口打印还是很有必要的。很多时候,由外部触发的事件,需要查看一系列的变化,靠F5调试,很难达到效果吧?当然,不是说仿真调试用处不大,两者都需要。个人愚见。
没遇到过,我只是跑跑例程,实际项目没用过。。。如果解决不了,你还是用IO模拟吧。。。