24年电赛——自动行驶小车(H题)基于 CCS Theia -陀螺仪 JY60 代码移植到 MSPM0G3507(附代码)
前言
只要搞懂 M0 的代码结构和 CCS 的图形化配置方法,代码移植就会变的很简单。因为本次电赛的需要,正好陀螺仪部分代码的移植是我完成的。(末尾附全部代码)
一、JY60 陀螺仪
JY60特点
1.模块集成高精度的陀螺仪、加速度计,采用高性能的微处理器和先进的动力学解算与卡尔曼动态滤波算法,能够快速求解出模块当前的实时运动姿态。
2.采用先进的数字滤波技术,能有效降低测量噪声,提高测量精度。
3.模块内部集成了姿态解算器,配合动态卡尔曼滤波算法,能够在动态环境下准确输出模块的当前姿态,姿态测量精度0.2°,稳定性极高,性能甚至优于某些专业的倾角仪。
因为此次主要使用的是航向角,下面是航向角的参数:

二、syscfg 配置
我使用的是串口来接收陀螺仪数据,下面是串口的配置。



三、串口接收部分代码
其他代码都直接复制就行,只有串口部分代码需要修改。
UART2.c
// #include "misc.h"
#include "wit_c_sdk.h"
#include "ti_msp_dl_config.h"
#include "stdio.h"
#include "UART2.h"
#include "stdint.h"// // 初始化 UART 引脚和多路复用
// void InitUARTPins(void) {
// DL_GPIO_setDirection(GPIO_UART_BT_RX_PORT, GPIO_UART_BT_RX_PIN, DL_GPIO_INPUT);
// DL_GPIO_setDirection(GPIO_UART_BT_TX_PORT, GPIO_UART_BT_TX_PIN, DL_GPIO_OUTPUT);
// DL_GPIO_setIOMUX(GPIO_UART_BT_RX_PORT, GPIO_UART_BT_RX_PIN, GPIO_UART_BT_IOMUX_RX_FUNC);
// DL_GPIO_setIOMUX(GPIO_UART_BT_TX_PORT, GPIO_UART_BT_TX_PIN, GPIO_UART_BT_IOMUX_TX_FUNC);
// }void Usart2Init(unsigned int uiBaud) {// 配置 UART 引脚和多路复用// InitUARTPins();// // 初始化 UART// DL_UART_init(UART_BT_INST, uiBaud, DL_UART_PARITY_NONE, DL_UART_STOPBITS_ONE, DL_UART_DATABITS_8);// 使能 UART 接收中断// DL_UART_enableInterrupt(UART_BT_INST, DL_UART_MAIN_IIDX_RX);// 使能 UART 中断NVIC_EnableIRQ(UART_BT_INST_INT_IRQN);
}void UART_BT_INST_IRQHandler(void) {uint8_t Res;// 检查是否有接收中断if (DL_UART_getPendingInterrupt(UART_BT_INST) == DL_UART_MAIN_IIDX_RX) {Res = DL_UART_receiveData(UART_BT_INST);WitSerialDataIn(Res);
// DL_UART_clearPendingInterrupt(UART_BT_INST, DL_UART_MAIN_IIDX_RX);}
}void Uart2Send(unsigned char *p_data, unsigned int uiSize) {for (unsigned int i = 0; i < uiSize; i++) {DL_UART_transmitDataBlocking(UART_BT_INST, p_data[i]);}
}
四、其他部分代码
这里主要说名一下 gryo.c 中的获取陀螺仪值的代码。其中 gryo_get() 是获取陀螺仪值。其中fAcc[3], fGyro[3], fAngle[3]分别代表三向加速度,三向角速度与三向角度。
gryo.c
float fAcc[3], fGyro[3], fAngle[3];void gryo_get(){int i;//if(s_cDataUpdate)//{for(i = 0; i < 3; i++){fAcc[i] = sReg[AX+i] / 32768.0f * 16.0f;fGyro[i] = sReg[GX+i] / 32768.0f * 2000.0f;fAngle[i] = sReg[Roll+i] / 32768.0f * 180.0f;}// fAcc[0]=fAcc[0]+sin(fAngle[1]*(M_PI/180));// fAcc[1]=fAcc[1]-sin(fAngle[0]*(M_PI/180));// printf("gyro:%.3f %.3f %.3f\r\n", fGyro[0], fGyro[1], fGyro[2]);// 应用低通滤波器
// for (i = 0; i < 2; i++) // 这里只对X和Y轴进行滤波
// {
// fAccFiltered[i] = alpha * fAcc[i] + (1 - alpha) * fAccFiltered[i];
// fAcc[i]=fAccFiltered[i];
// }
// if(s_cDataUpdate & ACC_UPDATE)
// {
// //printf("acc:X%.3f Y%.3f Z%.3f\r\n", fAcc[0], fAcc[1], fAcc[2]);
// printf("acc:X%.3f Y%.3f\r\n", fAcc[0], fAcc[1]);// s_cDataUpdate &= ~ACC_UPDATE;
// }
// if(s_cDataUpdate & GYRO_UPDATE)
// {
// printf("gyro:%.3f %.3f %.3f\r\n", fGyro[0], fGyro[1], fGyro[2]);
// s_cDataUpdate &= ~GYRO_UPDATE;
// }
// if(s_cDataUpdate & ANGLE_UPDATE)
// {
// printf("angle:Y:%.3f X:%.3f Z:%.3f\r\n", fAngle[0], fAngle[1], fAngle[2]);
// // printf("angle:Y:%.3f\r\n", fAngle[0]);
// s_cDataUpdate &= ~ANGLE_UPDATE;
// }
// if(s_cDataUpdate & MAG_UPDATE)
// {
// printf("mag:%d %d %d\r\n", sReg[HX], sReg[HY], sReg[HZ]);
// s_cDataUpdate &= ~MAG_UPDATE;
// }//}}
主函数调用代码:
#include "ti_msp_dl_config.h"
#include "stdio.h"
#include "string.h"
#include "UART2.h"
#include "wit_c_sdk.h"
#include "gryo.h"
#include "delay.h"int main(void)
{SYSCFG_DL_init();//整体初始化NVIC_ClearPendingIRQ(UART_0_INST_INT_IRQN);//串口打印初始化NVIC_EnableIRQ(UART_0_INST_INT_IRQN);Usart2Init(UART_BT_BAUD_RATE);// Usart2Init(9600);WitInit(WIT_PROTOCOL_NORMAL, 0x50);WitSerialWriteRegister(SensorUartSend);WitRegisterCallBack(SensorDataUpdata);WitDelayMsRegister(Delayms);//AutoScanSensor();printf("nihao\r\n");while (1){// printf("begining\r\n");delay_ms(10);gryo_get();}
}相关文章:
24年电赛——自动行驶小车(H题)基于 CCS Theia -陀螺仪 JY60 代码移植到 MSPM0G3507(附代码)
前言 只要搞懂 M0 的代码结构和 CCS 的图形化配置方法,代码移植就会变的很简单。因为本次电赛的需要,正好陀螺仪部分代码的移植是我完成的。(末尾附全部代码) 一、JY60 陀螺仪 JY60特点 1.模块集成高精度的陀螺仪、加速度计&…...
数组的增删查查改
1、增 1.Cpp #include <iostream> using namespace std; #include "add.h"int main() {//初始化数组int arr[5];//前四个元素为1,2,3,4for (int i 0; i < 4; i){arr[i] i1;}//数组第5个赋值为100arr[4] 100;for (int…...
设计模式——动态代理
设计模式——动态代理 动态代理的基本概念动态代理的实现步骤总结 在Java中,动态代理是一种强大的机制,它允许在运行时创建一个代理对象,这个代理对象可以代表另一个实际对象,它允许你在不直接操作原始对象的情况下,通…...
vue(element-ui组件) 的this.$notify的具体使用
getNotify() {this.noClose();let message "";message this.itemData.map((ele) > {const text "任务" ele.title "新增" ele.num "条言论";return this.$createElement("el-tooltip",{props: {content: text,pla…...
c++ - 模拟实现set、map
文章目录 前言一、set模拟实现二、map模拟实现 前言 在C标准库中,std::set 和 std::map都是非常常用的容器,它们提供了基于键值对的存储和快速查找能力。然而,关于它们的底层实现,C标准并没有强制规定具体的数据结构,只…...
计算机网络-PIM协议基础概念
一、PIM基础概念 组播网络回顾: 组播网络从网络结构上大体可以分为三个部分: 源端网络:将组播源产生的组播数据发送至组播网络。 组播转发网络:形成无环的组播转发路径,该转发路径也被称为组播分发树(Multi…...
优化PyCharm:让IDE响应速度飞起来
优化PyCharm:让IDE响应速度飞起来 PyCharm,作为一款功能强大的集成开发环境(IDE),在提供丰富功能的同时,有时也会出现响应慢的问题。这不仅影响开发效率,还可能打击开发者的积极性。本文将详细…...
对象转化为String,String转化为对象
title: 对象转化为string,string转化为对象 date: 2024-08-02 11:50:40 tags: javascript const obj { uname:haha, age:18,gender:女} //将对象转换成string JSON.stringify(obj) //取成一个对象,将字符串传化为对象 JSON.parse(obj)常用领域在localst…...
SolverLearner:提升大模型在高度归纳推理的复杂任务性能,使其能够在较少的人为干预下自主学习和适应
SolverLearner:提升大模型在高度归纳推理的复杂任务性能,使其能够在较少的人为干预下自主学习和适应 提出背景归纳推理(Inductive Reasoning)演绎推理(Deductive Reasoning)反事实推理(Counterf…...
PHP智能问诊导诊平台-计算机毕业设计源码75056
摘 要 智能问诊导诊平台作为一种智能化医疗服务工具,利用PHP语言开发,旨在为用户提供便捷的在线问诊和导诊服务。该平台集成了智能算法和医疗数据,实现了智能化的病情诊断和治疗建议,帮助用户更快速地获取医疗信息和建议。用户可…...
数据结构初阶(c语言)-排序算法
数据结构初阶我们需要了解掌握的几种排序算法(除了直接选择排序,这个原因我们后面介绍的时候会解释)如下: 其中的堆排序与冒泡排序我们在之前的文章中已经详细介绍过并对堆排序进行了一定的复杂度分析,所以这里我们不再过多介绍。 一&#x…...
网络云相册实现--nodejs后端+vue3前端
目录 主页面 功能简介 系统简介 api 数据库表结构 代码目录 运行命令 主要代码 server apis.js encry.js mysql.js upload.js client3 index.js 完整代码 主页面 功能简介 多用户系统,用户可以在系统中注册、登录及管理自己的账号、相册及照片。 每…...
【JS】Object.defineProperty与Proxy
一、Object.defineProperty 这里只是简单描述,具体请看另一篇文章:Object.defineProperty。 Object.defineProperty 是 JavaScript 中用于定义或修改对象属性的功能强大的方法。它可以精确地控制属性的行为,如是否可枚举、可配置、可写等。…...
《计算机网络》(第8版)第8章 互联网上的音频/视频服务 复习笔记
第 8 章 互联网上的音频/视频服务 一、概述 1 多媒体信息的特点 多媒体信息(包括声音和图像信息)最主要的两个特点如下: (1)多媒体信息的信息量往往很大; (2)在传输多媒体数据时&a…...
linux进程控制——进程替换——exec函数接口
前言: 本节内容进入linux进程控制板块的最后一个知识点——进程替换。 通过本板块的学习, 我们了解了进程的基本控制方法——进程创建, 进程退出, 进程终止, 进程替换。 进程控制章节和上一节进程概念板块都是在谈进程…...
Apache解析漏洞~CVE-2017-15715漏洞分析
Apache解析漏洞 漏洞原理 # Apache HTTPD 支持一个文件拥有多个后缀,并为不同后缀执行不同的指令。比如如下配置文件: AddType text/html .html AddLanguage zh-CN .cn# 其给 .html 后缀增加了 media-type ,值为 text/html ;给 …...
Xilinx管脚验证流程及常见问题
1 流程 1.1 新建I/O Planning Project I/O Planning Project中可以不需要RTL的top层.v代码,仅图形化界面即可配置管脚约束XDC文件的生成: Create I/O Ports: 导出XDC文件和自动生成的top_interface.v文件: 1.2 新建test Project …...
格雷厄姆的《聪明的投资者》被誉为“投资圣经”
本杰明格雷厄姆的《聪明的投资者》(The Intelligent Investor: A Book of Practical Counsel)是投资领域的一部经典之作,被誉为“投资圣经”。以下是对该书的详细解析: 一、书籍基本信息 书名:《聪明的投资者》&…...
TypeScript声明文件
TypeScript声明文件 在JavaScript的生态系统中,随着项目的复杂度和规模不断增加,开发者对于类型安全和代码质量的追求也日益增长。TypeScript,作为JavaScript的一个超集,通过添加静态类型检查和ES6等新特性支持,极大地…...
.NET_WPF_使用Livecharts数据绑定图表
相关概念 LiveCharts 是一个开源的图表库,适用于多种 .NET 平台,包括 WPF、UWP、WinForms 等。LiveCharts 通过数据绑定与 MVVM 模式兼容,使得视图模型可以直接控制图表的显示,无需直接操作 UI 元素。这使得代码更加模块化&#x…...
易连EDI-EasyLink大文件传输测试报告
一、引言 在企业级数据交换场景中,大文件传输的稳定性和效率始终是核心关注点。随着供应链协同深化,企业之间在公网进行交换的数据早已超越传统订单、发票等结构化短报文,逐步扩展到:产品主数据(含高清图片/3D模型&am…...
告别图形界面:在Linux终端中高效管理百度网盘文件的完整指南
1. 为什么需要命令行管理百度网盘? 很多开发者都遇到过这样的场景:远程连接到Linux服务器时,需要快速上传日志文件到网盘,或者从网盘下载数据集到服务器。传统做法是先把文件下载到本地电脑,再用SFTP工具上传到服务器—…...
基于GitHub Actions打造自动化工作流:测试、构建、部署
从手工到自动化的测试交付变革在软件研发流程中,测试从来不是孤立环节。每一次代码提交,都可能触发一轮新的构建、部署与验证。传统模式下,测试人员往往需要等待开发手动打包、手动部署到测试环境,再通过人工触发或定时执行测试脚…...
Instill Core:一站式AI应用构建平台,从数据处理到模型部署全流程实战
1. 项目概述:一站式AI应用构建平台如果你正在为如何将一堆杂乱无章的文档、图片、音频视频数据,转化为可供AI模型直接“食用”的格式而头疼,或者厌倦了在模型部署、API编排和数据处理工具之间反复横跳,那么Instill Core的出现&…...
Arm CoreSight TPIU-M调试架构与寄存器配置详解
1. Arm CoreSight TPIU-M架构概述 在嵌入式系统调试领域,Arm CoreSight架构提供了一套完整的调试与跟踪解决方案。作为该架构中的关键组件,Trace Port Interface Unit-Modified(TPIU-M)承担着将处理器内部跟踪数据输出到外部调试工…...
模拟仿真技术在现代集成电路设计中的挑战与解决方案
1. 模拟仿真技术面临的现代挑战在当今集成电路设计领域,模拟仿真技术正面临前所未有的挑战。随着工艺节点从130nm一路演进到15nm甚至更小尺寸,设计复杂度呈指数级增长。我曾参与过多个采用28nm工艺的混合信号芯片项目,深刻体会到传统SPICE仿真…...
RedwoodJS执行器:命令执行与进程管理的终极指南
RedwoodJS执行器:命令执行与进程管理的终极指南 【免费下载链接】redwood RedwoodGraphQL 项目地址: https://gitcode.com/gh_mirrors/re/redwood RedwoodJS是一个功能强大的全栈JavaScript框架,它提供了一套完整的工具链来简化现代web应用的开发…...
终极开源语音AI工具包:Sherpa-Onnx一站式解决方案
终极开源语音AI工具包:Sherpa-Onnx一站式解决方案 【免费下载链接】sherpa-onnx Speech-to-text, text-to-speech, speaker diarization, speech enhancement, source separation, and VAD using next-gen Kaldi with onnxruntime without Internet connection. Sup…...
凌晨还在改论文?这些降重黑科技帮你一键通关
凌晨对着电脑屏幕改论文,那种既疲惫又焦虑的感觉,经历过的人都懂。好在现在的降重工具已经不只是“替换同义词”那么简单了,像 毕业之家 和 PaperRed 这两款主流工具,各自走了完全不同的技术路线,可以根据你的痛点来选…...
spawnfile:轻量级进程编排工具,提升本地开发与测试效率
1. 项目概述:一个被低估的进程管理利器如果你在Linux或macOS环境下做过开发,尤其是需要频繁启动、停止、监控一堆后台服务(比如微服务架构下的多个组件),那你一定对进程管理工具不陌生。从最基础的nohup加&&#x…...
