STM32:GPIO模拟SPI驱动ADS8361

ADS8361是TI公司开发的一款模拟量输入芯片。ADS8361有四种工作模式,本文主要针对模式三进行通信驱动。官方方案使用两路SPI来通信,一路SPI Master,一路SPI Slave。我在使用STM32主控芯片的两路SPI进行通信的时候,发现只有SPI Master这路可以正常工作。Slave一直无法接收到数据。估计是两路SPI同时通信会有问题。所以使用了GPIO模拟SPI来驱动ADS8361。

硬件系统接线示意图:

模式三通信时序图:

 

 下面是驱动程序:

/*Global variables*/
float Ain1, Ain2 , Ain3;static float Calculate_Volt_By_SPI_Data(uint8_t* data)
{uint32_t temp1, temp2, temp3,  temp4;temp1 = data[0] & 0X1F;temp2 = data[1];temp3 = data[2] >> 5;temp4 = temp1 * 2048 + temp2 * 8 + temp3;if(temp4 >= 0x8000){temp4 -= 0x8000;}else{temp4 += 0x8000;}return 10.0 - (float)temp4/65535*20;
}static void Monitor_AIN_Level(void)
{uint8_t SPI1_RD[3] = {0x00, 0x00, 0x00};uint8_t SPI2_RD[3] = {0x00, 0x00, 0x00};uint8_t Invalid_ARR[3] = {0x00, 0x00, 0x00};for(int i = 0; i < 20; i++){HAL_GPIO_WritePin(SPI1_SCK_GPIO_Port, SPI1_SCK_Pin, GPIO_PIN_SET);if(i == 0){HAL_GPIO_WritePin(SPI1_MOSI_GPIO_Port, SPI1_MOSI_Pin, GPIO_PIN_SET);}else if(i == 1){HAL_GPIO_WritePin(SPI1_MOSI_GPIO_Port, SPI1_MOSI_Pin, GPIO_PIN_RESET);}delay_us(1);HAL_GPIO_WritePin(SPI1_SCK_GPIO_Port, SPI1_SCK_Pin, GPIO_PIN_RESET);if(HAL_GPIO_ReadPin(SPI1_MISO_GPIO_Port, SPI1_MISO_Pin) == GPIO_PIN_SET){SPI1_RD[i/8] += (1 << (7 - (i % 8)));}if(HAL_GPIO_ReadPin(SPI2_MOSI_GPIO_Port, SPI2_MOSI_Pin) == GPIO_PIN_SET){SPI2_RD[i/8] += (1 << (7 - (i % 8)));}delay_us(1);}HAL_GPIO_WritePin(SPI1_SCK_GPIO_Port, SPI1_SCK_Pin, GPIO_PIN_RESET);if(memcmp(SPI1_RD, Invalid_ARR, sizeof(SPI1_RD)) == 0 ||  memcmp(SPI2_RD, Invalid_ARR, sizeof(SPI2_RD)) == 0) {return;}if(SPI1_RD[0] >= 0x60 || SPI2_RD[0] >= 0x60){return;}if((SPI1_RD[0] & 0x40) > 0) Ain2 = Calculate_Volt_By_SPI_Data(SPI1_RD);else Ain1 = Calculate_Volt_By_SPI_Data(SPI1_RD);if((SPI2_RD[0] & 0x40) == 0) Ain3 = Calculate_Volt_By_SPI_Data(SPI2_RD);//Usart_Printf("Ain1: %f\n", Ain1);//Usart_Printf("Ain2: %f\n", Ain2);//Usart_Printf("Ain3: %f\n", Ain3);
}

 三路模拟量输入通道的测试结果:

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

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

相关文章

ES6 class类的静态方法static有什么用

在项目中&#xff0c;工具类的封装经常使用静态方法。 // amap.jsimport AMapLoader from amap/amap-jsapi-loader; import { promiseLock } from triascloud/utils; /*** 高德地图初始化工具*/ class AMapHelper {static getAMap window.AMap? window.AMap: promiseLock(AM…

【1】MongoDB的安装以及连接

今天是2023年10月11日&#xff0c;MongoDB最新版本是7.0.2 最近闲着没事学习一下MongoDB这个NoSQL数据库&#xff0c;有时间就顺手记录一下我学习的笔记吧~ 学习笔记来自黑马程序员《MongoDB基础入门到高级进阶&#xff0c;一套搞定mongodb》 配套资料&#xff1a;点此资料链接…

AMEYA360分享:村田电子搭载了Onsemi公司IoT设备专用IC的新Bluetooth® Low Energy模块开始量产

近年来&#xff0c;所有远程监控、远程控制的用例均要求具备可无线连接的电池驱动IoT设备&#xff0c;而长寿命电池与安全的数据通信功能是其关键。为此&#xff0c;在IoT边缘设备的设计方面&#xff0c;最大的课题是要提高功率效率和安全性。 Type 2EG由于无线与内置微处理器两…

vscode 连接ubuntu git下载缓慢

在ubuntu20.04下载&#xff1a; git clone https://github.com/introlab/rtabmap.git src/rtabmap 挂掉情况 export https_proxyhttp://10.10.10.176:7890export http_proxyhttp://10.10.10.176:7890 其中 10.10.10.176是我本机的ip地址&#xff0c;7890是我的代理后几位 如…

idea compile项目正常,启动项目的时候build失败,报“找不到符号”等问题

1、首先往上找&#xff0c;看能不能找到如下报错信息 You aren’t using a compiler supported by lombok, so lombok will not work and has been disabled. 2、这种问题属于lombok编译失败导致&#xff0c;可能原因是依赖jar包没有更新到最新版本 3、解决方案 1&#xff09…

什么是强缓存、协商缓存?

为了减少资源请求次数,加快资源访问速度,浏览器会对资源文件如图片、css文件、js文件等进行缓存,而浏览器缓存策略又分为强缓存和协商缓存,什么是强缓存?什么是协商缓存?两者之间的区别又是什么?接下来本文就带大家深入了解这方面的知识。 强缓存 所谓强缓存,可以理解…

使用postman 调用 Webservice 接口

1. 先在浏览器地址栏 访问你的webService地址 地址格式: http://127.0.0.1:8092/xxxx/ws(这个自己的决定)/xxxxXccv?wsdl 2. post man POST 访问wwebService接口 地址格式: http://127.0.0.1:8092/xxxx/ws(这个自己的决定)/xxxxXccv <soapenv:Envelope xmlns:soapenv…

Excel 快速分析

文章目录 格式化图表汇总计数 表超级表 迷你图 快捷键: Ctrl Q 先选中数据, 再按快捷键或快速分析按钮. 格式化 查看规则: 前提是先在表中添加某种规则, 再全选该表, 这样在查看规则时才会显示出这个规则. 图表 汇总 计数 表 超级表 迷你图

Android 项目增加 res配置

main.res.srcDirs "src/main/res_test" build->android->sourceSets

Zabbix第二部分:基于Proxy分布式部署实现Web监控和Zabbix HA集群的搭建

代理和高可用 一、基于zabbix-proxy的分布式监控1.1 分布式监控的作用1.2 数据流向1.3 构成组件 二、部署zabbix代理服务器Step1 前置准备Step2 设置 zabbix 的下载源&#xff0c;安装 zabbix-proxyStep3 部署数据库并将zabbix相关文件导入Step4 修改zabbix-proxy的配置文件&am…

修改ubuntu服务器fs文件最大打开数

起因 在对项目进行压测的时候&#xff0c;请求异常 java.net.SocketException: socket closed&#xff0c;查看nginx代理服务器的日志。tail -f -n500 /var/log/nginx/error.log 显示 文件打开数太多socket() failed (24: Too many open files) while connecting to upstream …

APK大小缩小65%,内存减少70%:如何优化Android App

APK大小缩小65&#xff05;&#xff0c;内存减少70&#xff05;&#xff1a;如何优化Android App 我们一直在努力为我们的Android应用程序构建MVP产品。在开发MVP产品后&#xff0c;我们发现需要进行应用程序优化以提高性能。经过分析&#xff0c;我们发现了以下可以改进的应用…