玩转X-CTR100 | STM32F4 l X-Assistant串口助手控制功能

我造轮子,你造车,创客一起造起来!塔克创新资讯【塔克社区 www.xtark.cn 】【塔克博客 www.cnblogs.com/xtark/ 】

X-CTR100控制器配套的X-Assistant串口调试助手的控制功能,实现与X-CTR100控制器的交互控制,控制LED灯的亮灭和舵机旋转角度。通过本教程可以学习上位机控制逻辑和串口通信协议相关知识。
原理
X-CTR100控制器配套X-Assistant串口调试助手软件。为方便PC与X-CTR100交互,增加控制功能,实现上下左右四个方向键和两个滑块交互,软件界面如下图所示。
控制协议如下所示,基于帧编码方式实现,具有帧头、帧校验内容。软件帮助也具有协议内容介绍。
- 协议内容:0xAA + 0x55 + 帧长度 + 帧编码 + 按键 + 滑块1 + 滑块2 + 校验和
- 帧长度:固定值 0x08
- 帧编码:固定值0x11
- 按键:无按键 - 0x00,上 - 0x01,下 - 0x02,左 - 0x04,右 - 0x08
- 滑块1:数值范围0~0xFF
- 滑块2:数值范围0~0xFF
- 校验和:前面7位数据累加和的低8位
根据上述帧协议说明,列举帧范例:上按键 - 按下,滑块1 - 80,滑块2 - 80,帧数据"AA 55 11 01 50 50 B9"。帧协议可以通过将X-CTR100控制器的串口收发连接在一起进行测试,测试步骤如下。
步骤一:将SW-UP调节到OFF侧,X-CTR100处理器无供电。通过杜邦线连接LA(UART1)接口的TX和RX。连接COM到调试电脑,此时CH340G USB转串口芯片通过电脑USB供电。

步骤二:打开X-Assistant软件,并打开对应串口,并设置接收显示为"16进制"。
步骤三:按下、抬起按钮观察数据变化,按下和抬起对应两个动作。滑动滑块观察帧数据,滑块滑动即可产生连续帧数据,实现实时的滑块位置反应。

X-Assistant的按钮控制可实现类似智能小车前进,后退,左转,右转控制,按钮按下执行相应的动作,按钮抬起小车停止。滑块控制可实现类似舵机控制,滑块滑动到什么位置,舵机指向什么位置,后面会说明通过滑块控制舵机示例。X-Assistant控制功能虽然简单,可以实现基本的机器人和智能小车控制,作品进行功能调试阶段比较方便。
例程
本例程实现X-Assistant软件控制功能对X-CTR100进行控制。上下按钮控制红绿LED灯,"上"按钮控制绿灯,"下"按钮控制红灯,按钮按下灯点亮,按钮抬起灯熄灭。滑块控制2个舵机转动。
硬件说明
硬件资源:
- 串口UART1
- 红绿LED灯
- 扩展接口RA、RB
- 小功率舵机,如SG90
硬件资源:
两个舵机分别连接在RA、RB两个接口上,使用TIM1的通道1和通道2进行舵机控制,注意舵机接插件正反,参考下图所示。

软件说明
本例程软件通过串口接收中断实现数据接收,并在中断中完成协议帧解析。中断程序通过flag标志向主程序传递解析结果,并打印接收到的帧数据。主程序根据解析结果,进行相应控制。
串口中断函数代码如下所示。
|
中断服务程序 void USART1_IRQHandler(void) { u8 Res;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾) {
Res =USART_ReceiveData(USART1);
if(USART1_RX_CON < 3) //接收帧头 + 长度 { if(USART1_RX_CON == 0) { if(Res == 0xAA) { USART1_RX_CON = 1; } else {
} }else if(USART1_RX_CON == 1) { if(Res == 0x55) { USART1_RX_CON = 2; } else { USART1_RX_CON = 0; } } else { USART1_RX_LEN = ( Res-1 ); USART1_RX_CON = 3; USART1_RX_CHECKSUM = 0xFF + Res; //0xFF 为 AA 55 校验和 } } else //接收数据 { if(USART1_RX_CON < USART1_RX_LEN) { USART1_RX_BUF[USART1_RX_CON] = Res; USART1_RX_CON++; USART1_RX_CHECKSUM = USART1_RX_CHECKSUM + Res; } 位 { if( Res == USART1_RX_CHECKSUM ) //校验正确 { //标记接收完成 flag = 1;
printf("RX:AA 55 08 %x %x %x %x \r\n", USART1_RX_BUF[3], USART1_RX_BUF[4], USART1_RX_BUF[5], USART1_RX_BUF[6]); } else //数据错误 { printf("AERR\r\n"); }
//接收完成,恢复初始状态 USART1_RX_CON = 0; USART1_RX_LEN = 0; } } USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); } } |
主程序代码如下。
|
int main(void) { //X-CTR100初始化 AX_Init(115200); printf("***X-Assistant 控制功能例程***\r\n\r\n");
//舵机AB接口初始化 AX_SERVO_TIM2_AB_Init(); 度 度
//设置UART1接收中断 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2 NVIC_Config();
while (1) { if(flag) { //上按键控制绿灯,按下亮,抬起灭 if(USART1_RX_BUF[4] & 0x01) AX_LEDG_On(); else AX_LEDG_Off();
//下按键控制红灯,按下亮,抬起灭 if(USART1_RX_BUF[4] & 0x02) AX_LEDR_On(); else AX_LEDR_Off();
控制舵机,不连接舵机对程序无影响 AX_SERVO_TIM2_A_SetAngle(200 + USART1_RX_BUF[5]*5); //舵机A控制
控制舵机,不连接舵机对程序无影响 AX_SERVO_TIM2_B_SetAngle(200 + USART1_RX_BUF[6]*5); //舵机B控制
flag = 0; }
AX_Delayms(10); } } |
实现效果
上下按钮实现LED灯控制,拖动滑块进行舵机控制。解析的控制帧如下图所示。

玩转X-CTR100 | STM32F4 l X-Assistant串口助手控制功能的更多相关文章
- 玩转X-CTR100 | X-Assistant串口助手控制功能
更多塔克创新资讯欢迎登陆[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] X-CTR100控制器配套的X-Assistant串口调试 ...
- 玩转X-CTR100 l STM32F4 l CAN通信
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] X-CTR100控制器STM32F4处理器内置CAN ...
- 玩转X-CTR100 l STM32F4 l ADC 模拟数字转换
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 AD转换接 ...
- 玩转X-CTR100 l STM32F4 l MPU6050加速度陀螺仪传感器
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 板载加速度 ...
- 玩转X-CTR100 l STM32F4 l DSP指令集性能测试
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 DSP库的 ...
- 玩转X-CTR100 l STM32F4 l FPU单精度浮点性能测试
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器如何开启ST ...
- 玩转X-CTR100 l STM32F4 l RNG硬件随机数发生器
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 STM32F4硬件随 ...
- 玩转X-CTR100 l STM32F4 l X-CTR100与树莓派搭建机器人平台
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器与树莓派Linux系统 ...
- 玩转X-CTR100 l STM32F4 l UCOS-III移植
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 概述 前后台系统 简单的小型系统设计一般是基于前后台 ...
随机推荐
- English Voice of << Count on me >>
Count On Me 歌手:Bruno Mars 所属专辑:It´s Better If You Don´t Understand If you ever find yourself stuck i ...
- centos6 安装python3.5后pip无法使用的处理
现象:安装pip后发现命令无法识别command not found 原因:which查看找到不到执行路径 find搜索发现安装后存放在/usr/local/python3.5/bin下,于是判断 ...
- 02 爬虫数据解析之re,xpath,beautifulsoup
一.正则匹配 简单用法演示: 字符: print(re.findall(".","abccc31223dn哈哈")) ### . 匹配除了换行符以外的任意字符, ...
- 『计算机视觉』Mask-RCNN_推断网络其六:Mask生成
一.Mask生成概览 上一节的末尾,我们已经获取了待检测图片的分类回归信息,我们将回归信息(即待检测目标的边框信息)单独提取出来,结合金字塔特征mrcnn_feature_maps,进行Mask生成工 ...
- 配置ssh免密登录
安装ssh sudo apt-get install ssh 产生密钥:ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa (rsa为ssh的加密方式 ...
- Hadoop 2.7.3 完全分布式维护-动态增加datanode篇
原有环境 http://www.cnblogs.com/ilifeilong/p/7406944.html IP host JDK linux hadop role 172.16.101 ...
- 【转】C# string数组转int数组
//字符串数组(源数组) string[] sNums = new[] {"1", "2"}; //整型数组(目标数组) int[] iNums; //转换方法 ...
- [LeetCode] 295. Find Median from Data Stream ☆☆☆☆☆(数据流中获取中位数)
295. Find Median from Data Stream&数据流中的中位数 295. Find Median from Data Stream https://leetcode.co ...
- kaggle信用卡欺诈看异常检测算法——无监督的方法包括: 基于统计的技术,如BACON *离群检测 多变量异常值检测 基于聚类的技术;监督方法: 神经网络 SVM 逻辑回归
使用google翻译自:https://software.seek.intel.com/dealing-with-outliers 数据分析中的一项具有挑战性但非常重要的任务是处理异常值.我们通常将异 ...
- 微信小程序开发工具 POST net::ERR_PROXY_CONNECTION_FAILED 代理问题
几天不动代码,再运行成这样了, {errMsg: "getLocation:fail Error: tunneling socket could not…d, cause=connect E ...