基于串口通信的摇杆控制器 ---- 摇杆数据的读取、通信协议、从设备解开数据包
项目背景:基于LORA的遥控器
项目器件清单:
- 正点原子LORA模块(资料多)
- 摇杆模块(电位器)
- 主控stm32
实现流程:摇杆数据的读取、通信协议、从设备解开数据包。
1、摇杆数据的读取
上图就是我选取的摇杆(独立按键不涉及),摇杆就相当于电位器,AD读取电压即可。
对于比较初级的使用AD,我们需要明确几个方面:
- 明确所用引脚 -----> 配置引脚
- ADC的转换周期 = 采样时间 + 转换时间
- 通过总线驱动外设,总线配置的时钟频率要小于ADC的最大频率(一般需要分频)
- 采样时间,SMP寄存器配置
- 转换时间取决于ADC的位数
- 如果用库函数开发,计算完需要的参数,配置就行了。其余的模式、通道等若用到也可以修改。
- 我们设置一个全局变量存放数据就好。
2、通信协议
正点原子给出了一个接受的通信协议。所有的接受数据以0x0d 0x0a结束。
void USART1_IRQHandler(void) //串口1中断服务程序
{u8 Res;
#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.OSIntEnter();
#endifif(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾){Res =USART_ReceiveData(USART1);//(USART1->DR); //读取接收到的数据if((USART_RX_STA&0x8000)==0)//接收未完成{if(USART_RX_STA&0x4000)//接收到了0x0d{if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始else USART_RX_STA|=0x8000; //接收完成了 ,标记完15位后,等待被其他程序清零}else //还没收到0X0D{ if(Res==0x0d)USART_RX_STA|=0x4000;else{USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;USART_RX_STA++;if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收 } }} }
#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.OSIntExit();
#endif
}
下面画个树状图理解一下
协议里如果数据包正确,按照,(1)、(2)、(3)进行接受数据。
3、从设备解开数据包
我们如果不使用上文的协议(正文数据左右放置固定参数),也可以自己写个数据包。
- 因为串口是8位数据完成一次传输,且AD的数据为16位的,所以我们需要定义一个8位的数组,并且将16位的数据放进去。
date[i++] =(AD>>8)&0xff;//数据高位 date[i++] = AD&0xff;//数据低位
但是这样也不能保证数据的正确性,所以我们还要放入两个AD数据加和的值。
- 我们将数据传输过去后,还需要拆包,并将16进制数据转为10进制,方便验证。
x = (USART3_RX_BUF[0]/16)*(16*16*16)+(USART3_RX_BUF[0]%16)*16*16+(USART3_RX_BUF[1]/16)*16+USART3_RX_BUF[1]%16;y = (USART3_RX_BUF[2]/16)*(16*16*16)+(USART3_RX_BUF[2]%16)*16*16+(USART3_RX_BUF[3]/16)*16+USART3_RX_BUF[3]%16;xADDy = (USART3_RX_BUF[4]/16)*(16*16*16)+(USART3_RX_BUF[4]%16)*16*16+(USART3_RX_BUF[5]/16)*16+USART3_RX_BUF[5]%16;
到这里也就完成了。
基于串口通信的摇杆控制器 ---- 摇杆数据的读取、通信协议、从设备解开数据包相关推荐
- 基于串口通信的DSP应用程序在线升级方法
摘 要:为解决特殊场合DSP程序升级困难的问题,以TMS320F28035为例,介绍了一种基于串口通信的适合于TMS320C2000系列DSP实现程序更新的在线升级方法.描述了该在线升级方法的基本思 ...
- [python] 3 、基于串口通信的嵌入式设备上位机自动测试程序框架(简陋框架)...
星期一, 20. 八月 2018 01:53上午 - beautifulzzzz 1.前言 做类似zigbee.ble mesh...无线网络节点性能测试的时候,手动操作然后看表象往往很难找出真正的原 ...
- STM32配置CH375B成HID Host模式读取自定义HID设备的数据 ——STM32配置CH375B接口函数
接着上一篇上传,这个是STM32配置CH375B时用到的接口函数 头文件: #ifndef __BSP_CH375_H__ #define __BSP_CH375_H__#include " ...
- python3读取excel数据-Python3读取和写入excel表格数据的示例代码
python操作excel主要用到 xlrd 和 xlwt 这两个库,xlrd读取excel表格数据, 支持 xlsx和xls格式的excel表格 :xlwt写入excel表格数据: 一.python ...
- python3读取excel数据-python3 读取Excel表格中的数据
需要先安装openpyxl库 通过pip命令安装: pip install openpyxl 源码如下: #!/usr/bin/python3 #-*- coding:utf-8 -*- import ...
- java获取xlsx某列数据_Java读取Excel指定列的数据详细教程和注意事项
本文使用jxl.jar工具类库实现读取Excel中指定列的数据. jxl.jar是通过java操作excel表格的工具类库,是由java语言开发而成的.这套API是纯Java的,并不依赖Windows ...
- Android 读取外接储存设备的数据(如挂载的U盘,SD卡等)
本篇文章,将围绕以下几点来讲解: 1:OTG是什么? 2:Android手机和一些Android系统的TV盒子对OTG的支持情况? 3:如何得知外接储存设备的插入和拔出的广播事件? 4:得到插入广播后 ...
- STM32配置CH375B成HID Host模式读取自定义HID设备的数据 ——STM32端口初始化
最近产品需要一个USB主机测试治具,所以需要做一个USB HOST去读取HID设备的数据,由于以前也没做过USB方面的项目,对这一块也不是很熟悉,因此遇到了很多困难,所幸的是经过两天半的努力,最终完成 ...
- java搜索excel表格里的数据_Java读取Excel表格中的数据
前言 本文主要讲述如何在Java中读取Excel表中的数据并在控制台输出,实现工具为Eclipse 提示:以下是本篇文章正文内容,下面案例可供参考 一.添加jar包文件 描述:在Java中导入导出Ex ...
- python3 写入excel表格数据_Python3读取和写入excel表格数据
目录 python操作excel主要用到 xlrd和xlwt 这两个库,xlrd读取excel表格数据, 支持 xlsx和xls格式的excel表格 :xlwt写入excel表格数据: 一.pytho ...
最新文章
- 别的设计师比你又快又好,是因为你不知道他们在用介个!
- C语言内存泄露很严重该怎么办?这几招告诉你
- VMware Workstation Pro 无法在Windows上运行的解决方案
- activty在哪个栈里面_第二篇Activity:2、任务和返回堆栈(Tasks and Back Stack)之基本介绍...
- linux桌面使用网卡设置,Linux的KDE桌面下怎样设置网络连接?
- Ubuntu 下PySpark安装
- 爬虫-芒果TV-弹幕评论
- 20141113--SQL 事务
- MATLAB编程与应用系列-第3章 矩阵运算(4)
- 接口测试自动化框架搭建
- synchronized可重入锁
- 服务器远程桌面一直正在配置,关于远程桌面一直显示正在配置远程会话
- 最新Python使用键鼠模拟,DNF拍卖行
- 柔性整列压力传感器工作原理记录
- win10计算机系统慢,解决Win10电脑变慢的一些方法
- 还记得JavaWeb中的组件Servlet吗?面试会问
- 前端面试经典js题目Foo 与 getName
- 车道线检测---色彩空间变换
- Systemd中环境变量设置
- 平生不会相思,才会相思,便害相思