本帖最后由 zhangyang86 于 2011-4-9 13:00 编辑
USMART是原子这几天工作之余开发出来的一个串口调试互交组建,有了它,你可以通过串口调用任何一个程序里面的函数(仅限参数为10/16进制的函数),并在下位机执行.例如,我 在调试一个摄像头,我想修改里面的一个寄存器,来看看不同情况下面的结果,传统的方法就是改变一下,刷一次代码,这样浪费了时间不说,单片机也很可能被刷坏.或者自己写一个串口协议,从串口发送一个字节过来,然后执行改变,这样可以节省时间,但是需要花一定精力来写一个这样的协议及函数来实现这个功能.
使用USMART,则可以十分方便的实现以上功能了.比如,在代码里面设置寄存器的函数原形为:
//写寄存器
void COM_WR_Reg(u8 Reg, u16 RegValue)
{
WR_REG(Reg);
WR_DATA(RegValue);
}
在usmart组件的帮助下,我们只需要在串口调试助手,输入:COM_WR_Reg(0X03,0X12AB),就可以修改03寄存器的值为0X12AB了.
这样,完全不需要你自己编写其他多余代码,也不用编写专门的函数,直接在usmart下,即可调用任意一个函数.是不是很方便?呵呵,先上图吧,看看实际运行的效果.
输入"?"获得帮助(也可以通过输入help来获得帮助)
输入"list",列出所有可用的usmart函数.注意,这里的函数没有上线,可以自己随意增加的.
执行LCD_Init函数的结果.
在液晶上指定位置显示一个数字
在液晶上的 100,100坐标画一个70为半径的圆.
非法的输入.(没有输入括号.)
USMART的使用很简单,比如我们在综合实验中要使用USMART,只需要增加一个USMART的组,把usmart.c,usmart_str.c,usmart_config.c加入即可.然后在主函数的头文件里面增加usmart.h.如下图所示:
usmart.c包含与外部互交的函数.usmart_str.c主要负责命令和参数解析.usmart_config.c主要由用户添加需要usmart管理的函数.不过这里我们还需要借助到外部的usart.c的支持,在ALIENTEK提供的例程里面,我们只需要把usart.h里面的 #define EN_USART1_RX //使能串口1接收 使能即可.
在调用的时候,我们先执行usmart_dev.init(); //初始化 USMART 以初始化usmart.(其实这里就是串口初始化一下,其他的啥也没做).
然后每隔一定时间执行一次usmart_dev.scan();//执行usmart 就可以了.
usmart_dev.scan()函数用于获取从串口发送过来的指令,并解析和执行.
我们可以通过定时器中断,来执行usmart_dev.scan();也可以通过在主循环里面扫描执行usmart_dev.scan();.两种方式选择自己合适的就可以了.
最后再介绍一下如何在usmart_config.c中添加自己的函数.方法如下:
1,把要加入usmart的函数所在的头文件包含近来,如上图中最上的红圈内.
2,把要加入usmart的函数名及其字符串函数名增加到usmart_nametab中,如上图左下的红圈内.
3,编译下载.
经过这三步,我们就可以在串口控制加入usmart的函数了.如下图所示:
上面列出的list,就是我们在usmart_nametab中输入的所有函数.
然后我们在串口输入各个函数及其正确的参数后,键入回车,并发送给stm32之后,usmart就开始执行你输入的函数了.如下图所示:
这里附上源码(综合实验+usmart).采用定时器3的中断来执行usmart_dev.scan()函数.每100ms执行一次.
提醒大家:参数一定不要乱输,否则可能导致不可预知的结果!!!
|
|