(五)STM32F407 cubemx IIC驱动OLED(1)IIC协议篇

(五)STM32F407 cubemx IIC驱动OLED(1)IIC协议篇

   这篇文章主要是个人的学习经验,想分享出来供大家提供思路,如果其中有不足之处请批评指正哈。
  废话不多说直接开始主题,本人是基于STM32F407VET6芯片,但是意在你看懂这篇文章后,不管是F1,F4,H7等一系列系统硬件IIC配置都能明白如何通过参考手册去学习配置。而不是Ctrl c,Ctrl v。这篇文章大致的简述一下IIC协议,对IIC协议有一定的认识。

1)I2C 简介

  I2C(内部集成电路)总线接口用作微控制器和 I2C 串行总线之间的接口。它提供多主模式功能,可以控制所有 I2C 总线特定的序列、协议、仲裁和时序。它支持标准和快速模式。它还 与 SMBus 2.0 兼容。根据器件的不同,可利用 DMA 功能来减轻 CPU 的工作量。

2)I2C 主要特性

1.I2C 主模式特性:— 时钟生成 — 起始位和停止位生成
2.I2C 从模式特性:— 可编程 I2C 地址检测 — 双寻址模式,可对 2 个从地址应答 — 停止位检测
3.7 位/10 位寻址以及广播呼叫的生成和检测
4.支持不同的通信速度:— 标准速度(高达 100 kHz) — 快速速度(高达 400 kHz)

3)I2C模式选择

   从发送器 、从接收器 、主发送器 、主接收器。
   接下来就要介绍从接收端OLED,主发送端STM32。

主发送端

   在主模式下,I2C 接口会启动数据传输并生成时钟信号。串行数据传输始终是在出现起始位时开始,在出现停止位时结束。起始位和停止位均在主模式下由软件生成(也就是STM32编写)。 在从模式下,该接口能够识别其自身地址(7 或 10 位)以及广播呼叫地址。数据和地址均以 8 位字节传输,MSB 在前。起始位后紧随地址字节(7 位地址占据一个字节; 10 位地址占据两个字节,注意这)。地址始终在主模式下传送。 在字节传输 8 个时钟周期后是第 9 个时钟脉冲,在此期间接收器必须向发送器发送一个应答位。请参见图。
在这里插入图片描述    到这就需要明白两个概念:十位数据或者七位数据数据格式不同
    首先不同之处在于:在10 位寻址模式下,比较对象还包括头序列(11110xx0),其中,xx 表示该地址的两个最高有效位。头或地址不匹配:接口会忽略它并等待下一个起始位。头匹配(仅针对 10 位模式):如果 ACK 位置 1,则接口会生成一个应答脉冲并等待 8 位从地址。

从接受端

在这里插入图片描述  数据格式七位构成:起始位、从发送地址位、应答位、数据、应答位、停止位。
  数据格式十位长度:起始位、地址头序列、从发送地址位长度为2个字节、地址头序列、应答位、数据、应答位、停止位

主发送端

在这里插入图片描述1. EV5、EV6、EV9、EV8_1 和 EV8_2 事件可延长 SCL 低电平时间,直到相应的软件序列结束为止。
2. 如果软件序列在下一个字节传输结束之前未能完成,EV8 事件会延长 SCL 低电平时间。
至此对OLED部分的IIC有了一定的了解,下一步开始了解硬件OLED。

  • 25
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您可以通过以下代码来在STM32F407上使用IIC驱动OLED屏幕进行显示: ```c #include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" #include "oled.h" #include "myiic.h" int main(void) { int i; delay_init(168); LED_Init(); IIC_Init(); OLED_Init(); while(1) { OLED_P8x16Str(0,0,"Hello"); OLED_P8x16Str(0,2,"OLED Open"); OLED_P8x16Str(0,4,"Just me"); OLED_P6x8Str(0,6,"hbwl"); OLED_P6x8Str(0,7,"heltec.taobao.com"); delay_ms(1000); GPIO_ResetBits(GPIOF,GPIO_Pin_9); GPIO_SetBits(GPIOF,GPIO_Pin_10); delay_ms(500); GPIO_SetBits(GPIOF,GPIO_Pin_9); GPIO_ResetBits(GPIOF,GPIO_Pin_10); delay_ms(500); } } ``` 在这段代码中,我们首先进行了一些初始化操作,然后通过调用`OLED_P8x16Str`和`OLED_P6x8Str`函数来在OLED屏幕上显示文字。最后,我们通过控制GPIO引脚的电平来实现屏幕的闪烁效果。 请注意,这段代码中使用了一些头文件和函数,您需要确保这些文件和函数的定义正确引入到您的工程中。另外,您还需要根据您的具体硬件连接情况进行相应的配置。 希望这段代码能帮助您成功使用IIC驱动OLED屏幕进行显示。如果您有任何问题,请随时向我提问。 #### 引用[.reference_title] - *1* *2* *3* [STM32F407ZGT6的OLEDIIC的实现(全代码)](https://blog.csdn.net/qq_53945939/article/details/120225955)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RouDragon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值