接着上3篇评测报告:
(1)https://bbs.eeworld.com.cn/thread-1214040-1-1.html
(2)https://bbs.eeworld.com.cn/thread-1214570-1-1.html
(3)https://bbs.eeworld.com.cn/thread-1215784-1-1.html
原来一直在MDK环境下使用printf很方便,网上的参考资料也很多。这次拿到AT32WB415评估板后,使用官方AT32 IDE进行开发,刚开始天真的以为也跟MDK一样,可以直接使用,在main中添加如下代码:
,编译一次通过,
,然后把迫不及待把*.hex文件下载到评估板上,打开串口调试工具,发现并没有打出printf的“Hello”信息。这才恍然大悟,AT32 IDE下使用printf也不简单。
溯源发现程序中使用的printf
的stdio.h文件位于
,而MDK环境中stdio.h文件位于
,MDK可以正常使用printf,突发奇想,直接把MDK中调用的stdio.h文件,覆盖AT32 IDE环境下调用的stdio.h文件。结果发现还是不行。
于是开始百度并发帖求助,找了2天也没有找到合适的解决方法,于是就开始了自己的摸索过程。
查了很多资料,都说需要printf重定向。研究源码发现,在
文件中实现了将C库中的printf函数retargets到USART上,如图40所示。
图40 at32wb415_board.c源码
但是通过验证,这段代码没有执行。
然后,开始考虑将以前兆易(GD)环境下使用的
拷过来使用,
,并根据AT32 IDE新建工程时生成的宏定义参数进行修改,例如:USART_TDBE_FLAG
。这些USART FLAG宏定义在USART头文件中
,如图41所示。
图41 USART头文件中FLAG宏定义
USART_TDBE_FLAG:USART发送数据Buffer空标志。
最后,可以在main.c文件中添加
,实现对串口收发数据应如何缓冲的设置,如果不设置则采用默认情况(测试了一下默认情况肯定不是_IOFBF全缓冲模式)。
关于setvbuf函数的详细介绍请参阅参考资料[4] C库函数-setvbuf。