RSL10的pack为应用程序提供了两种方式来实现printf调试,一种是通过串口,一种是通过SEGGER RTT。本以为这会很便利,结果却是很尴尬,两种方式体验下来都不太顺利。
关于两种方式怎么切换,RSL10 GETTING STARTED GUIDE.PDF里介绍的和现在这个版本的pack有点出入,这个版本的直接更改printf.h里的宏定义即可
以最基础的blink工程测试,首先说一下UART方式,修改宏定义如下
#define OUTPUT_UART 1
#ifndef OUTPUT_INTERFACE
#define OUTPUT_INTERFACE OUTPUT_UART
#endif
然后就可以实现打印输出了
但是很快发现这个方式有个bug,不能全速运行,一但全速运行,就会一直运行在int UART_printf(const int narg, const char *sFormat, ...)函数
/* Check until the DMA is not busy */
while (tx_busy == 1)
{
Sys_Watchdog_Refresh();
}
虽然程序没死,但是已经跳不出这个死循环了。
第二种方式,SEGGER RTT,先修改宏定义
#define OUTPUT_RTT 1
#ifndef OUTPUT_INTERFACE
#define OUTPUT_INTERFACE OUTPUT_RTT
#endif
打印功能也是正常实现
这次全速运行没问题,但是,不能暂停了!!!一暂停就是下面这个结果
本帖最后由 数码小叶 于 2021-4-22 14:29 编辑
#define BUTTON_DIO 7
好像全速运行UART有连续
LED OFF
LED ON
LED OFF
LED ON
LED OFF
LED ON
LED OFF
LED ON
LED OFF
LED ON
LED OFF
LED ON
LED OFF...................
引用: 蓝雨夜 发表于 2021-4-22 16:26 我知道原因了! blink项目里使用了按钮 该按钮是DIO5 可UART打印使用DIO4和DIO5
感谢,感谢,解决了我一个大困惑,真的是因为这个原因造成的。为啥把按键设计到串口管脚
引用: 蓝雨夜 发表于 2021-4-22 16:08 KEIL的这几个文件是只读 你在KEIL编译器里C宏定义呢?
用的自带的那个软件ON_Semiconductor_IDE,没用KEIL
引用: 数码小叶 发表于 2021-4-22 16:42 用的自带的那个软件ON_Semiconductor_IDE,没用KEIL
那个IDE也不错
引用: 蓝雨夜 发表于 2021-4-22 16:41 RSL10管脚很紧张啊! 呵呵
感觉在哪加个延时应该可以解决这个复用造成的bug,因为单步是OK的,晚上再试试
引用: freebsder 发表于 2021-4-22 17:15 RTT很方便,我现在基本能上RTT就不上调试串口了。
RTT确实比串口花样多,应该是ON_Semiconductor_IDE,这个IDE不太友好
引用: dql2016 发表于 2021-4-22 21:22 RTT对硬件管脚需求是啥?貌似像stm32有个swo
JLINK这个工具太强大了,涵盖的芯片太广,自然包含了stm32
引用: 数码小叶 发表于 2021-4-22 22:06 JLINK这个工具太强大了,涵盖的芯片太广,自然包含了stm32
我是问RTT需要哪几个管脚,我记得Stm32的swo可以输出调试信息
引用: dql2016 发表于 2021-4-23 11:33 我是问RTT需要哪几个管脚,我记得Stm32的swo可以输出调试信息
标准的JTAG或者SWD接口就行啊,RTT方式的话一般简化都是SWD,针对STM32就是VCC,SWDIO,SWCLK,GND。ITM方式的话需要加一个你说的swo