【GD32F427开发板试用】利用SPI驱动ADS8354

news2024/11/16 21:03:32

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:STY

前言

本文期望通过板载硬件SPI外加DMA传输的方式来实现对全差分同步采样模数转换器ADS8354的控制,并且将采集数据进行初步脉冲压缩,迎合以下本人正在进行的项目,同时对开发板进行测评。

简易介绍

ADS8354

·首先,对于一款不熟悉的芯片,看一下官方手册的概述,可以得到一些简略信息,如下图所可以的到的信息有:同步采样、差分输入、700KSPS采样率、16位、双路内部参考电压2.5V

·其次,我会关注以下芯片的极限性能,也就是下图所示部分,关于这部分一般会关注电气特性(不画板子就简易了解就好)、时序特性(写代码请重点关注)

**·**关于这块参数为什么要看呢?因为在压榨芯片的极限性能的时候,就需要参照这一部分参数,比如针对“Timing Characteristics: Serial Interface”部分参数(上图并未直接给出),可以得到芯片在“32-CLK, Dual-SDO Mode (CFR.B11 = 0, CFR.B10 = 0, Default)”工作模式下,一个最小时钟周期为41.66ns,也就是24Mhz,诸如此类还有很多,请自行查阅官方手册。

·最后,也是对写代码最为重要的,如下图所示的芯片的寄存器特性以及串行接口,在下文进行分别解读

如上图所示,有三个可以被写入的寄存器分别是CFR、REFDAC\\_A和REFDAC\\_B
**·**REFDAC\\_A和REFDAC\\_B:分别是A路和B路内部基准电压的控制寄存器
**·**CFR:配置寄存器,配置一些初始化参数等

**·**由于在硬件设计上,采用的是外部2.5V基准电压供电、SDOA上输出A路和B路的ADC转换数据,所以如上图所示针对CFR寄存器,应该写入的数值为:0X8600;如果是其他配置,请自行配置。

**·**如上图所示,在进行读取的时候,每一帧数据有48Bit,前16Bit为留给ADC转换数据用,所以数据无意义,中间16Bit为A口数据,最后16Bit为B口数据。

GD32F427评测

·前期准备

1>拿到开发板我,我第一件事做的是下载了其芯片手册,然后跟STM32F427的芯片手册做对比。如下图:

我关注了一下我此次要用的外设SPI1、UART1、DMA等,对比发现其Memory Map是完全兼容的,那么拿以前的F4的工程理论上来说是可以直接替代的。也就可以完全平替STM32了。但理论终究是理论,下面我们来进行相应尝试。

2>写代码之前,需要对相应环境进行搭建,其实步骤并不多,主要是安装相应PACK,资料在极术社区都很完善了,这里就不展开赘述了(安装下图中的PACK)

然后打开MDK➡魔术棒➡Device,看到如下图所示,即代表安装成功

·正式开始

1>采用传统的cubemx帮我们生成一下底层代码,配置如下:

首先,在配置SPI时稍微注意一下,手册里写了是在每个时钟的下降沿读取数据,所以在这里SPI的时钟极性应该为高,时钟相位应该奇数读取(也就是为1),然后时钟分频应该选择大于四分频(此时为22.5Mhz,满足ADS的最大时钟输入);但是,由于本人手中逻辑分析仪最大支持四通道50M采样,为了观察协议,在这里进行了8分频。其次,选用了PD15脚作为CS引脚。写一段测试代码:

然后,用逻辑分析仪抓一下发送时序:

???????
what??
CS引脚拉低无效,中间跟着其他的引脚在跳动????
到了这里,我又去查阅了GD32的数据手册,并且go to define在HAL库中关于GPIO的封装结构体以及他们对应的地址偏移,是否有偏差,花了时间没多久,也就大概一个小时,确认了地址偏移等等都是一致的.那这问题就更大了呀!
没思路,出去吃个饭再回来考虑一下。
继续!观察CS的跳动,它只在CLK跳动的这段时间会发生跳动,很像是引脚之间的串扰,但是不应该呀,十几兆而已。算了再去看看,好吧,接地线松了。浪费一个小时。怪我自己,总有一个国产芯片可能会和ST的cortex-M4系列有差别的先入为主的印象。接地线插紧,再测:

完美!

那接着写一段接收的代码:

一边抓一下读取时序:

然后在debug模式下通过save指令保存内存中读到的ADC数据到本地

用matlab打印一下看一下读到的数据(DDS信号发生器产生的双路正弦波~1Khz、1Vpp、两者相位差为90°),最终结果如图:

可见读取成功,到这里就基本完事了。

补充说明:MDK保存的文件格式为HEX386格式,需要转为bin文件才能用matlab进行plot。

这次测试比我预想的容易的多,对STM32F4系列感觉兼容性非常好,代码基本上可以直接套用,感谢兆易创新!

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

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

相关文章

2.1、进程的定义、组成、组织方式、特征

整体框架 1、进程的定义 程序\color{red}程序程序:就是一个指令序列 早期的计算机(只支持单道\color{red}单道单道程序) 引入多道\color{red}多道多道程序之后: 为了方便操作操作系统管理,完成各个程序并发执行、 引…

Go map 实现原理

Go map 实现原理 go map 源码路径在: src/runtime/map.gogo 源码结构 |– AUTHORS — 文件,官方 Go语言作者列表 |– CONTRIBUTORS — 文件,第三方贡献者列表 |– LICENSE — 文件,Go语言发布授权协议 |– PATENTS — 文件&…

如何解决Prometheus的数据回填问题

去年10月底的时候,我们的监控系统因为一个偶然的问题,出乎意料地发生了重大的故障,这次故障暴露了当前监控系统存在的一下重大隐患。故障背景及现象我们的监控系统基于Thanos构建,基本架构如下(箭头表示数据流向&#…

Docker安装Mysql8.0主从复制

1使用portainer快速创建mysql 2.mysql-master version: 3.3 services:mysql-app:image: mysql:8.0container_name: mysqlrestart: alwaysports:- 3307:3306environment:MYSQL_ROOT_PASSWORD: 123456 # root用户的密码MYSQL_ROOT_HOST: % # 访问权限# MYSQL_USER: test …

[leetcode]刷题--关于位运算的几道题

&#xff08;1&#xff09;位运算的本质&#xff0c;其实是对二进制补码储存形式的修改。 位运算常见的运算符为 <<左移n个位置&#xff08;算数移位&#xff0c;符号位不变&#xff09; >>右移动n个位置&#xff08;采用直接丢弃末尾数字的方法&#xff0c;符号…

Android Raphael使用(专治native 内存泄漏)

1.前期准备 在项目根目录build.gradle中,添加仓库地址&#xff1a; allprojects {repositories {maven { url https://jitpack.io }} }2.案例实践 构建一个新的Library Module&#xff0c;其中build.gradle中添加依赖&#xff1a; dependencies {implementation com.github…

gitlab-runner搭建CI/CD

1. 背景 每次发布代码&#xff0c;需要连接服务器更新代码&#xff0c;进行部署&#xff0c;比较繁琐&#xff0c;浪费时间。方案有jenkins或gitlab-runner。由于代码仓库是gitlab并且只需要自动部署&#xff0c;不需要其他额外功能&#xff0c;这里选择使用gitlab-runner。 …

【React】三.React组件基础学习

目录 React组件介绍 React组件的两种创建方式 使用函数创建组件 函数组件 渲染函数组件 示例 使用类创建组件 抽离为独立的JS文件 步骤 问题记录 React事件处理 事件绑定 记录问题 事件对象 有状态组件和无状态组件 无状态组件&#xff08;木偶组件&#xff09;…

XSS(Cross Site Scripting)攻击简介

环境 Ubuntu 22.04IntelliJ IDEA 2022.1.3JDK 17.0.3.1Spring Boot 3.0.1Firefox 108.0.2 问题和分析 在IntelliJ IDEA中创建Spring Boot项目 test0116 &#xff0c;并选中 Spring Web 依赖。 在 src/main/java 下创建 MyController.java 如下&#xff1a; package com.ex…

Redis缓冲区不会还有人不知道吧?

1 简介 缓冲区&#xff0c;用一块内存空间暂时存放命令数据&#xff0c;以免因 数据和命令的处理速度&#xff1c;发送速度而导致数据丢失和性能问题。但缓冲区的内存空间有限&#xff0c;若持续&#xff1a; 往里写数据速度&#xff1e;从里读数据速度会导致缓冲区需越来越…

ATGM332D-5N卫星导航模块介绍

ATGM332D-5N卫星导航模块简介ATGM332D-5N系列模块是12X16 尺寸的高性能BDS/GNSS 全星座定位导航模块系列的总称。该系列模块产品都是基于中科微第四代低功耗GNSS SOC单芯片—AT6558&#xff0c;支持多种卫星导航系统&#xff0c;包括中国的BDS&#xff08;北斗卫星导航系统&…

BFS的入门与应用

目录 一、前言 二、BFS原理 二、BFS与最短路径 1、最短路径问题用BFS 2、迷宫&#xff08;2019年省赛&#xff0c;填空题&#xff0c;lanqiaoOJ题号602&#xff09; &#xff08;1&#xff09;字典序最小的最短路径 &#xff08;2&#xff09;输出路径的两种方法 三、B…

拉伯证券|今年首批游戏版号发放,机构看好春节行业景气度恢复

2023年第一批游戏版号发放。 昨日晚间&#xff0c;国家新闻出版署发布1月国产网络游戏审批信息&#xff0c;共88款游戏获批&#xff0c;其我国内各大游戏龙头均有所收成&#xff0c;包含腾讯《黎明觉悟&#xff1a;活力》、网易《逆水寒》&#xff08;移动版&#xff09;、完美…

数据治理:数据治理之道-组织机制-敏捷的治理组织

参考《一本书讲透数据治理》、《数据治理》等 组织机制&#xff1a;敏捷的治理组织 数据、组织、软件平台&#xff0c;是企业数字化转型面临的三座大山 数据&#xff1a;数据是企业数字化转型的根本驱动力之一&#xff0c;数字化转型中的企业必须做好数据治理与应用&#xff…

8Manage:分散的软件正在扼杀公司的生产力

在企业领域&#xff0c;数字化不仅仅是指工具能力&#xff0c;而是指用户如何很好地应用他们的知识来做决策&#xff0c;培养关系&#xff0c;建立声誉&#xff0c;以及动员同事、团队。几十年来&#xff0c;企业已经部署了生产力、搜索和协作平台&#xff0c;以提高员工和业务…

使用 tslib 库

tslib 是专门为触摸屏设备所开发的 Linux 应用层函数库&#xff0c;并且是开源。tslib 为触摸屏驱动和应用层之间的适配层&#xff0c; 它把应用程序中读取触摸屏 struct input_event 类型数据&#xff08;这是输入设备上报给应用层的原始数据&#xff09;并进行解析的操作过程…

ceres学习笔记(三)

学习了example中pose_graph_3d的部分&#xff0c;记录一下学习过程。 前言&#xff1a; 翻译一下readme里面的内容&#xff1a; ... 该示例还说明了如何将 Eigen 的几何模块与 Ceres 的自动微分功能结合使用。 为了表示方向&#xff0c;我们将使用 Eigen 的四元数&#xff…

测试开发 | Pytest 结合 Allure 生成测试报告

本文节选自霍格沃玆测试学院测试开发内部教材&#xff0c;进阶学习文末加群&#xff01; 测试报告在项目中是至关重要的角色&#xff0c;一个好的测试报告&#xff1a; 可以体现测试人员的工作量&#xff1b; 开发人员可以从测试报告中了解缺陷的情况&#xff1b; 测试经理可…

锂电产业如何利用视觉检测系统降本增效?

导语&#xff1a;机器视觉检测已在锂电池生产的各个环节中&#xff0c;为产品产量与质量提供可靠保障。维视智造作为锂电池视觉检测系统提供商&#xff0c;为企业提供专业、系统、稳定的锂电行业解决方案&#xff0c;可保证0漏检&#xff0c;确保安全生产&#xff0c;全面提升生…

炫酷 RGB 之.NET nanoFramework 点灯大师

前面介绍了 .NET nanoFramework 入门&#xff0c;本文继续以微雪的 ESP32-S2-Pico 为例介绍 .NET nanoFramework 的开发&#xff1a;控制 ESP32 板载 RGB 灯 和 外接 RGB 灯。内容包含 状态灯的意义、WS2812 、HSV、PWM 等相关知识。 文章目录1. 背景2. 状态灯的意义3. 板载 LE…