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)
相关文章:
GD32F303RET6读取SGM58031电压值
1、SGM58031芯片详解 (1)SGM58031是一款低功耗,16位精度,delta-sigma (ΔΣ)模数转换器(ADC)。它从3V到5.5V供电。 (2)SGM58031包含一个片上参考和振荡器。它有一个I2C兼容接口,可以选择四个I2…...
Pandas实战指南:any()函数深度解析与高效应用
Pandas实战指南:any()函数深度解析与高效应用 引言 在数据分析和处理过程中,经常需要快速检查数据集中是否存在满足特定条件的元素。Pandas库中的any()函数正是这样一个强大的工具,它可以帮助我们沿着指定的轴检查是否至少有一个元素满足某…...
ClickHouse中PRIMARY KEY和ORDER BY关键字的关系
在ClickHouse中,PRIMARY KEY和ORDER BY关键字在表的创建过程中扮演着重要的角色,它们共同决定了数据在物理存储上的排序方式,这对查询性能有着直接的影响。理解它们之间的关系对于设计高效的ClickHouse表结构至关重要。 ORDER BY ORDER BY定…...
android 图片轮播
在Android中,实现图片轮播(也称为图片滑动或图片轮转)通常涉及到使用ViewPager、RecyclerView配合PagerAdapter、RecyclerView.Adapter或者第三方库如Glide、Picasso来处理图片加载,以及一个定时器(如Handler、Timer、…...
进度条提示-在python程序中使用避免我误以为挂掉了
使用库tqdm 你还可以手写一点,反正只要是输出点什么东西都可以; Demo from chatgpt import time from tqdm import tqdm# 示例函数,模拟长时间运行的任务 def long_running_task():total_steps 100for step in tqdm(range(total_steps), …...
【案例】python集成OCR识别工具调研
目录 一、前言二、Tesseract_OCR2.1、安装过程2.2、python代码使用三、PaddleOCR3.1、安装过程3.2、python代码使用四、EasyOCR五、ddddOCR六、CnOCR七、总结一、前言 因项目需要OCR识别能力,且要支持私有化部署。本文将对比市场一些开源的OCR识别工具,从中选择适合项目需要…...
第一关:Linux基础知识
Linux基础知识目录 前言LinuxInternStudio 关卡1. InternStudio开发机介绍2. SSH及端口映射2.1 什么是SSH?2.2 如何使用SSH远程连接开发机?2.2.1 使用密码进行SSH远程连接2.2.2 配置SSH密钥进行SSH远程连接2.2.3 使用VScode进行SSH远程连接 2.3. 端口映射…...
qt 自定义信号和槽举例
在Qt中,自定义信号和槽是对象间通信的一种强大机制。以下是一个简单的例子,展示了如何定义和使用自定义信号和槽。 首先,我们定义一个简单的Worker类,它有一个自定义信号workCompleted,当某个任务完成时,这…...
编程语言与数据结构的关系:深度解析与探索
编程语言与数据结构的关系:深度解析与探索 在编程的世界中,编程语言和数据结构是两个不可或缺的元素。它们之间既相互依存,又各自独立,共同构成了编程的核心。本文将深入探索编程语言与数据结构之间的复杂关系,从四个…...
了解AsyncRotationController
概述 基于android 15.0, 以从强制横屏App上滑退回桌面流程来分析 frameworks/base/services/core/java/com/android/server/wm/AsyncRotationController.javaAsyncRotationController 是一种控制器,用于处理设备显示屏旋转时非活动窗口的异步更新。这种控制器通过…...
有必要找第三方软件测评公司吗?如何选择靠谱软件测评机构?
软件测试是确保软件质量的重要环节,而在进行软件测试时,是否有必要找第三方软件测评公司呢?第三方软件测评公司是指独立于软件开发公司和用户之间的中立机构,专门从事软件测试和测评工作。与自身开发团队或内部测试团队相比,选择…...
物联网系统中市电电量计量方案(一)
为什么要进行电量计量? 节约资源:电量计量可以帮助人们控制用电量,从而达到节约资源的目的。在当前严峻的资源供应形势下,节约能源是我们应该重视的问题。合理计费:电表可以帮助公共事业单位进行合理计费,…...
2024年热门无线领夹麦克风哪款好,麦克风品牌排行榜前十名推荐
在音频领域,无线领夹麦克风不断推陈出新,为我们带来了更出色的声音体验。无论你是主播、自媒体创作者、教师还是商务人士,都能从中找到适合自己的那一款。为了帮助大家轻松挑选到理想的无线领夹麦克风,我特别挑选了几款具有代表…...
IEEE顶刊“放水”?稳居1区Top,发文扩张IF稳长,CCF推荐,审稿友好!
本周投稿推荐 SCI • 能源科学类,1.5-2.0(25天来稿即录) • CCF推荐,4.5-5.0(2天见刊) • 生物医学制药类(2天逢投必中) EI • 各领域沾边均可(2天录用)…...
发布:PhonePrompter_PC(手机录视频提词器_电脑版)
PhonePrompter_PC(手机录视频提词器_电脑版) 目 录 1. 概述... 2 2. 应用手册... 3 下载地址:百度网盘 请输入提取码 提取码:8wsa 1. 概述 平时工作和生活中需要用手机竖屏或横屏模式录制造工作、科技、历史、生活等方面的一些视…...
shein测试开发会问些啥?
🏆本文收录于《CSDN问答解惑-》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&…...
mysql索引优化
1、不在索引列做任何操作: 函数表达式:select sum(id) from 计算:where id 1; 隐式转换:where id "" 2、尽量全值匹配(在联合索引中,where 后面的条件尽量和索引的所有列匹配…...
Linux文件编程(打开/创建写入读取移动光标)
目录 一、如何在Linux下做开发 1.vi编辑器 2.gcc编译工具 3.常用指令 二、文件打开及创建 三、写入文件 四、读取文件 五、文件“光标”位置 一、如何在Linux下做开发 所谓文件编程,就是对文件进行操作,Linux的文件和Windows系统的文件大差不差…...
集成测试技术栈
前端 浏览器操作:playwright、selenium 后端 testcontainercucumbervitestcypressmsw...
MongoDB - 集合和文档的增删改查操作
文章目录 1. MongoDB 运行命令2. MongoDB CRUD操作1. 新增文档1. 新增单个文档 insertOne2. 批量新增文档 insertMany 2. 查询文档1. 查询所有文档2. 指定相等条件3. 使用查询操作符指定条件4. 指定逻辑操作符 (AND / OR) 3. 更新文档1. 更新操作符语法2. 更新单个文档 updateO…...
SOONet模型AI编程助手实践:根据代码注释自动定位相关教学视频片段
SOONet模型AI编程助手实践:根据代码注释自动定位相关教学视频片段 1. 引言 你有没有过这样的经历?在IDE里写代码,遇到一个不太熟悉的函数或者算法,比如“快速排序”,你停下来想查查资料。通常的做法是,要…...
3步解锁Arduino红外遥控:终极实战指南
3步解锁Arduino红外遥控:终极实战指南 【免费下载链接】Arduino-IRremote Infrared remote library for Arduino: send and receive infrared signals with multiple protocols 项目地址: https://gitcode.com/gh_mirrors/ar/Arduino-IRremote 想要让Arduino…...
Graphormer模型架构深度解析:Positional Encoding如何编码分子图拓扑结构?
Graphormer模型架构深度解析:Positional Encoding如何编码分子图拓扑结构? 1. Graphormer模型概述 Graphormer是微软研究院开发的一种基于纯Transformer架构的图神经网络模型,专门为分子图(原子-键结构)的全局结构建…...
RyTuneX:WinUI3驱动的Windows性能优化引擎
RyTuneX:WinUI3驱动的Windows性能优化引擎 【免费下载链接】RyTuneX RyTuneX is a cutting-edge optimizer built with the WinUI 3 framework, designed to amplify the performance of Windows devices. Crafted for both Windows 10 and 11. 项目地址: https:/…...
GLM-4.1V-9B-Base与Dify联动:零代码构建企业级AI应用平台
GLM-4.1V-9B-Base与Dify联动:零代码构建企业级AI应用平台 1. 企业AI应用的新选择 最近接触了不少企业客户,发现一个普遍现象:大家都想用AI,但真正能用起来的却不多。技术门槛高、开发周期长、维护成本大,这些问题让很…...
域名过期后会不会影响网站的SEO排名
域名过期后是否会影响网站的SEO排名:深入探讨与解决方案 在当今互联网时代,域名是网站的核心标识,它不仅代表了网站的身份,还在搜索引擎优化(SEO)中扮演着重要角色。有时我们可能会面临域名过期的情况&…...
珠海内有哪些做专精特新,创新型中小企业。企业性价比高。
在珠海,中小企业要走好专精特新发展之路,选择一家性价比高的服务机构至关重要。下面我就为你介绍一家值得关注的企业——珠海飞拓知识产权代理事务。企业痛点催生专业服务众多专精特新、创新型中小企业在发展过程中面临着诸多痛点。行业报告显示…...
Qwen2.5-VL视觉定位效果展示:Ollama输出坐标+置信度+层级关系JSON
Qwen2.5-VL视觉定位效果展示:Ollama输出坐标置信度层级关系JSON 最近在玩一个挺有意思的AI模型——Qwen2.5-VL-7B-Instruct。这可不是普通的聊天机器人,它是一个能“看懂”图片,还能把看到的东西用结构化数据告诉你的视觉多模态模型。 简单…...
手把手教你用Unsloth:DeepSeek、Qwen等模型快速微调入门
手把手教你用Unsloth:DeepSeek、Qwen等模型快速微调入门 1. Unsloth简介与核心优势 Unsloth是一个专注于优化大型语言模型(LLM)训练和微调效率的开源工具。它通过算法创新显著降低显存占用、提升训练速度,同时保持模型精度无损。相比传统方法ÿ…...
避开这3个坑,你的火山引擎SFT微调效果才能翻倍
火山引擎SFT微调实战:避开3个关键陷阱让模型效果倍增 在火山方舟平台上进行大模型监督微调(SFT)时,许多开发者都会遇到一个共同的困惑:明明按照官方文档一步步操作,为什么最终效果总是不尽如人意࿱…...
