目录

1.简介

2.USMART 组件的移植


1.简介

USMART 是由 ALIENTEK 开发的一个灵巧的串口调试互交组件,通过它你可以通过串口 助手调用程序里面的任何函数,并执行。因此,你可以随意更改函数的输入参数(支持数字(10/16 进制)、字符串、函数入口地址等作为参数),单个函数最多支持 10 个输入参数,并支持函数返 回值显示

USMART 的特点如下:

1, 可以调用绝大部分用户直接编写的函数。

2, 资源占用极少(最少情况:FLASH:4K;SRAM:72B)。

3, 支持参数类型多(数字(包含 10/16 进制)、字符串、函数指针等)。

4, 支持函数返回值显示。

5, 支持参数及返回值格式设置。

6, 支持函数执行时间计算

7, 使用方便。

有了 USMART,你可以轻易的修改函数参数、查看函数运行结果,从而快速分析解决问题。 比如你调试一个摄像头模块,需要修改其中的几个参数来得到最佳的效果,

如果利用 USMART,则只需要在串口调试助手里面输入函数及参数,然后直接串口发送给单片机,就执行了一次参数调整,不满意的话,在串口调试助手修改参数在发送就可以了, 直到满意为止。这样,修改参数十分方便,不需要编译、不需要下载、

USMART 支持的参数类型基本满足任何调试了,支持的类型有:10 或者 16 进制数字、字符串指针(如果该参数是用作参数返回的话,可能会有问题!)、函数指针等。因此绝大部分函数,可以直接被 USMART 调用,对于不能直接调用的,你只需要重写一个函数,把影响调用的参数去掉即可,这个重写后的函数,即可以被 USMART 调用了。

步骤:

第一步,添加需要调用的函数(在 usmart_config.c 里 面的 usmart_nametab 数组里面添加);

第二步,初始化串口;

第三步,初始化 USMART(通过 usmart_init 函数实现);

第四步,轮询 usmart_scan 函数,处理串口数据。

2.USMART 组件的移植

USMART 组件总共包含 6 文件

redeme.txt是一个说明文件,不参与编译

usmart.c负责与外部互交

usmat_str.c主要负责命令和参数解析

usmart_config.c主要由用户添加需要由 usmart 管理的函 数。

usmart.h,usmart_str.h是两个头文件,其中 usmart.h 里面含有几个用户配置宏定义,可以 用来配置 usmart 的功能及总参数长度(直接和 SRAM 占用挂钩)、是否使能定时器扫描、是否使 用读写函数等。

USMART 的移植,只需要实现 5 个函数。其中 4 个函数都在 usmart.c 里面,另外一个是串口接收函数,必须由用户自己实现,用于接收串口发送过来的数据。

函数介绍:

第一个函数,串口接收函数。

该函数,我们是通过 SYSTEM 文件夹默认的串口接收来实现的

第二个是 void usmart_init(void)函数

//初始化串口控制器
//sysclk:系统时钟(Mhz)
void usmart_init(u8 sysclk)
{
#if USMART_ENTIMX_SCAN==1
Timer4_Init(1000,(u32)sysclk*100-1);//分频,时钟为 10K ,100ms 中断一次
//注意,计数频率必须为 10Khz,以和 runtime 的单位(0.1ms)同步.
#endif
usmart_dev.sptype=1; //十六进制显示参数
}

该函数有一个参数 sysclk,就是用于定时器初始化。另外 USMART_ENTIMX_SCAN 是在 usmart.h 里面定义的一个是否使能定时器中断扫描的宏定义。如果为 1,就初始化定时器中断,并在中断里面调用 usmart_scan 函数。如果为 0,那么需要用户需要自行间隔一定时间(100ms 左右为宜)调用一次 usmart_scan 函数,以实现串口数据处理。注意:如果要使用函数执行时 间统计功能(指令:runtime 1),则必须设置 USMART_ENTIMX_SCAN 为 1。另外,为了让 统计时间精确到 0.1ms,定时器的计数时钟频率必须设置为 10Khz,否则时间就不是 0.1ms 了。

第三和第四个函数仅用于服务 USMART 的函数执行时间统计功能(串口指令:runtime 1), 分别是:usmart_reset_runtime 和 usmart_get_runtime,这两个函数代码如下:

//复位 runtime
//需要根据所移植到的 MCU 的定时器参数进行修改
void usmart_reset_runtime(void)
{
TIM4->SR&=~(1<<0); //清除中断标志位
TIM4->ARR=0XFFFF; //将重装载值设置到最大
TIM4->CNT=0; //清空定时器的 CNT
usmart_dev.runtime=0;
}
//获得 runtime 时间
//返回值:执行时间,单位:0.1ms,最大延时时间为定时器 CNT 值的 2 倍*0.1ms
//需要根据所移植到的 MCU 的定时器参数进行修改
u32 usmart_get_runtime(void)
{
if(TIM4->SR&0X0001)//在运行期间,产生了定时器溢出
{
usmart_dev.runtime+=0XFFFF;
}
usmart_dev.runtime+=TIM4->CNT;
return usmart_dev.runtime; //返回计数值
}

这里我们还是利用定时器 4 来做执行时间计算,usmart_reset_runtime 函数在每次 USMART 调用函数之前执行,清除计数器,然后在函数执行完之后,调用 usmart_get_runtime 获取整个 函数的运行时间。由于 usmart 调用的函数,都是在中断里面执行的,所以我们不太方便再用定 时器的中断功能来实现定时器溢出统计,因此,USMART 的函数执行时间统计功能,最多可以统计定时器溢出 1 次的时间,对 STM32 来说,定时器是 16 位的,最大计数是 65535,而由于 我们定时器设置的是 0.1ms 一个计时周期(10Khz),所以最长计时时间是:65535*2*0.1ms=13.1 秒。也就是说,如果函数执行时间超过 13.1 秒,那么计时将不准确。

最后一个是 usmart_scan 函数,该函数用于执行 usmart 扫描,该函数需要得到两个参量, 第一个是从串口接收到的数组(USART_RX_BUF),第二个是串口接收状态(USART_RX_STA)。 接收状态包括接收到的数组大小,以及接收是否完成。该函数代码如下:

//usmart 扫描函数
//通过调用该函数,实现 usmart 的各个控制.该函数需要每隔一定时间被调用一次
//以及时执行从串口发过来的各个函数.
//本函数可以在中断里面调用,从而实现自动管理.
//非 ALIENTEK 开发板用户,则 USART_RX_STA 和 USART_RX_BUF[]需要用户自己实现
void usmart_scan(void)
{
u8 sta,len;
if(USART_RX_STA&0x8000)//串口接收完成?
{
len=USART_RX_STA&0x3fff; //得到此次接收到的数据长度
USART_RX_BUF[len]='\0'; //在末尾加入结束符.
sta=usmart_dev.cmd_rec(USART_RX_BUF);//得到函数各个信息
if(sta==0)usmart_dev.exe();//执行函数
else
{
len=usmart_sys_cmd_exe(USART_RX_BUF);
if(len!=USMART_FUNCERR)sta=len;
if(sta)
{
switch(sta)
{
case USMART_FUNCERR:
printf("函数错误!\r\n");
break;
case USMART_PARMERR:
printf("参数错误!\r\n");
break;
case USMART_PARMOVER:
printf("参数太多!\r\n");
break;
case USMART_NOFUNCFIND:
printf("未找到匹配的函数!\r\n");
break;
}
}
}
USART_RX_STA=0;//状态寄存器清空
}
}

该函数的执行过程:先判断串口接收是否完成(USART_RX_STA 的最高位是否为 1),如 果完成,则取得串口接收到的数据长度(USART_RX_STA 的低 14 位),并在末尾增加结束符, 再执行解析,解析完之后清空接收标记(USART_RX_STA 置零)。如果没执行完成,则直接跳 过,不进行任何处理。

正点原子USMART 调试组件实验学习笔记(一)相关推荐

  1. 正点原子USMART调试学习笔记(二)

    软件设计 keilkill.bat,是一个批处理文件,双击,可以删除 MDK 编译过程中产生的中间文件, 从而大大减少整个工程所占用的空间,节省硬盘空间,方便传输. 由于 USMART 默认提供了 S ...

  2. dev c++怎么调试_「正点原子NANO STM32开发板资料连载」第十八章 USMART 调试组件...

    1)实验平台:ALIENTEK NANO STM32F411 V1开发板2)摘自<正点原子STM32F4 开发指南(HAL 库版>关注官方微信号公众号,获取更多资料:正点原子 第十八章 U ...

  3. 【正点原子STM32连载】 第二十六章 USMART调试组件实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

    1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...

  4. STM32F103学习笔记(十一)——USMART调试组件的使用

    实验十一 USMART调试组件的使用 测试指令: 测试主函数参考代码: #include "stm32f10x.h" #include "led.h" #inc ...

  5. 基于STM32战舰开发板的USMART调试组件的使用

    基于STM32战舰开发板的USMART调试组件的使用 USMART调试组件是什么? USMART是正点原子团队为其STM32开发平台开发的一种类似linux的shell的调试工具.具体工作过程是通过串 ...

  6. USMART调试组件实验

    USMART是正点原子团队为其STM32开发平台开发的一种类似linux的shell的调试工具.具体工作过程是通过串口发送命令给单片机,然后单片机收到命令之后调用单片机里面对应的相关函数,并执行,同时 ...

  7. 辅助调试工具—USMART调试组件

    培养解决问题意识和能力,培养创新意识和能力--    受之以鱼,不如受之渔         学习策略:问题+解决方案 问题(机遇)来源: 什么意思呢?就是为什么会提出上面那个东西?这个东西是怎么来的? ...

  8. USMART 调试组件实验

    文章目录 前言 一.USMART调试组件简介 USMART组件的移植 二.硬件设计 三.软件设计 前言 本章,我们将向大家介绍一个十分重要的辅助调试工具:USMART 调试组件.该组件由 ALIENT ...

  9. STM32——USMART调试组件实验-M4

    什么是USMART? USMART是为STM32开发平台开发的一种类似Linux的shell的调试工具.具体工作过程是通过串口发送命令给单片机,然后单片机收到命令之后调用单片机里面对应的相关函数并执行 ...

最新文章

  1. jni android 参数 字符串 jstring,2.4.5 jstring介绍
  2. 【20160924】GOCVHelper 图像处理部分(2)
  3. 带你遍历用户生命价值与流失挽救(上) : 流量下的价值套路
  4. node开启子线程_多进程 amp; Node.js web 实现
  5. VError - Found 0 matching services的根源分析
  6. 2016/11/10 kettle概述
  7. 那些年,画家发明的黑科技
  8. Java并发编程之Lock
  9. Eclipse 无法打开Console,show view无效
  10. linux下mac风格菜单栏,Mac 菜单栏样式太单调?不妨用这个小工具自己动手定制
  11. 刘晓燕核心词汇趣讲笔记-第十七课
  12. rgba与16进制互相转换
  13. KVM vCPU创建过程
  14. 工信部发布2015年中国软件业务收入百强发展报告(zz)
  15. Windows 文件夹或文件名 太长无法删除怎么办? 一招教你怎样解决.
  16. java面向对象小知识
  17. 3dsMax---二维图形[描图]
  18. CodeForces 714C Sonya and Queries
  19. 二级管的正向恢复与反向恢复时间
  20. java如何美化按钮_MFC实现漂亮界面之美化按钮

热门文章

  1. 铁威马NAS教程之如何为NAS创建新用户
  2. 性价比超高,铁威马F4-423(4G)正式上线!
  3. 速度!天猫双11【自动养猫】教程来啦!领喵币瓜分更多红包!
  4. XWPFTable 合并单元格工具类
  5. 数据中台:一个会动用组织架构的一把手工程
  6. calico网络原理分析
  7. 一文带你快速爬取网易云音乐,就是这么简单!
  8. 快速修改oracle默认端口号,解除对8080的占用
  9. tinyMediaManager不能搜刮,DNS解析
  10. EasyPoi导出excel文件总是1kb,且打不开