2026年了,ai网页设计方面的平台有哪些变化呢?
2026/7/30 19:35:24
仲裁过程
当两个或多个主设备同时尝试发起通信时,仲裁过程如下:
通信流程
空闲状态
开始条件
传输数据
应答条件
停止条件
代码(此处为了理解时序,引脚配置为推挽,实际要配置为开漏)
/* Private define ------------------------------------------------------------*/// 引脚定义 自行选择要用的引脚 此处不做定义#defineIIC_SDA_PIN#defineIIC_SDA_GPIO_PORT#defineIIC_SDA_GPIO_CLK#defineIIC_SCL_PIN#defineIIC_SCL_GPIO_PORT#defineIIC_SCL_GPIO_CLK// IIC引脚电平操作#defineIIC_SDA_LOW()GPIO_ResetBits(IIC_SDA_GPIO_PORT,IIC_SDA_PIN)#defineIIC_SDA_HIGH()GPIO_SetBits(IIC_SDA_GPIO_PORT,IIC_SDA_PIN)#defineIIC_SCL_LOW()GPIO_ResetBits(IIC_SCL_GPIO_PORT,IIC_SCL_PIN)#defineIIC_SCL_HIGH()GPIO_SetBits(IIC_SCL_GPIO_PORT,IIC_SCL_PIN)#defineIIC_SDA_READ()GPIO_ReadInputDataBit(IIC_SDA_GPIO_PORT,IIC_SDA_PIN)/* Private functions ---------------------------------------------------------*//** * @brief IIC底层GPIO初始化 * @param None * @retval None */voidIIC_LowLevel_Init(void){GPIO_InitTypeDef GPIO_InitStructure;// 使能GPIO时钟RCC_AHB1PeriphClockCmd(IIC_SDA_GPIO_CLK|IIC_SCL_GPIO_CLK,ENABLE);// IIC引脚配置(推挽输出+上拉,符合IIC总线规范)GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;// 上拉// SDA引脚配置GPIO_InitStructure.GPIO_Pin=IIC_SDA_PIN;GPIO_Init(IIC_SDA_GPIO_PORT,&GPIO_InitStructure);// SCL引脚配置GPIO_InitStructure.GPIO_Pin=IIC_SCL_PIN;GPIO_Init(IIC_SCL_GPIO_PORT,&GPIO_InitStructure);// 总线空闲状态:SDA/SCL均为高IIC_SDA_HIGH();IIC_SCL_HIGH();delay_us(10);// 初始延时}/** * @brief IIC SDA引脚模式切换(输出/输入) * @param Mode: 引脚模式(GPIO_Mode_OUT/GPIO_Mode_IN) * @retval None */voidIIC_SDAPinModeSet(GPIOMode_TypeDef Mode){GPIO_InitTypeDef GPIO_InitStructure;RCC_AHB1PeriphClockCmd(IIC_SDA_GPIO_CLK,ENABLE);GPIO_InitStructure.GPIO_Mode=Mode;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;// 上拉GPIO_InitStructure.GPIO_Pin=IIC_SDA_PIN;GPIO_Init(IIC_SDA_GPIO_PORT,&GPIO_InitStructure);}/** * @brief IIC起始信号(SCL高时,SDA从高拉低) * @param None * @retval None */voidIIC_Start(void){IIC_SDAPinModeSet(GPIO_Mode_OUT);IIC_SDA_HIGH();IIC_SCL_HIGH();delay_us(5);// 时序延时,保证总线稳定IIC_SDA_LOW();delay_us(5);IIC_SCL_LOW();}/** * @brief IIC停止信号(SCL高时,SDA从低拉高) * @param None * @retval None */voidIIC_Stop(void){IIC_SDAPinModeSet(GPIO_Mode_OUT);IIC_SCL_LOW();IIC_SDA_LOW();delay_us(5);IIC_SCL_HIGH();delay_us(5);IIC_SDA_HIGH();delay_us(5);}/** * @brief IIC发送1字节数据(MSB先行) * @param byte: 待发送字节 * @retval None */voidIIC_Send(uint8_tbyte){uint8_tcnt=0;IIC_SDAPinModeSet(GPIO_Mode_OUT);for(cnt=0;cnt<8;cnt++){IIC_SCL_LOW();delay_us(2);// 输出当前位(最高位先行)if(byte&0x80)IIC_SDA_HIGH();elseIIC_SDA_LOW();delay_us(2);byte<<=1;IIC_SCL_HIGH();delay_us(2);}IIC_SCL_LOW();delay_us(2);}/** * @brief 检测IIC从机应答 * @param None * @retval true: 应答成功 false: 无应答 */boolIIC_IsACK(void){bool status=false;IIC_SDAPinModeSet(GPIO_Mode_IN);// 切换为输入模式读应答delay_us(2);IIC_SCL_LOW();delay_us(2);IIC_SCL_HIGH();delay_us(2);// 从机应答:SDA拉低if(!IIC_SDA_READ())status=true;elsestatus=false;IIC_SCL_LOW();delay_us(2);returnstatus;}/** * @brief 主机发送应答/非应答 * @param ack: 0=应答 1=非应答 * @retval None */voidIIC_SendAck(uint8_tack){IIC_SDAPinModeSet(GPIO_Mode_OUT);IIC_SCL_LOW();delay_us(2);if(ack)IIC_SDA_HIGH();// 非应答elseIIC_SDA_LOW();// 应答delay_us(2);IIC_SCL_HIGH();delay_us(2);IIC_SCL_LOW();delay_us(2);}/** * @brief IIC读取1字节数据(MSB先行) * @param None * @retval 读取到的字节 */uint8_tIIC_Read(void){uint8_tcnt=0;uint8_tdata=0;IIC_SDAPinModeSet(GPIO_Mode_IN);for(cnt=0;cnt<8;cnt++){IIC_SCL_LOW();delay_us(2);IIC_SCL_HIGH();delay_us(2);data<<=1;data|=IIC_SDA_READ();// 读取当前位delay_us(1);}IIC_SCL_LOW();delay_us(2);returndata;}主流芯片:SSD1306(本屏所用)
核心特点:内置升压功能,无需额外设计升压电路(也支持外部升压,参考数据手册)
存储结构:每页128字节,共8页,刚好匹配128**64点阵*
与SSD1106的区别:
点击此处获取移植代码
效果
需使用专用字模软件生成汉字、图片的点阵数据,存入字模库(oledfont.h)