一. 使用STM32CubeMX实现 IIC 通信打开STM32CubeMX,选择STM32103C8芯片,设置基本配置,设置时钟配置,打开USART1串口通信(使用轮询模式)。设置好之后,设置存储路径,选择所用IDE,然后点击GENERATE CODE创建工程,在弹出的open project打开工程进行全局编译。二. HAL库中IIC通信中断模式和DMA模式的重要函数1. 主设备发送数据到从设
目录前言一、建立工程二、编写和移植前期准备驱动部分修改三、使用和验证结论 (2022年1月22日重制)本文主要是移植带简单图形库的程序,如果只是实现DMA控制,建议看【0.96寸 OLED屏实现1500Fps的帧率】STM32 软件、硬件SPI、I2C驱动总结本文参考例程 提取码: sch3前言本文将介绍在STM32 HAL库下实现硬件IIC+DMA控制0.96寸 OLED屏,以及OLED图形库
I2C(Inter-Integrated Circuit BUS)是I2C BUS简称,中文为集成电路总线,是目前应用最广泛的总线之一,和IMX6ULL有些相关的是,恰巧该总线是NXP前身的PHILIPS设计。当前仍然是应用最广泛的总线协议之一。1 通用I2C协议介绍1)概述 I2C是一种串行通信总线,使用多主从架构,最初设计师为了让主板、嵌入式系统或手机用以连接低速周边设备而发展而来。在小数据量
文章目录1- I2C协议介绍(1)I2C协议简介(2I2C从设备地址2- I2C通信时序(1)起始位(2)读写地址(3)I2C应答信号(4)数据位发送与接收3- I2C协议主机收发数据流程(1)主机发送数据(2)主机接收数据4- SHT30传感器介绍(1)SHT30简介(2)SHT30工作原理5- HAL库中I2C发送接收数据函数(1)HAL_I2C_Master_Transmit()(2)H
硬件原理IIC.h代码实现 #ifndef __DRIVER_I2C_H #define __DRIVER_I2C_H#include "stm32f1xx_hal.h" /********************* * 引脚宏定义 **********************/ #define SCL_PIN GPIO_PIN_10 #define SDA_PIN
I2C总线是飞利浦公司推出的一种串行总线,只有两根双向信号线。一根是数据线SDA,另一根是时钟线SCL。每个接到I2C总线上的器件地址是唯一的。主机与其他器件间的数据传送可以是由主机发送数据到其他器件,这时候主机即为发送器。由总线上接收数据的器件则为接收器。常用的串行扩展总线有:I2C总线单总线SPI总线I2C总线的通信协议需要掌握以下6点:1.起始信号2.终止信号3.写数据4.读数据5.应答信号
转载 1月前
433阅读
注:此代码非常依赖编译器,环境不一样,效果也可能不一样,虽然效果可能不同,但底层原理不变,思路才是重中之重!这里本人使用的是vs2019编译器。 文章目录1. 正文1.1 代码运行结果1.2 调试过程1.3 发现死循环原因1.4 为什么i会改变?1.5 底层原理2. 总结 1. 正文这里有这样一段代码:int main() { int i = 0; int arr[] = { 1,
要写的内容好像有点标题党的意思。早上收到邮件让我在860x_irq里打log看是不是插下充电器时会收到中断。结果最后还是发生了一次没有收到中断的情况。这个问题有点纠结啊。具体是啥也没有必要写了。估计应该是硬件有缺陷。上午服务器买了三块硬盘,做了一个raid5,我把硬盘扩展到分区上去了。三个300G的,做个raid后变600G,幸好上次修改服务器的时候把/work工作分区做成了lvm,这次扩展起来方
转载 10月前
45阅读
i2c-dev3.1 概述之前在介绍I2C子系统时,提到过使用i2c-dev.c文件在应用程序中实现我们的I2C从设备驱动。不过,它实现的是一个虚拟,临时的i2c_client,随着设备文件的打开而产生,并随着设备文件的关闭而撤销。I2c-dev.c针对每个I2C适配器生成一个主设备号为89的设备文件,实现了i2c_driver的成员函数以及文件操作接口,所以i2c-dev.c的主
转载 1月前
374阅读
下面的各个标题中的内容都是按照文档及各渠道的学习(主要看的是B站的江科大自化协)查询而记录的不同模块的最基本原理,没有多余的废话,一看就明白,每个实验都是上电通过OK的。由于复杂的操作都是由简单组合而成的,因此像网上的那些教程,比如跑马灯,动态数码管显示,本文均未给出具体代码,因为知道了如何去控制硬件,那上述操作就只需要处理代码逻辑就行了。所有的实验,原理都是基于单片机STC89C516,同系列的
#背景 其实这篇文章在很久之前就写过解决方法了。在经过不断的实践和深究后发现,硬件 I2C 死锁的问题在ST的官方手册中的勘误手册(errata)中早就提供解决方案,只是我没有重视官方的文档,一直在网络寻求帮助。即使已经有官方的解决方案,但是还有很多人(包括以前的我)在怀疑 STM32 系列的 I2C 有硬件 BUG。这也告诉我们:网上资源虽丰富,但还是得通过“金睛火眼”来辨别。讲真的,为了解决
转载 9月前
298阅读
一什么是自动化测试 二移动自动化测试的流程 三移动自动化测试的优点 四移动自动化测试的缺点 五移动测试自动化框架Android 六Appium 我选择的是Appium为什么呢 Appium简介 Appium的要求 Appium概念 Appium的原理 七什么是黑盒白盒测试一、什么是自动化测试 自动化测试是把以人为驱
如果是使用STM32CbueMX生成 I2C 的代码,使用 I2C 读写 过程会出现HAL_ERROR。这个时候一般有两种选择,          方式一:是选择IO模拟I2C;          方式二:是排查代码问题解决硬件I2C。使用DMA的时候有时候DMA启动失败,往往这是时候我们
转载 2024-07-07 13:46:12
2830阅读
文章目录10 bit地址写操作组合操作10位地址中的保留地址1.广播寻址2.Start Byte3.Bus clear 10 bit地址I2C总线中使用10位地址扩展了7位地址位数,但是10位地址和7位地址的设备可以连接到相同的I2C总线中,并且7位和10位地址均可以在所有总线速度模式中使用。在产生开始条件或重复开始后,紧跟其后产生10位地址。10位地址要占据两个字节。第一个字节中,前7位是
转载 2024-10-11 17:32:43
138阅读
i2c.h#ifndef I2C_H #define I2C_H #include <STC8H.H> sbit SCL = P3^2; sbit SDA = P3^3; static bit I2C_Flage; /*P_SW2*/ #define EAXFR 0x80; //XFR寄存器使能 #define I2C_S 0x30; //I2C功能引脚切换,SCL
Linux 下使用IIC总线 读写 EEPROM by 韩大卫 @吉林师范大学 handawei@jusontech.com 转载请务必表明出处 ******************* ********************************************** 2012.7.16 1,本文给出了linux 下使用IIC总线读写EEP
对于嵌入式开发的朋友来说,I2C协议实在是再熟悉不过了,有太多的器件,采用的都是通过I2C来进行相应的设置。今天,我们就随便聊聊这个I2C协议。        I2C协议中最重要的一点是I2C地址。这个地址有7位和10位两种形式。7位能够表示127个地址,而在实际使用中基本上不会挂载如此多的设置,所以很多设备的地址都采用7位,所以本文接下来的说明
I2C跟串口一样,仅需2根线通讯即可,在某些引脚紧张的应用中非常有用,不过I2C相比于串口,通讯协议更简单一点,距离也更短一些,仅限于板间通信。大多数IC都支持I2C协议。 I2C的时序图为: I2C数据传输是在起始条件和停止条件之间。起始条件和停止条件都是SCL为高一段时间产生。起始条件为SDA从高变为低,停止条件为SDA从低变为高。I2C数据传输规则为,第一字节必须为地址
转载 2024-05-06 09:22:25
1217阅读
其实OLED算是非常常用的一个小模块了,之前用的一直用的是软件模拟的IIC,总的来说感觉还是都是有点"答辩",经常莫名其妙的就点不亮的,用了cubemx之后硬件iic配置就非常方便了,还是想用硬件iic,一方面是速率快,二是稳定。在百度搜了一圈也没发现什么好的,github上也有的是一堆答辩,找到一个用起来很不错的就分享一下github上的一个开源库。链接如下https://github.com/
先来点题外话~网上说STM32F103的IIC有瑕疵!就当是有些短板吧, 个人觉得,用起来肯定没问题,只是不好用。人家说ST公司考虑到专利问题,没按飞利浦的标准来。导致STM32的IIC使用起来非常繁杂。下面就讲讲用STM32 IO口模拟IIC的注意问题:       IIC总线时序: 我就因为没理解好应答,吃了亏。讲一讲IIC的几个重要状态
转载 6月前
140阅读
  • 1
  • 2
  • 3
  • 4
  • 5