什么是USMART?
USMART是为STM32开发平台开发的一种类似Linux的shell的调试工具。具体工作过程是通过串口发送命令给单片机,然后单片机收到命令之后调用单片机里面对应的相关函数并执行,同时支持返回结果。
USMART调试过程:
1、串口调试助手发送函数命令:Led_set(0);
2、单片机接收到命令之后,解析命令,调用对应的函数:Led_set();
3、调用Led_set函数
USART应用场景:
开发过程中,经常需要修改函数入口参数,查看运行效果的情况下应用非常方便。不用多次下载代码或多次用JLINK调试。
USMART特点:
1、可以调用绝大多数部分用户直接编写的函数。
2、资源占用极少(最少情况:FLASH:4K SRAM:72B)。
3、支持参数类型多(数字(包含10/16进制)、字符串、函数指针等)。
4、支持函数返回值显示。
5、支持参数及返回值格式设置。
6、支持函数执行时间计算。
7、使用方便。
USMART文件组:
usmart.c负责与外部互交等
usmart_str.c主要负责命令与参数解析
usmart_config.c主要由用户添加需要由usmart管理的函数
usmart.h和usmart_str.h是两个头文件,其中usmart.h里面含有几个用户配置宏定义,可以用来配置usmart的功能及总参数长度(直接和SRAM占用挂钩)、是否使能定时器扫描、是否使用读写函数等。
USMART步骤配置
1、将USMART包添加到工程中,头文件要包含到path。
2、添加需要调用的函数到usmart_config.c文件中。
3、主函数中调用usmart_dev.init函数初始化usmart。
4、即可通过助手发送命令,调用在usmart注册过的函数。
将函数注册到usmart中:void+指针“*”+函数名字+“,”+在XX.h中复制一下函数全部并用双引号引起来。比如:(void*)LCD_Clear,"void LCD_Clear(u16 Color)"
如果是在外面(main函数外面)在usmart中注册函数的外面写extern
比如:extern void led_set(u8 sta); (void*)led_set,"void led_set(u8 sta)"
USMART系统命令:
1、?:获取帮助信息
2、help:获取帮助信息
3、list:可用的函数列表
4、id:可用函数的ID列表
5、hex:参数16进制显示,后跟空格+数字即执行进制转换
6、dec:参数10进制显示,后跟空格+数字即执行进制转换
7、runtime:1,开启函数运行计时;0,关闭函数运行计时。
USMART的执行过程:
单片机通过串口接收命令,当命令是调用相应函数时,串口中有一个buffer数组将数据存储,然后开启一个定时器开始计时。每隔一定时间会检测buffer中收到的字符串,从而接收命令进而调用函数。整个过程主要是定时器通过中断定时检测收到的数据,然后去执行相应的函数,当函数执行完之后定时器的中断也将结束,程序就会恢复到最初执行的位置。usmart发送命令执行函数实际上是在定时器的中断中执行。
举例:如果屏幕上原本白板,然后在上面画一个圆圈,当定时器中断执行之后程序会进行刷屏,屏幕会再次变为白板。
USMART调试组件