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通信 的相关文章

  • scl sda 是什么接口_SOC设计控制接口IIC

    IIC全称为Inter Integrated Circuit 集成电路总线 IIC接口只有两根线 SCL SDA SCL为同步时钟线 SDA为数据线 通SPI不同的是 数据线为双向接口 也就是说 发送接收都走这根线 IIC是一种多向控制总线
  • 对IIC总线时序的一点理解以及ACK和NACK(NAK)

    参考自 xff1a http blog chinaunix net uid 16100003 id 3059814 html 关于IIC的响应问题 xff1a 对于每一个接收设备 xff08 从设备 xff0c slaver xff09 x
  • 舵机控制(STM32F103C8T6)

    前言 本文是以STM32F103C8T6作为主控芯片 xff0c 通过PB6端口输出PWM xff0c 实现控制180 舵机 一 舵机控制原理 xff08 一 xff09 概述 舵机是一种位置伺服驱动器器 xff0c 是一种带有输出轴的小装
  • IIC总线的时钟同步和总线仲裁

    IIC简介 xff1a IIC 即Inter Integrated Circuit 集成电路总线 xff09 xff0c 这种总线类型是由飞利浦半导体公司在八十年代初设计出来的 xff0c 主要是用来连接整体电路 ICS xff0c IIC
  • STM32基于IIC协议的OLED模块的使用

    前言 一 项目涉及的内容 项目简介 二 模块实操 1 IIC模块 1 1 IIC协议格式 1 2 开始信号与停止信号 1 3 写数据 1 3 1 硬件IIC代码编写 1 3 2 软件模拟IIC代码编写 2 OLED板块 前言 本篇文章对使用
  • 基于STM32平台的BMP180测试(模拟IIC)

    1 测试描述 xff1a 使用模拟IIC xff0c 从BMP180中获取ID号 温度值 气压值以及计算海拔高度 2 测试准备 xff1a 硬件平台 xff1a 原子战舰V3开发板 测试工具 xff1a 逻辑分析仪 串口调试工具 3 数据手
  • STM32 模拟IIC驱动MS5607气压传感器调试记录

    标题 STM32 模拟IIC驱动MS5607调试记录 因项目需求 xff0c 需使用MS5607的作为检测气压 xff0c 再此写下自己遇见的问题以及调试记录 硬件原理图如下 xff1a IIC接口总线使用了气压传感器 xff0c SHT3
  • IIC上拉电阻的选择

    上周项目评审的时候 xff0c 评审部门问了我一个问题 xff1a 为什么单片机内部有上拉电阻 xff0c 你们还要用外部的上拉电阻 xff1f 我的答复如下 xff1a 上拉电阻的选取要考虑上限值和下限值这两点 xff1a 上限值的最大限
  • 通信协议(三)——IIC协议

    1 基础知识 1 1 概念 IIC通讯协议 Inter xff0d Integrated Circuit xff0c 也常被写作I2C 是由 Philips 公司开发的一种简单 双向二线制同步串行总线 xff0c 只需要两根线即可在连接于总
  • 【STM32】STM32F103C8T6+L298N通过PWM控制直流电机转速

    系列文章目录 STM32 新建工程模板及配置 STM32 STM32与PC端 HC 06 ROS进行USART串口通信 ROS ROS上位机使用Serial库和boost asio库与STM32进行USART通讯 STM32 STM32F1
  • 【通信协议】IIC通信协议详解

    IIC的基本介绍 IIC总线的发展 xff1a 芯片间总线 xff08 Inter Interface Circuit xff0c IIC xff09 xff0c 是应用广泛的芯片间串行扩展总线 目前世界上采用的IIC总线一共有两个规范 x
  • 【stm32CubeMX】STM32F103c8t6串口通信

    stm32CubeMX STM32F103c8t6串口通信发送 39 hello windows 39 一 串口通信协议1 UART协议2 RS 2323 RS 485 二 USB转TTL三 配置CubeMX并建立工程四 串口通信实现五 k
  • 【STM32CubeMX】使用STM32F103C8T6输出PWM波形实现呼吸灯

    STM32CubeMX 使用STM32F103C8T6输出PWM波形实现呼吸灯 一 关于PWM二 Cube MX创建工程三 修改代码四 效果展示五 总结六 参考与代码下载 一 关于PWM 1 关于PWM 含义 PWM xff08 Pulse
  • spi,iic,uart,pcie区别

    一 spi SPI 是英语Serial Peripheral interface的缩写 xff0c 顾名思义就是串行外围设备接口 xff0c 是同步传输协议 xff0c 特征是 xff1a 设备有主机 xff08 master xff09
  • stm32F103C8T6串口通信发送Hello Windows

    本文是基于STMF103C8T6 芯片及开发板 xff0c 在深入理解串口通信的原理后完成实操 xff0c 发送Hello Windows 文章目录 一 通信方式1 串行通信2 并行通信3 同步通信和异步通信 二 串口通信协议1 串口通信协
  • IIC 驱动OLED

    IIC总线可以驱动很多器件 xff0c 比较常见的有OLED EEPROM存储器 xff08 AT24C02 xff09 温度传感器 xff08 LM75A xff09 温湿度传感器 xff08 DHT11 xff09 等 有关IIC总线协
  • STM32F103C8T6 PWM驱动舵机(SG90)

    小知识 xff1a 同一个定时器 xff0c 不同通道输出不同输出PWM的特点 对于同一个定时器的不同通道输出PWM xff0c 因为它们是共用一个计数器的 xff0c 所以频率必须一样 xff0c 而占空比由各自的CCR决定 xff0c
  • UART,SPI,IIC,RS232通信时序和规则

    一 UART 1 串口通信方式 2 串口通信步骤 注意 xff1a 串口协议规定 xff0c 闲置时必须是高电平 校验位 xff1a 是使用奇偶校验 停止位必须高电平 一个0和多个0区分是靠掐时间 异步通信 xff1a 时钟各不一样 二 I
  • 【N32L40X】学习笔记14-在RT-thread系统中读取eeprom数据

    eeprom 说明 eeprom介绍 AT24C01A 1K串行EEPROM 内部组织16页8字节 1K需要一个7位数据字地址进行随机字寻址 AT24C02 2K串行EEPROM 内部组织32页8字节 2K需要一个8位数据字地址进行随机字寻
  • I2C走线技巧、及上拉电阻、电源电压、总线电容三者间的函数关系

    目录 I2C总线PCB布线注意事项 博客其他文档可以学习 https www cnblogs com zhiqiang zhang I2C总线线路的走线方式 I2C器件与I2C总线的接线方式 I2C总线连接规范 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