STM32f103c8t6与iML7991的IIC通信

2023-05-16

一、iML7991

7991是应用在TFT-LCD领域的P-GAMMA芯片,利用IIC对其内部的GAMMA值(共14个)进行设定。7991地址表参考图1.1。
图1.1 部分GMAMA值
可以看到两个GAMMA值共用3个地址,补充一点,gamma值是画面显示的参考绑点值,相关LCD等方面的知识不做介绍。7991写操作示意图,iic规则与通用的iic并无区别。
7991写操作示意图,iic规则与通用的iic并无区别
7991的读操作稍微有点差异,但是问题不大,需要重新产生start条件。

二、stm32f10x端的iic配置

将stm32作为主机,选取GPIOB6(SCL)与 GPIOB7(SDA)作为iic传输线,采用stm32f10x函数库里的函数编写代码。

I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
I2C_InitStructure.I2C_DutyCycle =I2C_DutyCycle_2;//Tlow/Thight=2
I2C_InitStructure.I2C_OwnAddress1 = 0x00;
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;//应答
I2C_InitStructure.I2C_AcknowledgedAddress=I2C_AcknowledgedAddress_7bit;
I2C_InitStructure.I2C_ClockSpeed = 400000;//400K

stm32f10x的函数库非常丰富,可以直接利用库函数进行编写。事件的判断是主要的难点。

/*写操作*/
void WriteByte(u8 addr,u8 data)
{
	while(I2C_GetFlagStatus(I2C1,I2C_FLAG_BUSY));//判断是否繁忙
	I2C_GenerateSTART(I2C1, ENABLE);//产生START 条件	
	while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT));//检查最近一次事件是否是EV5事件	
	I2C_Send7bitAddress(I2C1,Slave_address,I2C_Direction_Transmitter);//Slave_address为从机器件地址 
	while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));//检查最近一次事件是否是EV6事件
	I2C_SendData(I2C1, addr);//addr为器件内部的寄存器地址	
	while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));//检查最近一次事件是否是EV8事件
	I2C_SendData(I2C1, data);//发送数据	
	while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));//检查最近一次事件是否是EV8事件
	I2C_GenerateSTOP(I2C1, ENABLE);//产生STOP 条件
}

在这里插入图片描述
主机变为接收模式的时候,读取数据前要先将DR寄存器清楚(我在重新产生start条件后选择了事件6,结果不对,于是发现了在读数据之前要先清)

/*从 寄存器地址 读取一个byte的数据*/
u8 I2C_ReadByte(uint8_t addr)
{
	u8 ReadData;
	while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));//判断是否繁忙
	I2C_GenerateSTART(I2C1, ENABLE);//产生 START 条件
    /*先写*/	
	while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));//检查最近一次 事件是否是EV5
	I2C_Send7bitAddress(I2C1, Slave_address, I2C_Direction_Transmitter);//Slave_address从机地址
	while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));//检查最近一次 事件是否是EV6事件
	I2C_SendData(I2C1, addr);//寄存器地址
	I2C_GenerateSTART(I2C1, ENABLE);//重新产生START 条件
    /*再读*/	
	while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));//检查最近一次 事件是否是EV5
	I2C_Send7bitAddress(I2C1, Slave_address, I2C_Direction_Receiver);//此时主机变为接收模式	
	/*检查最近一次 I2C 事件是否是EV7事件!!!这里很重要*/
	while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED ));	
	ReadData=I2C_ReceiveData(I2C1);//读取数据	
	while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED));//检查事件是否为EV7读DR寄存器清除该事件		
	I2C_GenerateSTOP(I2C1, ENABLE);//产生STOP 条件	
	return ReadData;
}

三、验证

我在验证的时候加了个OLED的显示屏来显示读到的字。
先向7991中某个地址发送一个值,然后再将其读出来,最后用OLED显示出来。
在这里插入图片描述
在这里插入图片描述
将7991中的GAMMA值全部设定后放到tcon板上,显示画面正常。

四、总结

老拿公司的芯片玩确实不太好,还是买块FPGA方便点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32f103c8t6与iML7991的IIC通信 的相关文章

  • STM32F103C8T6汇编点灯

    最简单的结构 只有一个数据段 只是为了不报错而已 area Reset span class token punctuation span data span class token punctuation span readonly sp
  • 舵机控制(STM32F103C8T6)

    前言 本文是以STM32F103C8T6作为主控芯片 xff0c 通过PB6端口输出PWM xff0c 实现控制180 舵机 一 舵机控制原理 xff08 一 xff09 概述 舵机是一种位置伺服驱动器器 xff0c 是一种带有输出轴的小装
  • LPC1768 IIC通信示——PCF8563

    PCF8563与AT24C02一样 xff0c 是典型的IIC通信器件 xff0c 这里就以它为例 xff0c 编写基于LPC1768硬件IIC的通信代码 xff1a 上图是PCF8563各个寄存器地址 xff0c PCF8563的IIC地
  • OLED显示屏驱动:8080并口,IIC,SPI三种驱动方式

    本文介绍了对OLED的几种驱动方式 xff0c 8080并口 xff0c IIC xff0c SPI三种驱动方式 xff0c 采用的单片机是STM32F407 文章目录 一 OLED驱动原理介绍二 8080并口驱动方式三 IIC驱动方式四
  • PX4-5-SPI-IIC设备驱动

    在之前的分享中 xff0c 我们聊了PX4的通信框架和任务调度框架 xff0c 现在我们讲一下PX4的设备驱动 PX4支持很多种设备 xff0c 根据通信方式的不同大致分为 xff1a SPI IIC设备 串口设备 IO设备 CAN设备 这
  • 0.96OLED 4针IIC STM32-标准库版本(附源码)

    0 96OLED 4针IIC STM32标准库版本 在前面已经介绍过 xff0c 这里就不多说了 xff0c 详情请见 xff1a 0 96OLED 4针IIC STM32HAL库版本 另外 xff0c 本人在代码中封装了一个OLED显示的
  • IIC通信协议总结(详细说明完整过程)

    IIC协议简介 IIC xff08 inter integrated Circuit集成电路总线 总线支持设备之间的短距离通信 xff0c 用于处理器和一些外围设备之间的接口 xff0c 它需要两根信号线来完成信息交换 IIC的一个特殊工艺
  • IIC详细解答+ 面试 + 代码

    目录 IIC背景提炼部分 xff08 面试 xff09 xff08 详解 43 代码 xff09 协议部分IIC部分初始化 IIC 的 IO 口IIC 开始信号IIC发送一个字节IIC 读一个字节响应ACK和非响应NACKIIC 停止信号
  • iic片选PCA9548A芯片

    PCA9548A数据表 产品信息和支持 TI com iic片选深入 从上图中我们可以看到通过iic的iic 例如 iic0 扩展出8路iic来访问slave 例如8个口的光模块 那么里面的原理是什么呢 我们先来看PCA9548A 文档 需
  • stm32f103c8t6 + 串口打印 + dh1

    1 首先新建一个c8t6的工程 如果使用本程序的话 xff0c 可直接运行 xff0c 亲测有效 xff0c 如果想移植功能的同学继续往下看 程序里面的注释也写的很清楚 2 串口打印 首先拿到usart c和usart h文件放置自己的工程
  • 【STM32】STM32F103C8T6使用外部中断法和输入捕获法进行编码器测速

    系列文章目录 STM32 新建工程模板及配置 STM32 STM32与PC端 HC 06 ROS进行USART串口通信 ROS ROS上位机使用Serial库和boost asio库与STM32进行USART通讯 STM32 STM32F1
  • DHT12温湿度传感器IIC,I2C接口调试心得和代码说明

    来源 xff1a http www fuhome net bbs forum php mod 61 viewthread amp tid 61 2141 DHT11那个单总线的温湿度传感器用的很多了 xff0c aosong推出了DHT12
  • STM32——硬件IIC从机通信

    前言 xff1a 根据网上的资料 xff0c 大部分网友表示STM32自带的硬件IIC存在bug xff0c 读写时很容易卡死 自己在调试的时候也出现卡死的情况 xff0c 最后一点一点调试 xff0c 也还是调通了 本文将记录自己调试ST
  • spi,iic,uart,pcie区别

    一 spi SPI 是英语Serial Peripheral interface的缩写 xff0c 顾名思义就是串行外围设备接口 xff0c 是同步传输协议 xff0c 特征是 xff1a 设备有主机 xff08 master xff09
  • TI CC265x的IIC通讯读取IMU BMI08x数据

    SmartLink CC265x是TI公司出的无线MCU平台器件 最近玩了个小项目用TI的CC265x平板IIC接口通讯 xff0c 获取博世BMI08x陀螺仪 加速度计传感器的数据 本篇博客亦是对博客 树莓派IIC通讯获取BMI08x I
  • 【STM32】STM32F103C8T6串口通信,实现3个串口收发数据

    串口通信 xff08 Serial Communications xff09 实现单片机与电脑或者其它外设进行通信 xff0c 通信时只需两根线 xff08 TX xff0c RX xff09 就可以实现数据传输 STM32f103有三个串
  • UART、IIC、SPI、CAN通信的区别与应用

    文章目录 1 通信的基本知识1 1 数据通信的种类1 1 1 串行通信1 1 2 并行通信1 1 3 总结 1 2 数据通信的传输方向1 2 1 单工1 2 2 半双工1 2 3 全双工1 2 4 总结 1 3 数据通信的方式1 3 1 同
  • STM32F103C8T6 ADC功能

    12位逐次逼近型ADC 1us转换时间 输入电压0 3 3v和转化范围0 2 12 1 xff08 0 4095 xff09 成线性关系 2个ADC资源 xff0c ADC1和ADC2 xff0c 10个外部通道 有两种转换单元组 xff1
  • stm32f103c8t6新建环境+点灯

    stm32f103c8t6新建环境 43 点灯 简介步骤一 新建文件二 建立启动 43 用户端本身文件三 mdk内部设置四 实现基础工作效果五 点灯 总结 简介 STM32F103C8T6是一款由意法半导体公司 xff08 ST xff09
  • I2C与SPI通信总线协议

    仅以寄存器地址为8Bit的器件为例 例如MPU6500 LSM6DS3 I2C通信协议 I2C 的要点是了解I2C通信帧的组成部分 START起始位 STOP停止位 ACK NACK信号 从机器件地址 从机寄存器地址 I2C读的时序比较繁琐

随机推荐

  • C语言unsigned char、char与int之间的转换

    C语言unsigned char char与int之间的转换 2016年10月23日 18 40 50 bladeandmaster88 阅读数 xff1a 11347更多 个人分类 xff1a c语言基础 先来看一道题 xff1a cha
  • Android 内存分析(java/native heap内存、虚拟内存、处理器内存 )

    1 jvm 堆内存 dalvik 堆内存 不同手机中app进程的 jvm 堆内存是不同的 xff0c 因厂商在出厂设备时会自定义设置其峰值 比如 在Android Studio 创建模拟器时 xff0c 会设置jvm heap 默认384m
  • RabbitMq(一) RabbitMq工作模型

    RabbitMq工作模型 Mq基础RbbitMq工作模型RabbitMq基本使用原生apiSpring集成Springboot集成 RabbitMq进阶知识订单延迟关闭队列满了 总结 Mq基础 message queue 消息队列 特点 x
  • SSM整合_实现增删改查_基础环境搭建

    写在前面 SSM整合 年轻人的第一个增删改查 基础环境搭建 SSM整合 年轻人的第一个增删改查 查找 SSM整合 年轻人的第一个增删改查 新增 SSM整合 年轻人的第一个增删改查 修改 SSM整合 年轻人的第一个增删改查 删除 GitHub
  • SSM整合_实现增删改查_查找

    写在前面 SSM整合 年轻人的第一个增删改查 基础环境搭建 SSM整合 年轻人的第一个增删改查 查找 SSM整合 年轻人的第一个增删改查 新增 SSM整合 年轻人的第一个增删改查 修改 SSM整合 年轻人的第一个增删改查 删除 GitHub
  • SSM整合_实现增删改查_新增

    写在前面 SSM整合 年轻人的第一个增删改查 基础环境搭建 SSM整合 年轻人的第一个增删改查 查找 SSM整合 年轻人的第一个增删改查 新增 SSM整合 年轻人的第一个增删改查 修改 SSM整合 年轻人的第一个增删改查 删除 GitHub
  • 解决关机蓝屏 | MULTIPLE_IRP_COMPLETE_REQUESTS | klflt.sys

    已经解决蓝屏问题 xff0c 原因是卡巴斯基安全软件驱动导致 xff0c 需要卸载卡巴斯基安全软件 xff0c 详细过程如下 一 关机时蓝屏 Win10系统 xff0c 在关机动画快结束时突然蓝屏 xff0c 提示 xff1a 你的设备遇到
  • Spring注解开发_自定义注册组件、属性赋值、自动装配

    Spring注解开发 浅尝Spring注解开发 xff0c 基于Spring 4 3 12 包含自定义扫描组件 自定义导入组件 手动注册组件 自动注入方法和参数 使用Spring容器底层组件等 Spring注解开发 自定义注册组件 属性赋值
  • Spring注解开发_AOP原理及完整过程分析(源码)

    Spring注解开发 AOP原理及完整过程分析 xff08 源码 xff09 浅尝Spring注解开发 xff0c 基于Spring 4 3 12 分析AOP执行过程及源码 xff0c 包含AOP注解使用 AOP原理 分析Annotatio
  • 解决Windows中mfc110u.dll文件丢失问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 xff0c 如果是新手第一时间会认为是软件或游戏出错了 xff0c 其实并不是这样 xff0c 其主要原因就是你电脑系统的该dll文件丢失了或者损坏了 xff0c 这时你只需下载这个
  • Spring注解开发_声明式事务及原理

    Spring注解开发 声明式事务及原理 Spring注解开发 xff0c 基于Spring 4 3 12 包含声明式事务使用 基本原理分析 Spring注解开发 自定义注册组件 属性赋值 自动装配 Spring注解开发 Bean生命周期及执
  • Spring注解开发_简单理解BeanFactoryPostProcessor、BeanDefinitionRegistryPostProcessor、ApplicationListener

    Spring注解开发 简单理解BeanFactoryPostProcessor BeanDefinitionRegistryPostProcessor ApplicationListener 浅尝Spring注解开发 xff0c 基于Spr
  • Spring注解开发_Spring容器创建概述

    Spring注解开发 Spring容器创建概述 Spring注解开发 xff0c 基于Spring 4 3 12 概述Spring容器创建的过程 xff0c 包括12个方法的执行 Spring注解开发 自定义注册组件 属性赋值 自动装配 S
  • Spring注解开发_Servlet 3.0 与 SpringMVC

    Spring注解开发 Servlet 3 0 与 SpringMVC Spring注解开发 xff0c 基于Spring 4 3 12 Servlet3 0新增了注解支持 异步处理 xff0c 可以省去web xml文件 xff0c 异步处
  • nodejs nvm 环境安装踩坑记录

    nvm win10 nvm Node Version Manager 解决版本匹配问题 nvm windows 安装nvm windows 安装完nvm setup exe后 xff0c 以管理员权限重新开一个powershell窗口执行以
  • scanf(),getchar(),fgets(),gets(),cin.get()和cin.getline()读入字符串功能的用法详解

    scanf scanf 读取字符串直到出现空白符 xff08 空格 制表符 t 回车 n等 xff09 为止 xff1b 且不读入空白符 所在头文件 xff1a stdio h xff1b 语法 xff1a scanf 34 lt 格式化字
  • C++难学吗?为什么难学?如何去学?

    C 43 43 难学吗 xff1f 为什么难学 xff1f 如何去学 xff1f 经常上网 xff0c 发现最多人问的问题就是C 43 43 难不难学 而得到的回答却基本上是说很难学 xff0c 甚至有说要两年才算入门 我开始是学VB的 x
  • [STM32f10xxx库函数]定义、命名和编码规则

    STM32f10xxx库函数 定义 命名和编码规则 1 定义2 命名规则3 编码规则3 1变量3 2布尔型3 3标志位状态类型3 4功能状态类型3 5错误状态类型3 6外设 1 定义 2 命名规则 PPP 表示任一外设缩写 xff0c 例如
  • 用protues构建一个简单的升压电路

    本人最近在拼命的学习模电知识 xff0c 可是书上讲的东西记得住却不是很能理解 xff0c 为了更好的学习 xff0c 于是用proteus来做简单的电路图进行 实验 根据升压电路相关知识 xff0c 要对输入的电压进行放大有很多的办法 x
  • STM32f103c8t6与iML7991的IIC通信

    一 iML7991 7991是应用在TFT LCD领域的P GAMMA芯片 xff0c 利用IIC对其内部的GAMMA值 xff08 共14个 xff09 进行设定 7991地址表参考图1 1 可以看到两个GAMMA值共用3个地址 xff0