CH32V203 单片机 I2C 使用
CH32V203系列是基于32位RISC-V内核设计的工业级增强型低功耗通用微控制器,高性能,最高支持144MHz系统主频,低功耗,运行功耗低至45uA/MHz。CH32V203集成双路USB接口,支持USB Host主机及USB Device设备功能,具有1路CAN接口(2.0B主动)、双路OPA运放、4组UART、双路IIC,12位ADC,10路Touchkey等丰富外设资源,同时提供TSSOP20、QFN28、QFN48、LQFP32、LQFP48等多种封装供客户灵活选择。

// 加作者微信:jiyuyun18, 交流电子技术
// 留言:CSDN 入群,加入电子技术交流群
// 留言:CSDN ESP32 入群,加入 ESP32 技术讨论群#include "i2c.h"// 配置STM32的I2C设备自己的地址,每个连接到I2C总线上的设备都要有一个自己的地址,作为主机也不例外。
// 地址可设置为7位或10位,只要该地址是I2C总线上唯一的即可。
// 其实可以有两个地址,这里是设置的第一个地址。
void i2c_init(uint16_t addr)
{// Declare the required configuration structure variablesGPIO_InitTypeDef GPIO_InitStructure={0};I2C_InitTypeDef I2C_InitTSturcture={0};// Enable the required clock busesRCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE );// Prepare the required pins.GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);// Configure the I2CI2C_InitTSturcture.I2C_ClockSpeed = 80000;I2C_InitTSturcture.I2C_Mode = I2C_Mode_I2C;I2C_InitTSturcture.I2C_DutyCycle = I2C_DutyCycle_16_9;I2C_InitTSturcture.I2C_OwnAddress1 = addr; // 主机自己的地址I2C_InitTSturcture.I2C_Ack = I2C_Ack_Enable;I2C_InitTSturcture.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; // 7位地址I2C_Init( I2C1, &I2C_InitTSturcture);// Start the I2CI2C_Cmd(I2C1, ENABLE);I2C_AcknowledgeConfig(I2C1, ENABLE);
}// TODO:while 死循环前加入延时退出功能// addr: 设备地址
void i2c_send(uint8_t addr, uint8_t data)
{while( I2C_GetFlagStatus( I2C1, I2C_FLAG_BUSY ) != RESET ); // 判断 I2C 总线是否忙碌I2C_GenerateSTART( I2C1, ENABLE ); // 发送起始信号// 检测EV5事件:判断是否成功发送起始信号while( !I2C_CheckEvent( I2C1, I2C_EVENT_MASTER_MODE_SELECT ) );// 发送设备地址I2C_Send7bitAddress( I2C1, addr, I2C_Direction_Transmitter );// 检测EV6事件while( !I2C_CheckEvent( I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED ) );// 获取TxE的状态 数据寄存器为空标志位, 可以向其中写数据while(!I2C_GetFlagStatus(I2C1, I2C_FLAG_TXE));I2C_SendData( I2C1, data);// wait for the data transmitted flagwhile( !I2C_CheckEvent( I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED ) );I2C_GenerateSTOP( I2C1, ENABLE );
}void i2c_begin_transmission(uint8_t addr)
{// 判断 I2C 总线是否忙碌while( I2C_GetFlagStatus( I2C1, I2C_FLAG_BUSY ) != RESET );// 发送起始信号I2C_GenerateSTART( I2C1, ENABLE);// 检测EV5事件:判断是否成功发送起始信号while( !I2C_CheckEvent( I2C1, I2C_EVENT_MASTER_MODE_SELECT ) );// 发送设备地址I2C_Send7bitAddress( I2C1, addr, I2C_Direction_Transmitter);// 检测EV6事件while( !I2C_CheckEvent( I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED ) );
}void i2c_end_transmission()
{// wait for the data transmitted flagwhile( !I2C_CheckEvent( I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED ) );I2C_GenerateSTOP( I2C1, ENABLE);
}void i2c_write(uint8_t data)
{while(!I2C_GetFlagStatus(I2C1, I2C_FLAG_TXE)); //获取TxE的状态 数据寄存器为空标志位,可以向其中写数据I2C_SendData( I2C1, data);
}
相关文章:
CH32V203 单片机 I2C 使用
CH32V203系列是基于32位RISC-V内核设计的工业级增强型低功耗通用微控制器,高性能,最高支持144MHz系统主频,低功耗,运行功耗低至45uA/MHz。CH32V203集成双路USB接口,支持USB Host主机及USB Device设备功能,具…...
链表OJ题
今天讲一些关于链表的Oj题,相信你看完对链表又提升一个档次。 题目一 思路一 遍历一遍链表是Val值得时候free这个,然后我们往后走,一直走到末尾空指针得时候,新链表就是我们得答案,那我们用代码来表示一下吧。 struct…...
Llama 2免费托管及API提供
Llama 2 是 Meta 最新的文本生成模型,目前其性能优于所有开源替代方案。 推荐:用 NSDT编辑器 快速搭建可编程3D场景 1、强大的Llama 2 它击败了 Falcon-40B(之前最好的开源基础模型),与 GPT-3.5 相当,仅低…...
回到未来:使用马尔可夫转移矩阵分析时间序列数据
一、说明 在本文中,我们将研究使用马尔可夫转移矩阵重构时间序列数据如何产生有趣的描述性见解以及用于预测、回溯和收敛分析的优雅方法。在时间上来回走动——就像科幻经典《回到未来》中 Doc 改装的 DeLorean 时间机器一样。 注意:以下各节中的所有方程…...
vue element 多图片组合预览
定义组件:preview-image <template><div><div class"imgbox"><divclass"preview-img":class"boxClass"v-if"Imageslist 3 ||Imageslist 5 ||Imageslist 7 ||Imageslist 8 ||Imageslist > 9"&…...
Vue2集成Echarts实现可视化图表
一、依赖配置 1、引入echarts相关依赖 也可以卸载原有的,重新安装 卸载:npm uninstall echarts --save 安装:npm install echarts4.8.0 --save 引入水球图形依赖 npm install echarts-liquidfill2.0.2 --save 水球图可参考文档࿱…...
3 Python的数据类型
概述 在上一节,我们介绍了Python的基础语法,包括:编码格式、标识符、关键字、注释、多行、空行、缩进、引号、输入输出、import、运算符、条件控制、循环等内容。Python是一种动态类型的编程语言,这意味着当你创建一个变量时&…...
new String()到底创建了几个对象
题目: new String("abc")会创建几个对象? 看字节码,就知道是两个。...
第五十五天
CSS3 ●背景 CSS3 中包含几个新的背景属性,提供更大背景元素控制: •background-image:添加背景图片。不同的背景图像和图像用逗号隔开,所有的图片中显示在最顶端的为第一张。 •background-size:指定背景图像的大…...
【推荐】深入浅出benan的生命周期
目录 1.spring 管理JavaBean的过程(生命周期) 2.spring的JavaBean管理中单例模式及原型(多例)模式 2.1 . 默认为单例,但是可以配置多例 2.2.举例论证 2.2.1 默认单例 2.2.2 设置多例 2.2.3单例与多例的初始化的时…...
mysql使用redis+canal实现缓存一致性
目录 一、开启binlog日志 1.首先查看是否开启了binlog 2、开启binlog日志,并重启mysql服务 二、授权 canal 链接 MySQL 账号具有作为 MySQL slave 的权限 三、下载配置canal 1、下载 canal, 访问 release 页面 , 选择需要的包下载, 如以 1.0.17 版本为例 2、 …...
9.利用matlab完成 泰勒级数展开 和 符号表达式傅里叶变换和反变换 (matlab程序)
1.简述 matlab之傅里叶变换和逆变换 首先生成一个方波(或者其他组合波形),然后对这个信号做傅里叶变换,拆解到频域,可以看到这个信号是由哪些频率的信号叠加而来。 然后把频域信号,用傅里叶逆变换恢复到时…...
文字点选验证码识别(上)-YOLO位置识别
声明 本文以教学为基准、本文提供的可操作性不得用于任何商业用途和违法违规场景。 本人对任何原因在使用本人中提供的代码和策略时可能对用户自己或他人造成的任何形式的损失和伤害不承担责任。 如有侵权,请联系我进行删除。 文章中没有代码,只有过程思路,请大家谨慎订阅。…...
ssh远程连接慢解决方法
一、关闭SERVER上的GSS认证 将GSSAPIAuthentication改为no ,如果在配置文件中,以下值是被注释的就拿掉注释,因为默认开关就是yes # vi /etc/ssh/sshd_config GSSAPIAuthentication no二、关闭SERVER上DNS反向解析 在linux中,默认就是开启了S…...
10.4K Star!程序员为程序员针对性优化的开源免费笔记
平时我一直用Notion来记录内容为主,但也一直关注着其他开源产品。上周正好看到一款非常受欢迎的开源免费笔记,今天就推荐给大家:VNote。 VNote一个由程序员为程序员打造的开源笔记应用,基于Qt开发,专注于使用 Markdown…...
ppt中线材相交接的地方,如何绘画
ppt中线材相交接的地方: 在ppt中绘画线材相互交接的地方: 1.1绘图工具中的“弧形” 1.2小技巧 “弧形”工具点一下,在ppt中如下 1.3拖动活动点进行调整图形 1.4绘画圆弧 1.5调整“圆弧”的大小,鼠标放在“黄色点”位置…...
[VS/C++]如何更好的配置DLL项目中的成品输出
注意,解决方案与项目不放在同一个文件夹中,即不选中图中选项 直入主题 首先右键项目选择属性,或者选中项目然后AltEnter 选择配置属性下的常规 分别在四种配置中编辑输出目录如下 注意,四种配置要分别配置,一个个来…...
REC 系列 Visual Grounding with Transformers 论文阅读笔记
REC 系列 Visual Grounding with Transformers 论文阅读笔记 一、Abstract二、引言三、相关工作3.1 视觉定位3.2 视觉 Transformer 四、方法4.1 基础的视觉和文本编码器4.2 定位编码器自注意力的文本分支文本引导自注意力的视觉分支 4.3 定位解码器定位 query 自注意力编码器-解…...
Linux常用命令总结
Linux是一种自由和开放源代码的操作系统,它被广泛用于服务器和其他大型系统中。然而,如果你刚开始使用Linux,可能会对如何有效地操作感到困惑。这篇文章将介绍一些常用的Linux命令,帮助你更好地理解和使用这个强大的系统。 文件和…...
Scratch 之 制作超丝滑 FNF 推条
这个教程是不用画笔的,所以不用担心推条是最后一层了! 导入素材 你以为真是这样吗?NO,NO,NO,其实是这样的 没错,中间是空的!中间是空的!中间是空的!…...
从夏普IGZO技术授权看显示面板产业的技术转移与战略博弈
1. 从一则旧闻看显示产业的全球棋局:技术、资本与生存的博弈2013年夏天,一则来自日本的消息在科技产业圈,特别是显示面板和半导体供应链领域,激起了不小的涟漪。全球知名的消费电子品牌夏普公司,宣布了一项与中国国有企…...
别再死磕ViT了!用Swin-Transformer搞定高分辨率图像识别,保姆级原理拆解
高分辨率图像识别新范式:Swin-Transformer实战指南 当计算机视觉工程师面对4K医学影像或卫星地图时,传统ViT模型往往会遭遇显存爆炸的尴尬。我曾在一个遥感项目中发现,直接将ViT应用于20482048像素的图像,单次前向传播就消耗了32G…...
手把手教你用FPGA+CORDIC算法实现任意角度图像旋转(告别浮点运算)
FPGACORDIC算法实现高精度图像旋转的硬件优化实践 在数字图像处理领域,实时图像旋转是一项基础而关键的技术需求。传统基于浮点运算的旋转方案虽然直观,但在FPGA等硬件平台上往往面临资源占用高、时序难以满足的挑战。本文将深入探讨如何利用CORDIC&…...
从虚拟到物理:电子系统原型设计的工程化策略与实战解析
1. 原型设计全景:从概念到实物的工程化思维 在电子系统设计领域,尤其是面对航空航天、汽车电子、通信设备这类高复杂、高可靠性要求的项目时,“原型”这个词的分量远超一个简单的模型。它不是一个可有可无的步骤,而是连接创意与产…...
Arccos Golf数据获取与Python分析实战:开源工具包逆向工程API
1. 项目概述:一个高尔夫数据爱好者的开源工具箱 如果你和我一样,既是个高尔夫爱好者,又对数据分析和自动化工具着迷,那么你很可能听说过Arccos Golf这个平台。它是一个通过传感器和手机应用来追踪每一次击球、分析球场表现的系统。…...
为什么2025年是AI Agent的爆发元年?
目录为什么2025年是AI Agent的爆发元年?引言:一个被产业界共同认定的“元年”一、产业共识:为什么“元年”不是一个空洞的口号?1.1 从“千模大战”到“智能体竞速”1.2 权威机构的一致判断1.3 市场规模的数据佐证二、技术底座&…...
VMware macOS虚拟机深度解锁指南:Unlocker 3.0架构剖析与实战应用
VMware macOS虚拟机深度解锁指南:Unlocker 3.0架构剖析与实战应用 【免费下载链接】unlocker VMware Workstation macOS 项目地址: https://gitcode.com/gh_mirrors/unloc/unlocker 在虚拟化技术领域,VMware Workstation和Player用户长期面临一个…...
XSP25全协议 100W PD快充诱骗芯片_串口读电压电流信息
在Type-C快充技术普及的今天,快充诱骗协议芯片成为小家电、智能硬件、锂电设备等产品实现高效取电的核心器件。XSP25作为汇铭达推出的Type‑C受电端(Sink)多功能快充取电芯片,以全协议兼容、100W大功率输出、串口智能通信、极简外…...
Kotlin多平台集成OpenAI API:类型安全与协程流式处理实践
1. 项目概述:当Kotlin遇见OpenAI如果你是一名Android或Kotlin多平台(KMP)开发者,最近想在自己的应用中集成AI对话、图像生成或者语音转文本这类酷炫功能,那么你大概率绕不开OpenAI的API。但当你兴冲冲地打开官方文档&a…...
从高通市值超越英特尔看半导体IP价值与Fabless模式
1. 从一则旧闻谈起:当高通市值超越英特尔2012年11月9日,对于全球半导体行业而言,是一个值得被记住的日子。那天,一则消息在业界引发了不小的震动:高通(Qualcomm)的市值首次超越了英特尔…...
