关于沃进科技无线模块demo软件移植问题

文章目录

    • 一、无线模块开发测试准备
    • 二、开发板硬件
    • 三、开发板默认功能
      • 上电默认界面
      • 功能选择界面
        • 数据包发送界面
        • 数据包接收显示界面
        • 射频性能测试界面
        • 参数设置界面
        • 固件信息显示界面
    • 四、软件开发
      • 软件SDK框图
        • 1、射频硬件驱动(详见./radio/myRadio_gpio.c)
        • 2、无线底层驱动API(详见./radio/其他.c)
        • 3、无线操作API(详见./radio/myRadio.c)
      • 软件移植
      • 软件架构说明

一、无线模块开发测试准备

  • 开发板:2套,包含主板、模块转接板、无线模块
    • 用于做收发测试
    • 默认出厂烧录 adapterBoardDriver_xxxxxxxxxxxxxxx工程的固件
  • 模块转接板:模块转接板可以焊接不同型号的无线模块,然后通过金手指与开发板连接
  • 开发软件包:
    • adapterBoardDriver_xxxxxxxxxxxxxxx,带屏幕显示的工程,可以选择更多的功能操作
    • VGKitBoard_xxxxxxx_easyDemo_V01,不带屏幕显示,收发测试有LED指示灯指示
    • radio,无线模块驱动库
      在这里插入图片描述

二、开发板硬件

供电:

  • 支持3种供电方式:可以通过拨动开关选择
    1. 3节5号电池
    2. USB数据线供电
    3. 2.54端子外接

显示屏: JLX19296G-382

按键: 5个功能操作按键,1个主控复位按键

  1. S1按键:向上移动光标
  2. S3按键:向下移动光标
  3. S2按键:返回上一个界面
  4. S4按键:预留
  5. S5按键:进入下一个界面,设置确定,开始
  6. RST按键:主控复位

金手指连接器P1: PCIE连接器52PINH5.2
可以通过主板上的排针选择输出到转接板的供电

USB座子P7: Micro-B座子

  • 供电
  • 串口转USB:连接电脑,可通过串口进行无线数据收发固件更新升级(按住S5按键上电即可进入固件升级模式)

SWD烧录接口P5: 可以接J-link仿真器、DAP仿真器或其他烧录器

三、开发板默认功能

  开发板出厂默认烧录带屏幕显示的工程的固件,用户拿到开发板后可以进行无线模块的收发测试,可以设置不同的频点信道、发射功率、无线波特率等。

上电默认界面

功能选择界面

数据包发送界面
数据包接收显示界面
射频性能测试界面
参数设置界面
固件信息显示界面

四、软件开发

软件SDK框图

在这里插入图片描述
  根据框图可知,与无线操作有关的软件主要集中在无线操作API无线底层驱动API射频硬件驱动,只要熟悉了这3个部分,无线应用的开发就可以如鱼得水了,SDK里的其他部分都是为了项目的功能实现而来的,需要根据不同的MCU平台和项目需求来实现和调用。
接下来详细介绍下这3部分的软件实现:

1、射频硬件驱动(详见./radio/myRadio_gpio.c)

  大部分的无线模块要想运行起来都是通过SPI接口驱动,SPI接口又分3线和4线,模块操作的时候基本是通过操作寄存器,所以对于SPI接口,只需要把SPI的字节操作接口封装好,对于寄存器操作来说3线或者4线基本没有区别,比如台湾笙科的A7169支持3线和4线SPI驱动,如果有省IO口的需求可以在3线和4线SPI选择方面做优化。
  射频硬件驱动操作一般包括:SPI接口初始化无线响应触发中断IRQ信号辅助IO(比如磐启的PAN3020有模式控制脚CE,CMOSTEK的CMT2300A有内存访问片选脚CSB和FCSB)

SPI接口初始化 注意事项:

  • 数据长度(DataSize):一般是8bit
  • 极性(Clock_Polarity):极性是指SPI的时钟脚clk空闲时的电平,是低电平还是高电平,这个每个无线模块的要求可能会不一样
  • 边沿(Clock_Phase):即是在clk的上升沿还是下降沿收发数据
  • 片选(Slave_Select_management):一般如果是使用硬件SPI的时候要特别注意。由于SPI通讯是一种总线通讯,即总线上可以并联多个SPI设备,所以可以将多个无线模块的spi引脚并联接在一起,然后通过片选脚选择不同的模块进行操作,这时每个模块的片选择都要独立控制,MISO、MOSI、CLK这三个脚可以都并联接一起。

无线响应触发中断IRQ信号 注意事项:
  一般的无线模块都有一个引脚用来做一些状态响应的中断信号,虽然有些无线模块可以通过寄存器查询的方式查询状态响应,但是这种做法是不够明智的,特别是在接收模式下,频繁操作SPI会影响无线的底噪,对于无线通讯来说这是很致命的,通讯距离会大打折扣。
  这个信号可以通过外部中断来接收或者查看电平的方式。比如发送数据时,发送完成或者发送出错模块都会通过这脚输出一个电平翻转信号出来,知道用户操作了SPI或者清除相关中断寄存器。翻转为高电平或者低电平可查看对应的芯片引脚说明。

辅助IO 注意事项:

2、无线底层驱动API(详见./radio/其他.c)

  这部分代码一般是基于SPI驱动封装一些无线模块的寄存器操作(比如寄存器的读写)和一些无线模块的基本功能操作(比如射频寄存器的初始化、PLL校准等),这部分驱动基本是要射频芯片原厂来提供,一颗无线模块性能的好坏,7分看原厂提供的这部分SDK的优化程度。

3、无线操作API(详见./radio/myRadio.c)

  这部分API是同时对接应用层和底层驱动层用的,可以说是起到承上启下的作用,更是为了方便应用层兼容不同厂家的射频芯片的驱动。因为每个芯片厂家提供驱动的封装都基本不一样,所以封装这一层API是为了给用户提供更好的API操作,统一应用层的无线操作API

软件移植

  对于单片机嵌入式开发,每个项目的开发环境都不尽相同,这时要想模块在对应的项目平台上跑起来,就需要将相应的驱动移植过来

软件架构说明

..\adapterBoardDriver_xxxxxxxxxxxxxxx_Vxx
├──app \\常用应用模块封装
|  └──
├──core    \\MCU内核文件
|  └──
├──STM32F10x_FWLib \\MCU官方库函数└──
├──image   \\md文件显示用的图片
|  └──
├──keil_v5 \\keil编译器工程文件,包含编译生成的HEX文件
|  └──Object  \\编译生成的HEX文件在此文件夹
├──peripheral  \\项目用到的MCU外设
|  └──
├──project \\项目的主函数和GPIO定义包含文件
|  └──main.c
├──radio   \\射频底层驱动文件
|  ├──myRadio_gpio.c  \\射频驱动接口硬件初始化
|  └──myRadio.c   \\为无线应用通用封装API
|  └──其他.c   \\为无线底层封装API

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/819485.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

51单片机实验04 -数码管的动态显示实验

目录 一、实验目的 二、实验内容 三、实验原理 四、实验方法 五,实验效果及代码 1,效果 2,代码 六,课后习题 1,使用定时器T0的中断函数1 从999999~0计时 1)效果 2)代码 2&#xff0c…

配置linux的oracle 21c启停服务

一、配置启停 1、使用root用户登陆 su - root 2、修改oratab文件 修改oratab文件,将红框里面的N改为“Y”,使启停脚本能够生效 vi /etc/oratab 3、验证 配置好后就能够使用 dbshut 停止服务 和 dbstart 启动服务 了 2.1启动服务 su - oracle dbstart…

什么是线程?线程和进程谁更弔?

第一个参数是所创建进程的pid。 第二个是线程的属性。 第三个参数是返回值为void*&#xff0c;参数也为void*的函数指针。 第四个参数是给第三个参数的参数&#xff0c;也就是给给函数传参。 #include<iostream> #include<pthread.h> #include<unistd.h>…

折叠面板组件(vue)

代码 <template><div class"collapse-info"><div class"collapse-title"><div class"title-left">{{ title }}</div><div click"changeHide"> <Button size"small" v-if"sho…

生产计划和排单管理怎么做

阅读本文&#xff0c;你将了解到&#xff1a;1、企业是如何制定生产计划和进行排单管理&#xff1f; 2.企业在执行生产计划和进行排单管理过程中会遇到那些问题&#xff1f; 3.企业如何高效利用工具去解决问题&#xff1f; 一、生产计划和排单管理是什么 1.生产计划和排单管理…

【uniapp】【uview2.0】【u-sticky】Sticky 吸顶

把pages.json文件中的 “navigationStyle"设置为"custom”, 出现的问题是&#xff0c;莫名奇妙多了个 一个高度 解决方法 /* 使用CSS的sticky定位 */ .sticky {/* #ifdef H5 */ position: -webkit-sticky;position: sticky;top: 0; /* 设置距顶部的距离 */z-ind…

[Python开发问题] Selenium ERROR: Unable to find a matching set of capabilities

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

在Spring Boot实战中碰到的拦截器与过滤器是什么?

在Spring Boot实战中&#xff0c;拦截器&#xff08;Interceptors&#xff09;和过滤器&#xff08;Filters&#xff09;是两个常用的概念&#xff0c;它们用于在应用程序中实现一些通用的逻辑&#xff0c;如日志记录、权限验证、请求参数处理等。虽然它们都可以用于对请求进行…

最大子树和(遇到的题)

题目是给出一个树&#xff0c;求其中最大的权值块 题解&#xff1a; #include <bits/stdc.h> using namespace std; const int N1e59; int dp[N]; //dp[i]表示第i结点为根最大权值 int w[N]; //记录每个结点的权值 int n; //点的数量 int t; //样例个数 …

Ubuntu安装VMVare Workstation pro 17.5.1

由于需要装Kali&#xff0c;我电脑是Ubuntu单系统&#xff0c;所以只能使用linux版本的虚拟机&#xff0c;通过这种方式来安装虚拟机和Kali镜像。 参考CSDN博客资料&#xff1a;https://blog.csdn.net/xiaochong0302/article/details/127420124 github代码资料&#xff1a;vm…

程序运行在 STM32H750 的外扩 FLASH 上两小时后死机

1. 问题现象 客户使用 STM32H750VBT6&#xff0c;通过 QSPI 外扩了一个 4M 的 NOR FLASH&#xff0c;采用memory map 模式。当程序跳转运行到外设 FLASH 后&#xff0c;大约两个小时后程序死机。 客户使用的 IDE 是 KEIL&#xff0c;此问题可以固定重现。 在 KEIL 调试模式下…

百货商场用户画像描绘and价值分析(下)

目录 内容概述数据说明技术点主要内容4 会员用户画像和特征字段创造4.1 构建会员用户基本特征标签4.2 会员用户词云分析 5 会员用户细分和营销方案制定5.1 会员用户的聚类分析及可视化5.2 对会员用户进行精细划分并分析不同群体带来的价值差异 内容概述 本项目内容主要是基于P…

Springboot+Vue项目-基于Java+MySQL的免税商品优选购物商城系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

【Qt】常用控件(LCD Number/进度条/日历)

需要云服务器等云产品来学习Linux可以移步/-->腾讯云<--/官网&#xff0c;轻量型云服务器低至112元/年&#xff0c;新用户首次下单享超低折扣。 目录 一、LCD Number(LCD显示器) 一个倒计时程序 二、ProgressBar(进度条) 1、创建一个进度条&#xff0c;100ms进度增加…

✌粤嵌—2024/3/14—判断子序列

代码实现&#xff1a; 方法一&#xff1a;一次遍历 bool isSubsequence(char *s, char *t) {if (strlen(s) 0) {return true;}int i 0;for (int j 0; j < strlen(t); j) {if (s[i] t[j]) {i;}if (i strlen(s)) {return true;}}return false; } 方法二&#xff1a;动态规…

5.2 mybatis之autoMappingBehavior作用

文章目录 1. NONE关闭自动映射2. PARTIAL非嵌套结果映射3. FULL全自动映射 众所周知mybatis中标签< resultMap >是用来处理数据库库字段与java对象属性映射的。通常java对象属性&#xff08;驼峰格式&#xff09;与数据库表字段&#xff08;下划线形式&#xff09;是一 一…

基于SSM项目个人健康信息管理系统

采用技术 基于SSM项目个人健康信息管理系统的设计与实现~ 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringMVCMyBatis 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 页面展示效果 用户端 用户首页 健康知识 用户注册 医院推荐信息 系统概要…

【LeetCode热题100】【矩阵】螺旋矩阵

题目链接&#xff1a;54. 螺旋矩阵 - 力扣&#xff08;LeetCode&#xff09; 先走外面的圈再走里面的圈&#xff0c;可以用递归来解决&#xff0c;对于要走的一个圈&#xff0c;由四个角决定&#xff0c;其实是三个数&#xff0c;&#xff08;0&#xff0c;0&#xff09;&…

Vue.js前端开发零基础教学(五)

目录 4.1 动态组件 4.1.1 定义动态组件 4.1.2 利用KeepAlive组件实现组件缓存 4.1.3 组件缓存相关的生命周期函数 4.1.4 KeepAlive组件的常用属性 4.2 插槽 4.2.1 什么是插槽 ​编辑 4.2.2 具名插槽 4.2.3 作用域插槽 4.3 自定义指令 4.3.1 什么是自定义指令…

使用美化方法设计嵌入的子窗体(三)

使用美化方法设计嵌入的子窗体 分析效果图的实现 效果图&#xff1a; 新建 Windows 窗体 新窗体命名&#xff1a;FrmAddProduct.cs修改窗体的 Text 属性&#xff1a;新增商品修改窗体的位置&#xff1a;StartPosition&#xff1a;CenterScreen窗体的无边框设计&#xff1a…