当前位置: 首页 > news >正文

【STM32F1】——9轴姿态模块JY901与串口通信(上)

【STM32F1】——9轴姿态模块JY901与串口通信(上)

一、简介

本篇主要对调试JY901模块的过程进行总结,实现了以下功能。

  1. 串口普通收发:使用STM32F103C8T6的USART2实现9轴姿态模块JY901串口数据的读取,并利用USART1发送到串口助手。

  2. 串口DMA收发:使用STM32F103C8T6的USART2的DMA通道6读取JY901的串口数据,并利用USART1的DMA通道4发送到串口助手。

后续准备从数据的抗扰和稳定性、结合数据进行控制等角度进行更深入的应用探索。

二、JY901介绍

  1. 电压:3.3-5V
  2. 量程:X/Z轴 ±180°, Y轴 ±90°
  3. 通信方式:IIC、UART(默认9600波特率)
  4. 型号区别:JY901S(带温补),JY901B(带气压)
  5. 帧头格式:以角度输出为例,回传数据为11位。格式为:0x55 0x53 RollL RollH PitchL PitchH YawL YawH TL TH SUM

三、JY901的普通串口通信

  1. 接线
    1

  2. 程序简介:使用STM32F103C8T6的USART2实现9轴姿态模块JY901串口数据的读取,并利用USART1发送到串口助手。

  3. 实现思路

    1)配置串口USART1,开启发送中断。
    2)配置串口USART2,开启接收中断。
    3)定义接收数据的结构体。
    4)接收数据完成后,在USART2的中断服务子程序中处理数(根据帧头第二位判断所测的数据属性,然后复制到对应的结构体中)。
    5)进行数据解算,通过printf()调用USART1的发送中断服务子函数,发送数据到串口助手。

  4. 代码解析
    1)定义结构体用于储存接收到的数据

具体含义见JY901_REG.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;
struct SQ       	stcQ;

2)配置串口USART1

void UART1_Init(unsigned long baudrate)
{GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);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);    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);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;USART_Init(USART1, &USART_InitStructure); USART_ITConfig(USART1, USART_IT_TXE, ENABLE);  USART_ClearFlag(USART1,USART_FLAG_TC);USART_Cmd(USART1, ENABLE);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);
}

3)串口USART1中断服务子函数

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); }USART_ClearITPendingBit(USART1,USART_IT_ORE);
}

4)配置串口USART2(JY901初始化)

void JY901_Init(unsigned long baudrate
http://www.lryc.cn/news/479974.html

相关文章:

  • Docker网络概述
  • Vite与Vue Cli的区别与详解
  • 深究JS底层原理
  • 数据分析-41-时间序列预测之机器学习方法XGBoost
  • json转java对象 1.文件读取为String 2.String转为JSONObject 3.JSONObject转为Class
  • 基于卷积神经网络的农作物病虫害识别系统(pytorch框架,python源码)
  • ETLCloud异常问题分析ai功能
  • 【1】 Kafka快速入门-从原理到实践
  • go语言中的map类型详解
  • GBase 8a MPP Cluster V9安装部署
  • 静态库、动态库、framework、xcframework、use_frameworks!的作用、关联核心SDK工程和测试(主)工程、设备CPU架构
  • C++ | Leetcode C++题解之第552题学生出勤记录II
  • 网站架构知识之Ansible(day020)
  • K8s使用nfs
  • 【大数据学习 | kafka高级部分】kafka的kraft集群
  • 爬虫策略规避:Python爬虫的浏览器自动化
  • Hive 实现查询用户连续三天登录记录
  • OceanBase 4.3.3 功能解析:列存副本
  • 2.Python解释器
  • 鸿蒙与团结引擎c#与ts简单交互
  • Any 的原理以及实现
  • SQLI LABS | Less-35 GET-Bypass Add Slashes (we dont need them) Integer Based
  • RNN(循环神经网络)详解
  • 【AI抠图整合包及教程】探索SAM 2:图像与视频分割领域的革新者
  • DevExpress中文教程 - 如何使用AI模型检查HTML编辑中的语法?
  • python包管理工具pip和conda的使用对比
  • Linux案例:DNS服务器配置
  • 【Python】__getitem__()方法
  • 《Atomic Picnic》进不去游戏解决方法
  • 学习日志007--python函数 学完再练习练