目录

文章目录

前言

一、陀螺仪

二、使用步骤

1.性能参数

2.引脚说明

总结


提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

一、陀螺仪

支持串口和 IIC 两种数字接口。方便用户选择最佳的连接方式。串口速率 2400bps~921600bps 可调, IIC 接口支持全速 400K 速率

二、使用步骤

1.性能参数

1 、电压: 3V~6V
2 、电流: <40mA
3 、体积: 15.24mm X 15.24mm X 2mm
4 、焊盘间距:上下 100mil(2.54mm) ,左右 600mil(15.24mm)
5 、测量维度:加速度: 3 维,角速度: 3 维,磁场: 3 维,角度: 3 维,气压 :1 维, GPS : 3 维
6 、量程:加速度 :±16g ,角速度 :±2000°/s ,角度 ±180° 。
7 、分辨率:加速度: 6.1e-5g ,角速度 :7.6e-3°/s 。
8 、稳定性:加速度: 0.01g ,角速度 0.05°/s 。
9 、姿态测量稳定度: 0.01° 。
10 、数据输出内容:时间、加速度、角速度、角度、磁场、端口状态、气压( JY-901B )、高度
( JY-901B )、经纬度(需连接 GPS )、地速(需连接 GPS )。
10 、数据输出频率 0.1Hz~200Hz 。
11 、数据接口:串口( TTL 电平,波特率支持 2400 、 4800 、 9600 、 19200 、 38400 、 57600 、 115200 、 230400、 460800 、 921600 ), I2C (最大支持高速 IIC 速率 400K )
12 、扩展口功能:模拟输入( 0~VCC )、数字输入、数字输出、 PWM 输出(周期 1us65535us , 分辨率

2.引脚说明

#include "UARTs.h"u8 TxBuffer[256];
u8 TxCounter=0;
u8 count=0; void NVIC_Configuration(void)
{NVIC_InitTypeDef NVIC_InitStructure; /* Enable the USART1 Interrupt */NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 7;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);
}/**************************实现函数********************************************
*函数原型:      void Initial_UART1(u32 baudrate)
*功  能:      初始化STM32-SDK开发板上的RS232接口
输入参数:u32 baudrate   设置RS232串口的波特率
输出参数:没有
*******************************************************************************/
void Initial_UART1(u32 baudrate)
{GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;/* 使能 UART1 模块的时钟  使能 UART1对应的引脚端口PA的时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);/* 配置UART1 的发送引脚配置PA9 为复用输出  刷新频率50MHz*/GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);    /* 配置UART1 的接收引脚配置PA10为浮地输入 */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);/* UART1的配置:1.波特率为调用程序指定的输入 baudrate;2. 8位数据              USART_WordLength_8b;3.一个停止位             USART_StopBits_1;4. 无奇偶效验           USART_Parity_No ;5.不使用硬件流控制     USART_HardwareFlowControl_None;6.使能发送和接收功能      USART_Mode_Rx | USART_Mode_Tx;*/USART_InitStructure.USART_BaudRate = baudrate;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_Parity = USART_Parity_No ;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//应用配置到UART1USART_Init(USART1, &USART_InitStructure); USART_ITConfig(USART1, USART_IT_TXE, DISABLE);  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);        USART_ClearFlag(USART1,USART_FLAG_TC);//启动UART1USART_Cmd(USART1, ENABLE);NVIC_Configuration();
}/**************************实现函数********************************************
*函数原型:      void UART1_Put_Char(unsigned char DataToSend)
*功  能:      RS232发送一个字节
输入参数:unsigned char DataToSend   要发送的字节数据
输出参数:没有
*******************************************************************************/
void UART1_Put_Char(char DataToSend)
{//将要发送的字节写到UART1的发送缓冲区//USART_SendData(USART1, (unsigned char) DataToSend);//等待发送完成//while (!(USART1->SR & USART_FLAG_TXE));TxBuffer[count++] = DataToSend;  USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
}void UART1_Put_String(char *Str)
{//判断Str指向的数据是否有效.while(*Str){//是否是回车字符 如果是,则发送相应的回车 0x0d 0x0aif(*Str=='\r')UART1_Put_Char(0x0d);else if(*Str=='\n')UART1_Put_Char(0x0a);else UART1_Put_Char(*Str);Str++;}
}//------------------------------------------------------u8 chrTemp[250];void CopeSerialData(unsigned char ucData);
void USART1_IRQHandler(void)
{if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET){   USART_SendData(USART1, TxBuffer[TxCounter++]); if(TxCounter == count) {USART_ITConfig(USART1, USART_IT_TXE, DISABLE);// 全部发送完成}USART_ClearITPendingBit(USART1, USART_IT_TXE); }else if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET){CopeSerialData((unsigned char)USART1->DR);//处理数据USART_ClearITPendingBit(USART1, USART_IT_RXNE);}USART_ClearITPendingBit(USART1,USART_IT_ORE);}//uart reicer flag
#define b_uart_head  0x80
#define b_rx_over    0x40// USART Receiver buffer
#define RX_BUFFER_SIZE 100u8 U2TxBuffer[258];
u8 U2TxCounter=0;
u8 U2count=0; void U2NVIC_Configuration(void)
{NVIC_InitTypeDef NVIC_InitStructure; /* Enable the USART1 Interrupt */NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 8;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);
}/**************************实现函数********************************************
*函数原型:      void Initial_UART2(u32 baudrate)
*功  能:      初始化STM32-SDK开发板上的RS232接口
输入参数:u32 baudrate   设置RS232串口的波特率
输出参数:没有
*******************************************************************************/
void Initial_UART2(u32 baudrate)
{GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;/* 使能 UART2 模块的时钟  使能 UART2对应的引脚端口PA的时钟*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2 | RCC_APB2Periph_GPIOA, ENABLE);/* 配置UART2 的发送引脚配置PA9 为复用输出  刷新频率50MHz*/GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);    /* 配置UART2 的接收引脚配置PA10为浮地输入 */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);/* UART2的配置:1.波特率为调用程序指定的输入 baudrate;2. 8位数据           USART_WordLength_8b;3.一个停止位             USART_StopBits_1;4. 无奇偶效验           USART_Parity_No ;5.不使用硬件流控制     USART_HardwareFlowControl_None;6.使能发送和接收功能      USART_Mode_Rx | USART_Mode_Tx;*/USART_InitStructure.USART_BaudRate = baudrate;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_Parity = USART_Parity_No ;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//应用配置到UART2USART_Init(USART2, &USART_InitStructure); USART_ITConfig(USART2, USART_IT_TXE, DISABLE);        USART_ClearFlag(USART2,USART_FLAG_TC);USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);   //使能接收中断//启动UART2USART_Cmd(USART2, ENABLE);U2NVIC_Configuration();
}volatile unsigned char RC_Flag;
//------------------------------------------------------
void USART2_IRQHandler(void)
{unsigned char data;if(USART_GetITStatus(USART2, USART_IT_TXE) != RESET){   /* Write one byte to the transmit data register */USART_SendData(USART2, U2TxBuffer[U2TxCounter++]);                    /* Clear the USART1 transmit interrupt */USART_ClearITPendingBit(USART2, USART_IT_TXE); if(U2TxCounter == U2count){/* Disable the USART1 Transmit interrupt */USART_ITConfig(USART2, USART_IT_TXE, DISABLE);}    }else if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET){data=USART_ReceiveData(USART2);/* Clear the USART1 transmit interrupt */USART_ClearITPendingBit(USART2, USART_IT_RXNE);}
}
//------------------End of File----------------------------

主程序模块

---------硬件上的引脚连接:----------
TTL接口:
PC(USB-TTL)            STM32F103                        JY-901
RX            <-->    PA9(UART1-TXD)
                            PA10(UART1-RXD)    <-->      TX
------------------------------------

---------硬件上的引脚连接:----------
TTL接口:
PC(USB-TTL)         STM32F103                       JY-901
RX          <-->  PA9(UART1-TXD)PA10(UART1-RXD)   <-->      TX
------------------------------------
*/#include "stm32f10x.h"
#include "UARTs.h"
#include "IOI2C.h"
#include "delay.h"
#include "JY901.h"
#include "string.h"struct STime       stcTime;
struct SAcc         stcAcc;
struct SGyro        stcGyro;
struct SAngle   stcAngle;
struct SMag         stcMag;
struct SDStatus stcDStatus;
struct SPress   stcPress;
struct SLonLat  stcLonLat;
struct SGPSV        stcGPSV;//CopeSerialData为串口中断调用函数,串口每收到一个数据,调用一次这个函数。
void CopeSerialData(unsigned char ucData)
{static unsigned char ucRxBuffer[250];static unsigned char ucRxCnt = 0;    ucRxBuffer[ucRxCnt++]=ucData;if (ucRxBuffer[0]!=0x55) //数据头不对,则重新开始寻找0x55数据头{ucRxCnt=0;return;}if (ucRxCnt<11) {return;}//数据不满11个,则返回else{switch(ucRxBuffer[1]){case 0x50:    memcpy(&stcTime,&ucRxBuffer[2],8);break;//memcpy为编译器自带的内存拷贝函数,需引用"string.h",将接收缓冲区的字符拷贝到数据共同体里面,从而实现数据的解析。case 0x51: memcpy(&stcAcc,&ucRxBuffer[2],8);break;case 0x52:   memcpy(&stcGyro,&ucRxBuffer[2],8);break;case 0x53:  memcpy(&stcAngle,&ucRxBuffer[2],8);break;case 0x54: memcpy(&stcMag,&ucRxBuffer[2],8);break;case 0x55:   memcpy(&stcDStatus,&ucRxBuffer[2],8);break;case 0x56:   memcpy(&stcPress,&ucRxBuffer[2],8);break;case 0x57: memcpy(&stcLonLat,&ucRxBuffer[2],8);break;case 0x58:    memcpy(&stcGPSV,&ucRxBuffer[2],8);break;}ucRxCnt=0;}
}int main(void)
{char str[100];SystemInit();    /* 配置系统时钟为72M 使用外部8M晶体+PLL*/ SysTick_init(72,10);      //延时初始化Initial_UART1(9600);delay_ms(1000);//等等JY-91初始化完成?while(1){          delay_ms(500);sprintf(str,"Time:20%d-%d-%d %d:%d:%.3f\r\n",stcTime.ucYear,stcTime.ucMonth,stcTime.ucDay,stcTime.ucHour,stcTime.ucMinute,(float)stcTime.ucSecond+(float)stcTime.usMiliSecond/1000);UART1_Put_String(str);     delay_ms(10);//等待传输完成sprintf(str,"Acc:%.3f %.3f %.3f\r\n",(float)stcAcc.a[0]/32768*16,(float)stcAcc.a[1]/32768*16,(float)stcAcc.a[2]/32768*16);UART1_Put_String(str);delay_ms(10);//等待传输完成sprintf(str,"Gyro:%.3f %.3f %.3f\r\n",(float)stcGyro.w[0]/32768*2000,(float)stcGyro.w[1]/32768*2000,(float)stcGyro.w[2]/32768*2000);UART1_Put_String(str);delay_ms(10);//等待传输完成sprintf(str,"Angle:%.3f %.3f %.3f\r\n",(float)stcAngle.Angle[0]/32768*180,(float)stcAngle.Angle[1]/32768*180,(float)stcAngle.Angle[2]/32768*180);UART1_Put_String(str);delay_ms(10);//等待传输完成sprintf(str,"Mag:%d %d %d\r\n",stcMag.h[0],stcMag.h[1],stcMag.h[2]);UART1_Put_String(str);     delay_ms(10);//等待传输完成sprintf(str,"Pressure:%ld Height%.2f\r\n",stcPress.lPressure,(float)stcPress.lAltitude/100);UART1_Put_String(str);delay_ms(10);//等待传输完成sprintf(str,"DStatus:%d %d %d %d\r\n",stcDStatus.sDStatus[0],stcDStatus.sDStatus[1],stcDStatus.sDStatus[2],stcDStatus.sDStatus[3]);UART1_Put_String(str);delay_ms(10);//等待传输完成sprintf(str,"Longitude:%ldDeg%.5fm Lattitude:%ldDeg%.5fm\r\n",stcLonLat.lLon/10000000,(double)(stcLonLat.lLon % 10000000)/1e5,stcLonLat.lLat/10000000,(double)(stcLonLat.lLat % 10000000)/1e5);UART1_Put_String(str);delay_ms(10);//等待传输完成sprintf(str,"GPSHeight:%.1fm GPSYaw:%.1fDeg GPSV:%.3fkm/h\r\n\r\n",(float)stcGPSV.sGPSHeight/10,(float)stcGPSV.sGPSYaw/10,(float)stcGPSV.lGPSVelocity/1000);UART1_Put_String(str);delay_ms(10);//等待传输完成}//主循环 end }

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

陀螺仪程序---可直接用相关推荐

  1. 聊天没有表情包被嘲讽,程序员直接用python爬取了十万张表情包

    聊天没有表情包被嘲讽,程序员直接用python爬取了十万张表情包 前言 分析页面 具体实现 解析页面 获取网页内容 解析网页内容 文件下载 多线程下载 成果 总结 前言 事情要从几天前说起,我有一个朋 ...

  2. DSP程序定制 F28335 F2812 简易变频器svpwm源码 简易变频器C语言源代码工程文件,直接用ccs3.3以上软件打开

    DSP程序定制 F28335 F2812 简易变频器svpwm源码 简易变频器C语言源代码工程文件,直接用ccs3.3以上软件打开. 包括SVPWM核心代码,有运行频率设置.载波频率(2.5K~20K ...

  3. OMRON CP1H PLC脉冲控制三轴伺服, 码垛机,实际 项目,程序结构清析,有完整的注释,重复功能做成FB功能块,在其它项目可以导出直接用,MCGS触摸屏程序,有电气CAD图纸。

    OMRON CP1H PLC脉冲控制三轴伺服, 码垛机,实际 项目,程序结构清析,有完整的注释,重复功能做成FB功能块,在其它项目可以导出直接用,MCGS触摸屏程序,有电气CAD图纸.

  4. 文件上传 java 完美,vue+java实现文件上传(excel等),会出现跨域问题,直接用form表单提交就不会有问题了(new FormData())...

    vue+java实现文件上传(excel等),会出现跨域问题,直接用form表单提交就不会有问题了(new FormData()) 地址:https://www.cnblogs.com/muscles ...

  5. hibernate mysql autocommit_Hibernate4 中为什么我没有用commit()方法直接用save就存到数据库了?...

    求大神讲解下 Hibernate4 中为什么我没有用commit()方法直接用save就存到数据库了? public class Main { public static void main(Stri ...

  6. java指令导出data文件_直接用 java 命令行动态生成jpg文件 (转)

    直接用 java 命令行动态生成jpg文件 (转)[@more@] /** * jeruGraphics v 1.0 * * 看到一些动态生成图象的例子都是完成的, * 而且很长,觉得不是无论从实用性 ...

  7. C#中使用属性及get,set访问private字段和直接用public修饰字段的对比和理解

    导语 本篇仅作为初学C#的随笔,内容较基础,适合初级水平开发者,浅谈主题中的话题,从两者的相同点,不同点,和如何选三个角度探讨,希望文章能起到抛砖引玉的作用,欢迎补充和纠正. 如果你并不想花费十分钟左 ...

  8. H5 vue-pdf 使用方法 复制粘贴直接用

    H5 vue-pdf 使用方法 复制粘贴直接用 <!-- 如果印章不显示 全局搜索这行代码 然后注释掉 重新打包就可以了 _this3.setFlags(_util.AnnotationFlag ...

  9. FX3U PLC源代码,stm32芯片。 全套硬件,软件源码,可以直接用GX Works2编程直接写入。 带读保护版本

    FX3U PLC源代码,stm32芯片. 全套硬件,软件源码,可以直接用GX Works2编程直接写入. 带读保护版本. 是以太网之前的最高版本. 产品功能描述:用梯形图语言编写应用程序,可以直接使用 ...

最新文章

  1. debugInit.c tomcat启动错误
  2. Java面试题整理,连续四年百度Java岗必问面试题
  3. ROS系统 常用可视化工具的使用
  4. 关于JAVA编译时找不到自定义包的问题
  5. [YTU]_1998( C语言实验——删除指定字符)
  6. Android --- 命名规范
  7. 中石油训练赛 - Bee Problem(dfs+连通块)
  8. 可视化太酷辽!一文了解排序和搜索算法在前端中的应用
  9. cesium js 路径_[CesiumJS]Cesium入门3 – Cesium目录框架结构
  10. L1-052 2018我们要赢 (5 分)—团体程序设计天梯赛
  11. selenium自动化之PO模型
  12. 2020中国云计算公司排名 哪家的云服务器最好用?
  13. InvokeRequired and Invoke
  14. 三种方法解决git拒绝连接问题fatal: unable to access xxxx: Failed to connect to xxxx : Connection refused
  15. 一个正方形截取四分之一后如何四等分
  16. 【社会调研】访谈个案案例分享
  17. 文献阅读 Learning Meta Face Recognition in Unseen Domains 2020 CVPR
  18. 药物研发早期预测细胞毒性的解决方案
  19. 如何查看本机IP地址(ipconfig命令)
  20. rockchip rk3368(px5)车载开发之路1,原生代码系统正常启动

热门文章

  1. linux用户的邮件存在哪里,在Linux系统中收发及查看邮件
  2. 社群团购到底有哪些优势?为什么社群团购很容易打造爆品?
  3. c语言函数大全表格形式,C语言函数大全[表格形式].doc
  4. 四舍五入VS银行家舍入 (四舍六入五取偶)
  5. 由index为timestamp的数据获取股票集合竞价数据
  6. 数据可视化查看2021全国各省份的GDP
  7. 波束赋形技术lms算法在matlab仿真,自适应波束成形算法LMS、RLS、VSSLMS分解
  8. 502 问题怎么排查?
  9. 2023首届大学生算法大赛——补题
  10. WebGL、ThreeJS、BabylonJS、SceneJS和Cesium框架对比及简介