STM32模拟IIC驱动OLED屏 原理+源码 | 您所在的位置:网站首页 › sra-12vdc-al电路图 › STM32模拟IIC驱动OLED屏 原理+源码 |
处理器和芯片间的通信可以形象的比喻成两个人讲话:1、你说的别人得能听懂:双方约定信号的协议。2、你的语速别人得能接受:双方满足时序要求。 一、IIC总线的信号类型 2、停止信号:处理器让SCL时钟保持高电平,然后让SDA数据信号由低变高就表示一个停止信号。同时IIC总线上的设备检测到这个停止信号它就知道处理器已经结束了数据传输,我们就可以各忙各个的了,如休眠等。 二、IIC数据传输过程 、 基本的时序就是以上内容,接下来是源码: #include "stm32f10x.h" #include "iic.h" #include "delay.h" #include "codetab.h" /** ** 初始化IIC接口 **/ void IIC_Init(void) { GPIO_InitTypeDef GPIO_InitStructer; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructer.GPIO_Pin=GPIO_Pin_6 | GPIO_Pin_7; //6--SCL 7--SDA GPIO_InitStructer.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructer.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructer); } /** ** 设置SDA为输出 **/ void SDA_OUT(void) { GPIO_InitTypeDef GPIO_InitStructer; GPIO_InitStructer.GPIO_Pin= GPIO_Pin_7; GPIO_InitStructer.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructer.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_Init(GPIOB, &GPIO_InitStructer); } /** ** 设置SDA为输入 **/ void SDA_IN(void) { GPIO_InitTypeDef GPIO_InitStructer; GPIO_InitStructer.GPIO_Pin= GPIO_Pin_7; GPIO_InitStructer.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructer.GPIO_Mode=GPIO_Mode_IPU; GPIO_Init(GPIOB, &GPIO_InitStructer); } //开始信号 void IIC_Start(void) { SDA_OUT(); IIC_SDA=1; IIC_SCL=1; delay_us(2); IIC_SDA=0; delay_us(2); IIC_SCL=0; delay_us(2); } void IIC_Stop(void) { IIC_SCL=1; IIC_SDA=0; delay_us(2); IIC_SDA=1; delay_us(2); } /* * 返回1--应答出错 * 放回0--应答正确 */ u8 IIC_Wait_Ask(void) { int count=0; SDA_IN(); IIC_SCL=1; delay_us(2); while(READ_SDA) { count++; if(count>250) { IIC_Stop(); return 1; } } IIC_SCL=0; delay_us(2); return 0; } //写一个字节 void IIC_WriteByte(u8 data) { u8 i; SDA_OUT(); for(i=0;i |
CopyRight 2018-2019 实验室设备网 版权所有 |