I2C教程stm32hal_逻辑分析仪_oled屏幕
1.理论基础
基础通信协议之 IIC详细讲解https://zhuanlan.zhihu.com/p/556505577
【IIC总线原理】 https://www.bilibili.com/video/BV1jL4y1x7fb/?share_source=copy_web&vd_source=a5058e7a9022325237e9d20af2d2a2de
2. OLED显示屏介绍
http://t.csdnimg.cn/Q3gUk
3. 软件I2C实验+逻辑分析仪使用
3-1,CubeMx配置
3.2OLED驱动添加
- 首先在建立Hardware文件,添加OLED.c如下图所示:
. - 接着对OLED.H进行添加如下图所示:
OLED驱动链接:
OLED https://www.aliyundrive.com/s/BM82mufCiQc 点击链接保存,或者复制本段内容,打开「阿里云盘」APP
3.3 主函数代码
首先引用头文件,如下所示:
#include "OLED.h"
接着初始化OLED,如下所示:
OLED_Init(); //初始化OLED
最后进行数据读取打印,如下所示:
OLED_ShowString(1, 1, "1123");
3.4 逻辑分析仪抓取波形
3.5波形与程序对应
通过这一小节可以直观的感受到软件I2C的运行逻辑和实际现象
- 我们让程序从1断点运行到2断点,程序如下,逻辑分析仪抓取波形如下
/*引脚配置*/
#define SCL_Pin GPIO_PIN_6
#define SCL_GPIO_Port GPIOB
#define SDA_Pin GPIO_PIN_7
#define SDA_GPIO_Port GPIOB
#define OLED_W_SCL(x) HAL_GPIO_WritePin(GPIOB, SCL_Pin, (GPIO_PinState)(x))
#define OLED_W_SDA(x) HAL_GPIO_WritePin(GPIOB, SDA_Pin, (GPIO_PinState)(x))
* @brief I2C发送一个字节
* @param Byte 要发送的一个字节
* @retval 无
*/
void OLED_I2C_SendByte(uint8_t Byte)
{
uint8_t i;
for (i = 0; i < 8; i++)
{
OLED_W_SDA(Byte & (0x80 >> i));
OLED_W_SCL(1);
OLED_W_SCL(0);
}
OLED_W_SDA(1);//释放SDA总线
OLED_W_SCL(1); //额外的一个时钟,不处理应答信号
OLED_W_SCL(0);
}
/**
* @brief I2C开始
* @param 无
* @retval 无
*/
void OLED_I2C_Start(void)
{
OLED_W_SDA(1);
OLED_W_SCL(1);
OLED_W_SDA(0);
OLED_W_SCL(0);
}
/**
* @brief I2C停止
* @param 无
* @retval 无
*/
void OLED_I2C_Stop(void)
{
OLED_W_SDA(0);
OLED_W_SCL(1);
OLED_W_SDA(1);
}
- 接线实物图
3.6、oled屏幕显示
作者找不到屏幕了。。。。。
4. CubeMx硬件I2C配置
进阶-0.96oled实现贪吃蛇游戏
http://t.csdnimg.cn/wExa8