GD32模拟IIC读写DVC1124

GD32F130模拟IIC程序(读写功放芯片寄存器) GD32F130模拟IIC操作时候,输入脚最好配置成上拉,否则有可能读不成功 阅读详情

GD32模拟IIC读写DVC1124

0. 驱动

通用IIC时序信号

static void i2c_Start(void);  //
static void i2c_Stop(void);
static uint8_t i2c_WaitAck(void);
static void i2c_Ack(void);
static void i2c_NAck(void);
static void i2c_SendByte(uint8_t txd);
static uint8_t i2c_ReadByte(uint8_t ack);

static void i2c_Start(void)
{
   
   
    IIC_SDA_OUT();

    IIC_SDA_1();
    IIC_SCL_1();
    delay_1us(8);
    IIC_SDA_0();
    delay_1us(8);
    IIC_SCL_0();
    // delay_1us(6);
}

static void i2c_Stop(void)
{
   
   
    IIC_SDA_OUT();
    
    IIC_SCL_0();
    IIC_SDA_0();
    delay_1us(8);
    IIC_SCL_1();
    delay_1us(8);
    IIC_SDA_1();
    delay_1us(8);
}

/*
*********************************************************************************************************
*	函 数 名: i2c_WaitAck
*	功能说明: CPU产生一个时钟,并读取器件的ACK应答信号
*	形    参:无
*	返 回 值: 返回0表示正确应答,1表示无器件响应
*********************************************************************************************************
*/
static uint8_t i2c_WaitAck(void)
{
   
   
    uint8_t time_out = 0;

    IIC_SDA_IN();

    IIC_SDA_1();	/* CPU释放SDA总线 */
    delay_1us(2);
    IIC_SCL_1();	/* CPU驱动SCL = 1, 此时器件会返回ACK应答 */
    delay_1us(2);
    if (IIC_SDA_READ())	/* CPU读取SDA口线状态 */
    {
   
   
        if (time_out++ > 250)
        {
   
   
            i2c_Stop();
            return 1;
        }
    }
    IIC_SCL_0();
    return 0;
}

/*
*********************************************************************************************************
*	函 数 名: i2c_Ack
*	功能说明: CPU产生一个ACK信号
*	形    参:无
*	返 回 值: 无
*********************************************************************************************************
*/
static void i2c_Ack(void)
{
   
   
    IIC_SDA_OUT();
    IIC_SCL_0();
    IIC_SDA_0();	/* CPU驱动SDA = 0 */
    delay_1us(4);
    IIC_SCL_1();	/* CPU产生1个时钟 */
    delay_1us(4);
    IIC_SCL_0();
}

/*
*********************************************************************************************************
*	函 数 名: i2c_NAck
*	功能说明: CPU产生1个NACK信号
*	形    参:无
*	返 回 值: 无
*********************************************************************************************************
*/
static void i2c_NAck(void)
{
   
   
    IIC_SDA_OUT();
    IIC_SCL_0();
    IIC_SDA_1();	/* CPU驱动SDA = 1 */
    delay_1us(4);
    IIC_SCL_1();	/* CPU产生1个时钟 */
    delay_1us(4);
    IIC_SCL_0();
}


static void i2c_SendByte(uint8_t txd)
{
   
   
    uint8_t t = 0;   
    IIC_SDA_OUT();
    IIC_SCL_0();//拉低时钟开始数据传输
    for (t = 0; t < 8; t++)
 
GD32软件模拟IIC驱动DVC1124温湿度传感器实战 IIC(Inter-Integrated Circuit)是一种广泛应用的同步串行通信协议,其核心依赖精确的时序控制与开漏总线结构;在嵌入式开发中,当硬件IIC外设受限于引脚复用、协议兼容性或非标器件支持不足时,软件模拟IIC成为关键替代方案。GD32系列MCU因资源紧凑、成本优势突出,常被用于环境监测等工业场景,但其硬件IIC难以适配DVC1124这类无ACK响应、地址硬编码、时序容限严苛的非标传感器。通过重构起始/停止条件、地址发送逻辑、数据采样时机与重复启动规避机制,可构建高确定性、易调试的轻量级模拟 阅读详情

相关推荐

GD32F4xx_CANI2C_ByteReadAndWrite.rar

GD32F450 硬件IIC字节读写EEPROM 程序示例 带中文注释

AFE芯片GS2237用户手册

AFE芯片GS2237用户手册

RV1126B RV1126B-P 瑞芯微 高性能视觉处理器SoC 芯片

它集成了大量算法加速器,如 HDR、3A、LSC、3DNR、2DNR、锐化、去雾、鱼眼校正、伽马校正、特征点检测等。此外,还配备了一款最多8兆像素的 AI-ISP,作为对传统ISP 的补充,以提供卓越的空间去噪性能和增强的图像增强效果。除了先前的高性能多媒体区块外,RV1126B还包含丰富的音频、内存和其他外围接口,如I2C、SPI、PWM等。借助这-特性,来自相机的视频可以以高分辨率进行编码,并存储在本地内存中,同时还能将另-段较低分辨率的视频传输到云存储。

szhorsway的博客 1843

快速上手springboot+vue的前后端分离项目

使用webStorm新建项目后,把 .lock文件删除后项目运行才不报错,配置文件 vue.config.js 中加入 lintOnSave: false 关闭eslint语法检测。在多层嵌套的父子组件之间传递状态已经十分麻烦,而Vue更是没有为兄弟组件提供直接共享数据的办法。基于这个问题,许多框架提供了解决方案——使用全局的状态管理器,将所有分散的共享数据交由状态管理器保管,Vue也不例外。其中一种解决CORS 的方法, 在springboot项目中跨域的方法或类加上@CrossOrigin注解。

m0_61950264的博客 1897

OpenIddict实战指南:在.NET Core中构建安全的OAuth 2.0与OpenID Connect服务

本文详细介绍了如何在.NET Core中使用OpenIddict框架构建安全、标准的OAuth 2.0与OpenID Connect授权服务。内容涵盖从快速搭建授权服务器、理解核心配置与授权流程,到集成用户数据库、实现完整登录授权,以及生产环境下的安全加固与部署指南,为.NET开发者提供了一套现代、可维护的认证授权解决方案。

weixin_29229989的博客 350

STM32F4系列HAL库配置定时器实验——输入捕获

STM32F4系列HAL库配置定时器实验——输入捕获 输入捕获简单讲解 输入捕获模式可以用来测量脉冲宽度或者测量频率。我们以测量周期和频率为例,用一个简图来说明输入捕获的原理 假定定时器工作在向上计数模式, 图中 t1~t2 时间,就是我们需要测量的高电平时间。测量方法如下:首先设置定时器通道 x 为 上升沿捕获,这样,t1 时刻,就会捕获到当前的 CNT 值,然后立即清零 CNT,并设置通道 x为下降沿捕获,这样到 t2 时刻,又会发生捕获事件,得到此时的 CNT 值,记为 CCRx2。这样,根据定时器

azs0504的博客 9276

UniApp X 网络请求避坑指南:从 JS 到 UTS 的 JSON 数据处理全解析

摘要:UniAppX开发中处理JSON数据时,UTS强类型特性要求开发者改变JS习惯。本文对比两种主流方案:1)UTSJSONObject通过keypath访问数据,兼容JS但缺乏类型提示;2)type+泛型方案,通过定义数据类型实现强类型校验和智能提示,推荐用于固定数据结构。文章详细演示了两种方式的具体实现、转换方法及实战案例,并提供了类型定义技巧和注意事项,帮助开发者编写更稳定高效的跨平台应用。

归梦工作室 2779

自动识别象棋棋子的OpenCV应用

在计算机视觉领域,OpenCV是一个广泛应用的开源计算机视觉库,它提供了丰富的图像处理和分析工具。本文将介绍如何使用OpenCV实现自动识别象棋棋子的功能,并提供相应的源代码。通过以上代码,我们可以实现对棋盘图像中棋子的自动识别。需要注意的是,以上代码只是一个简单的示例,实际应用中可能需要根据具体情况进行参数调整和算法优化,以获得更好的识别效果。函数利用预处理后的图像,寻找图像中的轮廓,并根据轮廓的面积筛选出可能的棋子轮廓,最后在原图像中提取棋子区域。在主程序中,我们读取输入图像,并调用。

WzisTypescript的博客 901

【从零开始学习 SystemVerilog】1.1、SystemVerilog 概述

【从零开始学习 SystemVerilog】1.1、SystemVerilog 概述

努力,加油每一天鸭~ 1030

Spring AI从入门到精通:构建智能Spring应用的全面指南

随着人工智能技术的快速发展,将大语言模型(LLM)与企业应用集成已成为趋势。Spring AI作为Spring官方推出的AI集成框架,为开发者提供了便捷、标准化的方式来构建智能应用。本文将从基础概念到高级应用,全面介绍Spring AI的核心功能与实践技巧。Spring AI 是 VMware 于 2023 年推出的开源框架,旨在简化大语言模型(LLM)与 Spring 应用的集成。它提供了统一的 API 抽象,支持多种 LLM 供应商,包括 OpenAI、Azure OpenAI、Hugging Face

qq_36929638的博客 1062

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: 单片机uart实现modbus-rtu协议
RYYB
博客等级 码龄7年 9粉丝 4原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值