GD32F303RET6读取SGM58031电压值

1、SGM58031芯片详解

(1)SGM58031是一款低功耗,16位精度,delta-sigma (ΔΣ)模数转换器(ADC)。它从3V到5.5V供电。


(2)SGM58031包含一个片上参考和振荡器。它有一个I2C兼容接口,可以选择四个I2C从地址。

(3)SGM58031有两种工作模式:单次发射模式和连续转换模式。
在单次触发模式下,ADC执行一次转换并给出完整的固定数据,无需丢弃任何数据。一旦ADC完成转换,它就会进入低功率关闭模式。
在连续模式中,ADC在先前的转换完成后自动开始新的转换。给出了每一个转换结果。数据速率等于配置的数据速率。

(4)SGM58031的引脚说明

(5)参考电压

2、SGM58031工程代码编写

iic.c

#include "iic.h"#define I2C1_SLAVE_ADDRESS7 0x90void i2c_config(void)
{/* enable GPIOB clock */rcu_periph_clock_enable(RCU_GPIOB);/* enable I2C1 clock */rcu_periph_clock_enable(RCU_I2C1);rcu_periph_clock_enable(RCU_AF);/* connect PB10 to I2C1_SCL *//* connect PB11 to I2C1_SDA */gpio_init(GPIOB, GPIO_MODE_AF_OD, GPIO_OSPEED_50MHZ,  GPIO_PIN_10 | GPIO_PIN_11);i2c_clock_config(I2C1, 100000, I2C_DTCY_2);i2c_mode_addr_config(I2C1, I2C_I2CMODE_ENABLE, I2C_ADDFORMAT_7BITS, I2C1_SLAVE_ADDRESS7);i2c_enable(I2C1);i2c_ack_config(I2C1, I2C_ACK_ENABLE);
}/* I2C写函数 */
void i2c_write(uint8_t reg_addr, uint16_t send_data)
{uint8_t high_val=0x00;uint8_t low_val=0x00;low_val = send_data&0x00ff;				high_val = (send_data>>8)&0x00ff;//写开始时序/* wait until i2c bus is idle */while(i2c_flag_get(I2C1, I2C_FLAG_I2CBSY));/* send a start condition to I2C bus */i2c_start_on_bus(I2C1);/* wait until SBSEND bit is set */while(!i2c_flag_get(I2C1, I2C_FLAG_SBSEND));    /* send slave address to I2C bus *///写从机地址时序i2c_master_addressing(I2C1, I2C1_SLAVE_ADDRESS7, I2C_TRANSMITTER);/* wait until ADDSEND bit is set */while(!i2c_flag_get(I2C1, I2C_FLAG_ADDSEND));/* clear ADDSEND bit */i2c_flag_clear(I2C1, I2C_FLAG_ADDSEND);/* wait until the transmit data buffer is empty */while(!i2c_flag_get(I2C1, I2C_FLAG_TBE));//写寄存器地址时序i2c_data_transmit(I2C1, reg_addr);/* wait until the TBE bit is set */while(!i2c_flag_get(I2C1, I2C_FLAG_BTC));//写 写入数据 时序/* data transmission */i2c_data_transmit(I2C1, high_val);//先发送高8位数据/* wait until the TBE bit is set */while(!i2c_flag_get(I2C1, I2C_FLAG_BTC));i2c_data_transmit(I2C1, low_val);//再发送低8位数据/* wait until the TBE bit is set */while(!i2c_flag_get(I2C1, I2C_FLAG_BTC));//写停止时序	/* send a stop condition to I2C bus */i2c_stop_on_bus(I2C1);/* wait until stop condition generate */ while(I2C_CTL0(I2C1)&0x0200);
}/* I2C读函数 */
uint16_t i2c_read_byte(uint8_t reg_addr)
{uint8_t high_val=0x00;uint8_t low_val=0x00;uint16_t recv_val = 0x0000;//写开始时序/* wait until i2c bus is idle */while(i2c_flag_get(I2C1, I2C_FLAG_I2CBSY));/* send a start condition to I2C bus */i2c_start_on_bus(I2C1);/* wait until SBSEND bit is set */while(!i2c_flag_get(I2C1, I2C_FLAG_SBSEND));    //写 从机地址+写 时序/* send slave address to I2C bus */i2c_master_addressing(I2C1, I2C1_SLAVE_ADDRESS7, I2C_TRANSMITTER);/* wait until ADDSEND bit is set */while(!i2c_flag_get(I2C1, I2C_FLAG_ADDSEND));/* clear ADDSEND bit */i2c_flag_clear(I2C1, I2C_FLAG_ADDSEND);/* wait until the transmit data buffer is empty */while(!i2c_flag_get(I2C1, I2C_FLAG_TBE));//写 读寄存器地址 时序i2c_data_transmit(I2C1, reg_addr);/* wait until the BTC bit is set */while(!i2c_flag_get(I2C1, I2C_FLAG_BTC));//写停止时序i2c_stop_on_bus(I2C1);while(I2C_CTL0(I2C1)&0x0200);//写开始时序	i2c_start_on_bus(I2C1);/* wait until SBSEND bit is set */while(!i2c_flag_get(I2C1, I2C_FLAG_SBSEND));//写 从机地址+读 时序/* send slave address to I2C bus */i2c_master_addressing(I2C1, I2C1_SLAVE_ADDRESS7, I2C_RECEIVER);/* wait until ADDSEND bit is set */while(!i2c_flag_get(I2C1, I2C_FLAG_ADDSEND));/* clear the ADDSEND bit */i2c_flag_clear(I2C1,I2C_FLAG_ADDSEND);/* wait until the RBNE bit is set	and clear it*/while(!i2c_flag_get(I2C1, I2C_FLAG_RBNE));//接收数据 时序high_val = i2c_data_receive(I2C1);while(!i2c_flag_get(I2C1, I2C_FLAG_RBNE));i2c_ack_config(I2C1, I2C_ACK_DISABLE);i2c_ackpos_config(I2C1,I2C_ACKPOS_NEXT);low_val = i2c_data_receive(I2C1);/* wait until the BTC bit is set *///while(!i2c_flag_get(I2C1, I2C_FLAG_BTC));代码卡死,屏蔽后不卡死,可以成功读取数据		//写停止时序/* send a stop condition to I2C bus */i2c_stop_on_bus(I2C1);/* wait until stop condition generate */ while(I2C_CTL0(I2C1)&0x0200);recv_val = (high_val<<8)|low_val;i2c_ack_config(I2C1, I2C_ACK_ENABLE);return recv_val;
}

iic.h

#ifndef __IIC_H
#define __IIC_H#include "gd32f30x.h"
#include "string.h"void i2c_config(void);
void i2c_write(uint8_t reg_addr, uint16_t send_data);
uint16_t i2c_read_byte(uint8_t reg_addr);#endif

main.c

    // 使能 RDY输出功能i2c_write(0x03,0x8000); // Write 0x8000 to Hi_Threshi2c_write(0x02,0x0000); // Write  0x0000  to Lo_Thresh// 配置ADC输入, 启动连续转换模式i2c_write(0x01,0xC4e0);//Write config, OS=1, AIN0 to GND, G=2(+/-2.048V input range),//continuous mode conversion, DR=800, others default //COMP_QUE = 00Vbat = i2c_read_byte(0x00);//读取电压值//转换  Vbat/65535*参考电压(比如4.096V)

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

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

相关文章

【RHCE】系统服务综合实验

一、实验内容 现有主机 node01 和 node02&#xff0c;完成如下需求&#xff1a; 1、在 node01 主机上提供 DNS 和 WEB 服务 2、dns 服务提供本实验所有主机名解析 3、web服务提供 www.rhce.com 虚拟主机 4、该虚拟主机的documentroot目录在 /nfs/rhce 目录 5、该目录由 node02…

Python | Leetcode Python题解之第229题多数元素II

题目&#xff1a; 题解&#xff1a; class Solution:def majorityElement(self, nums: List[int]) -> List[int]:cnt {}ans []for v in nums:if v in cnt:cnt[v] 1else:cnt[v] 1for item in cnt.keys():if cnt[item] > len(nums)//3:ans.append(item)return ans

为什么渲染农场渲染的是帧,而不是视频?

在3D动画产业的壮阔画卷中&#xff0c;渲染农场作为幕后英雄&#xff0c;以其庞大的计算能力支撑起无数视觉奇观的诞生。这些由高性能计算机集群构成的系统&#xff0c;通过独特的逐帧渲染策略&#xff0c;解锁了单机难以企及的创作自由与效率。本文将深入剖析这一策略背后的逻…

maven7——(重要,构建项目)maven项目构建(命令)

Maven的常用命令管理项目的生命周期 clean命令 清除编译产生的target文件夹内容&#xff0c;可以配合相应命令在cmd中使用&#xff0c;如mvn clean package&#xff0c; mvn clean test D:\工作\公司培训-4班\day20\day20\untitled1>mvn clean compile命令 该命令可以…

机器学习开源分子生成系列(2)-基于三维形状和静电相似性的DeepFMPO v3D安装及使用

前言 本文是基于 3D 的分子生成方法DeepFMPO v3D的介绍及安装使用。 一、DeepFMPO v3D是什么&#xff1f; github代码介绍文章 在药物发现中&#xff0c;如何寻找具新颖性和结构多样性的候选分子是颇受药物设计科学家关注的问题。通过虚拟筛选的化学空间搜索往往会受限于筛选…

牛顿力学和拉格朗日力学求解atwood machine问题对比

一个半径为 R R R、转动惯量为 I I I 的圆盘。绳子与圆盘无滑动&#xff0c;质量 m 2 m_2 m2​ 的物体在重力 g g g 作用下下坠&#xff0c;带动质量 m 1 m_1 m1​ 的物体上升。求 m 1 m_1 m1​和 m 2 m_2 m2​ 的加速度 a a a。 牛顿力学方法 对质量 m 1 m_1 m1​ 和 …

Web 性能入门指南-1.2 分析在线零售 Web 性能及优化方向

让顾客满意是零售业成功的秘诀。事实证明&#xff0c;提供快速、一致的在线体验可以显著提高零售商关心的每项指标——从转化率和收入到留存率和品牌认知度。 本文大纲&#xff1a; 页面速度影响在线零售业务数据 如何将您的网站速度与竞争对手进行比较 性能优化入门&#xf…

Scanner工具类

扫描控制台输入 1.nextLine nextLine() 方法会扫描输入流中的字符&#xff0c;直到遇到行末尾的换行符 \n&#xff0c;然后将该行的内容作为字符串返回&#xff0c;同时&#xff0c;nextLine() 会将 Scanner 对象的位置移动到下一行的开头&#xff0c;以便下一次读取数据时从下…

MySQL的约束键多表查询

约束 概念 概念&#xff1a;约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据。目的&#xff1a;保证数据中数据的正确、有效性和完整性。 外键约束 概念 ​ 外键用来让两张表的数据之间建立连接&#xff0c;从而保证数据的一致性和完整性。 注意&#x…

Qt常用基础控件总结—输入部件(QComboBox类和QLineEdit)

输入部件 下拉列表控件QComboBox 类 QComboBox 类是 QWidget 类的直接子类,该类实现了一个下拉列表(组合框)。 QComboBox 类中的属性函数 1)count:const int 访问函数:int count() const; 获取组合框中的项目数量,默认情况下,对于空组合框或未设置当前项目的组合框,…

c语言的简易教法—— 函数递归

文章目录 一、什么是递归&#xff1f;1.1递归的思想1.2递归的限制条件 二、递归案例2.1 案例1&#xff1a;求n的阶层2.1.1分析2.1.2 递归函数&#xff08;Fact&#xff09;的代码实现2.1.3 测试&#xff1a;main函数实现2.1.4 运行结果和画图推演2.1.5 扩展&#xff1a;迭代方法…

华为如何做成数字化转型?

目录 企业数字化转型是什么&#xff1f; 华为如何定义数字化转型&#xff1f; 为什么做数字化转型&#xff1f; 怎么做数字化转型&#xff1f; 华为IPD的最佳实践之“金蝶云” 企业数字化转型是什么&#xff1f; 先看一下案例&#xff0c;华为经历了多次战略转型&#xf…

前端工程化:Webpack配置全攻略

前端工程化&#xff1a;Webpack配置全攻略 前端小伙伴们&#xff0c;今天我们来聊聊那个让人又爱又恨的 Webpack。没错&#xff0c;就是那个配置起来让你想砸键盘&#xff0c;但又离不开它的构建工具。别担心&#xff0c;跟着我来&#xff0c;保证让你从 Webpack 小白变成配置…

Windows 虚拟机服务器项目部署

目录 一、部署JDK下载JDK安装JDK1.双击 jdk.exe 安装程序2.点击【下一步】3.默认安装位置&#xff0c;点击【下一步】4.等待提取安装程序5.默认安装位置&#xff0c;点击【下一步】6.等待安装7.安装成功&#xff0c;点击【关闭】 二、部署TomcatTomcat主要特点包括&#xff1a;…

感应触摸芯片集成为MCU,深度应用触控按键技术的VR眼镜

VR&#xff08;Virtual Reality&#xff09;即虚拟现实&#xff0c;简称VR&#xff0c;其具体内涵是综合利用计算机图形系统和各种现实及控制等接口设备&#xff0c;在计算机上生成的、可交互的三维环境中提供沉浸感觉的技术。它的工作原理是将左右眼图像交互显示在屏幕上的方式…

技术速递|宣布为 .NET 升级助手提供第三方 API 和包映射支持

作者&#xff1a;Marco Goertz 排版&#xff1a;Alan Wang .NET 升级助手是一个 Visual Studio 扩展和命令行工具&#xff0c;可帮助您将应用从之前的 .NET 和 .NET Framework 升级到最新版本的 .NET。正如我们在之前的文章中所描述的那样&#xff0c;它为升级 Microsoft 库和框…

【C语言】 —— 预处理详解(下)

【C语言】 —— 预处理详解&#xff08;下&#xff09; 前言七、# 和 \##7.1 # 运算符7.2 ## 运算符 八、命名约定九、# u n d e f undef undef十、命令行定义十一、条件编译11.1、单分支的条件编译11.2、多分支的条件编译11.3、判断是否被定义11.4、嵌套指令 十二、头文件的包…

Day1每日编程题日记:数字统计、两个数组的交集、点击消除

前言&#xff1a;该篇用于记录自看。曾回看昨天的做题代码&#xff0c;竟然会觉得陌生&#xff0c;这竟然是我写的&#xff0c;细细读了一下&#xff0c;原来我当时是这么想的。因此我觉得记代码没有实际用处&#xff0c;重点是领悟了思想&#xff0c;这样子代码就在心中&#…

HashMap----源码解读

源码分析&#xff1a; public class HashMap<K,V> extends AbstractMap<K,V>implements Map<K,V>, Cloneable, Serializable 在类的开头声明了几个常量&#xff0c;以下是较为重要的&#xff1a; /*** 定义初始容量大小为16*/ static final int DEFAULT_I…

探索【Python面向对象】编程:新时代的高级编程范式详解

目录 1. 面向对象编程概念&#xff08;OOP&#xff09; 1.1 什么是类和对象&#xff1f; 1.2 类的定义 1.3 类和对象的关系 1.4 小李的理解 2. 抽象 2.1 抽象的概念 2.2 抽象类和方法 2.3 小李的理解 3. 类和实例 3.1 类的定义和实例化 3.2 类的属性和方法 3.3 小…