n32G45x上面使用软件包SEGGER_RTT SEGGER_RTT这个软件包可以替代串口进行输出,特别是在引脚有限的单片机上,是一个不错的选择。本人自己画的板子,当时由于没有考虑清楚,并没有引出调试的串口,这下麻烦了,在调试前期间,使用原本用来搞RS485 modbus的串口先用来调试,麻烦! SEGGER_RTT但是在使用中还是出现一点问题,这里就先记录一下。
一、上位机准备工作
使用的上位机软件就是这个了,Jlink RTT viewer.
在使用之前,先要对jlink的安装目录进行操作,如果有参加过比赛的小伙伴,肯是搞过了的。
1、将Nationstech的下载算法,解压复制Device的目录下,不然都不认识的你片子。
2、修改Jlnk目录下的JLinkDevices.xml,添加Nationstech器件型号,加到尾巴就可以了。这个文件已加过了。
3、解压复制文件到jlnk目录,用来清除加密的,还没有用到过。
4、打开RTT Viewer,如果最下面没有auto,那肯定是文件没有复制全,回头搞去。
直接点ok就可以连接上了。
二、单片机
都有软件包,没有啥好说了,直接加上软件包就可以了,然后,修改一下board.c中的启动代码,在rt_console_set_device之前调用rt_hw_jlink_rtt_init,当然,那个RT_CONSOLE_DEVICE_NAME宏是要改成jlinkRtt的,看一下drv_rtt.c就知道啦。
void rt_hw_board_init()
{
/* NVIC Configuration /
#define NVIC_VTOR_MASK 0x3FFFFF80
#ifdef VECT_TAB_RAM
/ Set the Vector Table base location at 0x10000000 /
SCB->VTOR = (0x10000000 & NVIC_VTOR_MASK);
#else / VECT_TAB_FLASH /
/ Set the Vector Table base location at 0x08000000 */
SCB->VTOR = (0x08000000 & NVIC_VTOR_MASK);
#endif
SystemClock_Config();
#ifdef RT_USING_PIN
int n32_hw_pin_init(void);
n32_hw_pin_init();
n32_msp_jtag_init(RT_NULL);
#endif
#ifdef RT_USING_SERIAL
int rt_hw_usart_init(void);
rt_hw_usart_init();
#endif
#ifdef RT_USING_COMPONENTS_INIT
rt_components_board_init();
#endif
#ifdef SEGGER_RTT_ENABLE
extern int rt_hw_jlink_rtt_init(void);
rt_hw_jlink_rtt_init();
#endif
#if defined(RT_USING_CONSOLE) && defined(RT_USING_DEVICE)
rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
#endif
#ifdef BSP_USING_SRAM
rt_system_heap_init((void *)EXT_SRAM_BEGIN, (void *)EXT_SRAM_END);
#else
rt_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END);
#endif
}
三、打印数据丢失的现像
1、打印的信息没有打全,少了很多,help测试
没有打全哦,不知道问题在哪里。
2、进入调试状态,在help指令里面加入断点,一条条的来,发现是可以全部打印出来的。
3、软件打开时,好像有时钟设置,加大SWD时钟,看看有没有用?
比前面的要接收得多一点,莫非是我们的接收速度不够快吗?
不知道呀,哪位大神帮看看啥子个情况呀?
把打印的信息,复制出来,发现字符个数正好是1023,这不就是默认值吗?
看一下代码,查看SEGGER_RTT_Confg.h发现人家根本就没有用到rtconfig.h里面的设置,所以任你在env里面设置多大也没有用。
解决方法:
手动添加头文件
在help里面加入的时间测试,运行的结果看一下:挺快的嘛。
原作者:wlof
|