目录
USMART调试过程
1.串口发送命令调用函数
2.单片机节后到命令后,解析命令,调用对应的函数
3.调用函数
USMART特点
1, 可以调用绝大部分用户直接编写的函数。
2, 资源占用极少(最少情况:FLASH:4K;SRAM:72B)。
3, 支持参数类型多(数字(包含 10/16 进制)、字符串、函数指针等)。
4, 支持函数返回值显示。
5, 支持参数及返回值格式设置。
6, 支持函数执行时间计算(V3.1 版本新特性)。
7, 使用方便。
USMART文件简介
USMART文件可在正点原子给的程序 源码中直接复制,复制到上一节LCD实验中使用
usmart.c负责与外部(例如串口)交互等。
usmat_str.c主要负责命令和参数解析。
usmart_config.c主要由用户添加需要由usmart管理的函数。注册函数。
usmart.h和usmart_str.h是两个头文件,其中usmart.h里面含有几个用户配置宏定义,可以用来配置usmart的功能及总参数长度(直接和SRAM占用挂钩)、是否使能定时器扫描、是否使用读写函数等。
USMART配置步骤
①将USMART包添加到工程中,头文件要包含到path。
②添加需要调用的函数到usmart_config.c文件中。
在调用之前要注释掉usmart_config.c中的两个外部函数,否则软件会报错。③主函数中调用usmart_dev.init函数初始化usnmart。
usmart_dev.init(SystemCoreClock/1000000)参数为系统时钟,入口参数中写SystemCoreClock/1000000 以mhz为单位除以1000000
要设置中断优先级
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
usmart_dev.init(72); //初始化USMART
④即可通过助手发送命令,调用在usmart注册过的函数。
在主函数中定义led函数,在USMART中再进行外部函数的引用,不要忘记添加调用函数的头文件。
例如:如果调用void led_set(u8 sta)函数来进行测试,在usmart_config.c中取消对该函数的注释,并且在主函数之前定义该函数,相关函数编写可参考usmart_config.c中对此函数的操作
void led_set(u8 sta){
LED1=sta;
}
USMART系统命令
USMART有7个系统命令:
? 获取帮助信息
help:获取帮助信息
list可用的函数列表
id: 可用函数的ID列表
hex:参数16进制显示,后跟空格+数字即执行进制转换dec:参数10进制显示,后跟空格+数字即执行进制转换
runtime:1,开启函数运行计时;0,关闭函数运行计时;请按照程序编写格式输入函数名及参数并以回车键结束。
实验现象
输入系统命令会返回信息,输入函数及其参数会执行对应操作。
main中代码
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "lcd.h"
#include "usmart.h"
//LED状态设置函数
void led_set(u8 sta)
{
LED1=sta;
}
//函数参数调用测试函数
void test_fun(void(*ledset)(u8),u8 sta)
{
ledset(sta);
}
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
delay_init(); //延时函数初始化
uart_init(9600); //串口初始化为9600
LED_Init(); //初始化与LED连接的硬件接口
LCD_Init(); //初始化LCD
usmart_dev.init(72); //初始化USMART
POINT_COLOR=RED;
LCD_ShowString(30,50,200,16,16,"Mini STM32 ^_^");
LCD_ShowString(30,70,200,16,16,"USMART TEST");
LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
LCD_ShowString(30,110,200,16,16,"2014/3/8");
while(1)
{
LED0=!LED0;
delay_ms(500);
}
}