我造轮子,你造车,创客一起造起来!塔克创新资讯【塔克社区 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串口助手控制功能的更多相关文章

  1. 玩转X-CTR100 | X-Assistant串口助手控制功能

      更多塔克创新资讯欢迎登陆[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]       X-CTR100控制器配套的X-Assistant串口调试 ...

  2. 玩转X-CTR100 l STM32F4 l CAN通信

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] X-CTR100控制器STM32F4处理器内置CAN ...

  3. 玩转X-CTR100 l STM32F4 l ADC 模拟数字转换

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器 AD转换接 ...

  4. 玩转X-CTR100 l STM32F4 l MPU6050加速度陀螺仪传感器

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器 板载加速度 ...

  5. 玩转X-CTR100 l STM32F4 l DSP指令集性能测试

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器 DSP库的 ...

  6. 玩转X-CTR100 l STM32F4 l FPU单精度浮点性能测试

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器如何开启ST ...

  7. 玩转X-CTR100 l STM32F4 l RNG硬件随机数发生器

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 STM32F4硬件随 ...

  8. 玩转X-CTR100 l STM32F4 l X-CTR100与树莓派搭建机器人平台

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器与树莓派Linux系统 ...

  9. 玩转X-CTR100 l STM32F4 l UCOS-III移植

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 概述 前后台系统 简单的小型系统设计一般是基于前后台 ...

随机推荐

  1. 混合线性模型(linear mixed models)

    一般线性模型.混合线性模型.广义线性模型 广义线性模型GLM很简单,举个例子,药物的疗效和服用药物的剂量有关.这个相关性可能是多种多样的,可能是简单线性关系(发烧时吃一片药退烧0.1度,两片药退烧0. ...

  2. 方差variance, 协方差covariance, 协方差矩阵covariance matrix | scatter matrix | weighted covariance | Eigenvalues and eigenvectors

    covariance, co本能的想到双变量,用于描述两个变量之间的关系. correlation,相关性,covariance标准化后就是correlation. covariance的定义: 期望 ...

  3. spring boot ----> 和mybatis。。。

    环境: centos6.8,jdk1.8.0_172,maven3.5.4,spring boot1.5.15 1.使用maven命令:mvn dependency:tree查看mybatis-spr ...

  4. LeetCode--008--字符串转换整数 (atoi)(java)

    请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之 ...

  5. gcc -02引起内存溢出'unsigned i'应修订为'volatile unsigned i'

    2017-12-13 10:44:19gcc -02引起内存溢出'unsigned i'应修订为'volatile unsigned i' 1.3.100 driver/char/random.cst ...

  6. Could not find method google() for arguments [] on repository container.

    出这个问题主要是你Gradle版本太低的原因,一般要使用4.0+的版本 所以你需要更新你的Gradle版本至4.0+呦 tips:注意你的AndroidStudio版本应该是3.0以上,因为Gradl ...

  7. oracle登陆触发器及精细审计

    --oracle精细审计FGAselect tab2.userhost 引起操作的主机名,tab2.os_user 引起操作的主机用户,tab2.object_schema 被操作对象所属用户,tab ...

  8. 【转】vue中动态设置meta标签和title标签

    因为和原生的交互是需要h5这边来提供meta标签的来是来判断要不要显示分享按钮,所有就需要手动设置meta标签,标题和内容 //router内的设置 { path: '/teachers', name ...

  9. linux文件软链接、硬链接

    在linux ext2文件系统中,一个文件的属性存放在inode中,而数据存放在block中.每个文件占用一个inode,inode中记录了文件的权限和block地址,通过inode可以定位到bloc ...

  10. 剑指 offer 面试题31 连续子数组的最大和(动态规划)

    求连续子数组的最大和 题目描述 给定一个整形数组,有正数也有负数,数组中连续一个或多个组成一个子数组,求所有子数组的和的最大值,要求时间复杂度为O(n); 测试用例 给定数组 {1,-2,3,10,- ...