当前位置: 首页 > news >正文

网站商城系统设计网站建设的书籍有哪些

网站商城系统设计,网站建设的书籍有哪些,中国手表网站,跨境电商如何开店运营文章目录 一、I2C总线原理#xff08;掌握#xff09;1.1 硬件构成1.2 传输位1.3数据传输格式 二、STM32的I2C特性和结构三、STM32的I2C通信实现#xff08;硬件实现方式#xff09;3.1 I2C主模式 四、应用实例 一、I2C总线原理#xff08;掌握#xff09; 1.1 硬件构成… 文章目录 一、I2C总线原理掌握1.1 硬件构成1.2 传输位1.3数据传输格式 二、STM32的I2C特性和结构三、STM32的I2C通信实现硬件实现方式3.1 I2C主模式 四、应用实例 一、I2C总线原理掌握 1.1 硬件构成 I2C总线由串行数据线SDA和串行时钟线CL构成总线上的每个器件都有一个唯一的地址。I2C总线规范要求SDA和SCL可双向通信即一个器件既可以接收也可以发送数据或时钟因此I2C信号线SDA和SCL采用开集电极输出或开漏极输出方式。I2C总线必须通过上拉电阻或电流源才能够正确收发数据。 I2C总线接口内部等效电路包括输入缓冲电路与开集电极输出晶体管或开漏极MOS管。当总线处于空闲状态时由于上拉电阻的作用总线呈现高电平如果某个芯片需要输出数据可以通过输出驱动实现数据传输。开集电极出书电路有一个缺点随着总线长度增加输出等效电容也随之增加上拉电阻将严重影响总线通信速度。原因是信号变化要通过RC充放电回路从而降低了信号的转换速度。为了克服I2C总线这个缺点NXP公司开了有源I2C总线终端它采用两个互联的充电泵来等效上拉电阻信号变化瞬间有源器件可以提供相当大的充放电电流加快信号转换速率降低寄生电容的影响。 1.2 传输位 数据有效性 I2C总线以串行方式传输数据数据传输是按照时钟节拍进行的。时钟线每产生一个时钟脉冲数据线传输一位数据。I2C总线协议标准规定SDA线上的数据必须在时钟线为高电平时保持稳定数据线电平状态只能在时钟线位低电平时改变在标准模式下高低电平宽度必须不小于4.7us,I2C数据有效示意图如下 起始条件和停止条件 当时钟线为高电平时如果SDA数据为逻辑高电平则代表数字1如果SDA数据线为低电平时则代表数据0.除此之外在SCL为高电平时还会有数据线SDA出现上升沿后下降沿等两种状态。I2C总线协议规定SCL时钟线为高电平时且SDA为下降沿表示起始信号SCL时钟线为高电平且SDA为上升沿表示停止信号。I2C总线数据传输必须以起始信号启动传输以停止信号结束一次数据传输I2C起始位和停止位如下 重复开始信号 在I2C总线上由主机发送一个起始位启动一次数据传输后在发送停止位前主机可以再发送一次起始位这个信号称为重复起始位。它可以帮助主机再不丧失总线控制权的前提下改变数据传输方向或切换到与其他从机通信它的实现方法是再时钟信号为高电平时SDA由高电平向低电平跳变产生一个重复起始位它本质上就是一个起始位。应答信号与非应答信号 I2C总线协议规定发送器每发送一个字节8bit数据接收器必须产生一个应答信号或非应答信号。实现方法是发送器发送完8位数据后第9个时钟信号将数据线置高电平接收器根据通信状态可以将数据线拉低产生一个应答信号或保持数据线为高电平产生一个非应答信号。 1.3数据传输格式 一般情况下一个标准I2C通信由四部分组成起始信号、从机地址、数据传输、停止信号。I2C通信由主机发送一个起始信号来启动然后由主机对从机寻址并决定数据传输方向。I2C总线上传输数据的最小单位是一个字节首先发送数据位最高位每传送完一个字节接收器必须发送一个应答位如果数据接收器来不及处理数据可以通过拉低时钟线SCL来通知数据发送器暂停传输每次通信的数据字节数是没有限制的全部数据传送结束后由主机发送停止信号结束通信。I2C通信时序如下 I2C总线寻址约定 I2C总线采用软件方法实现从机寻址来简化总线连接I2C总线采用了独特的寻址约定规定了起始信号后的第一个字节位寻址字节用来寻址被控器件并规定数据传输方向。目前I2C支持7位寻址方式和10位寻址方式为了使读者更容易理解I2C操作方式重点解释7位寻址模式再掌握7位寻址模式后可以很容易的理解10位寻址模式。 在7位寻址模式中寻址字节由从机的7位地址位D7~D1和1位读写位D0组成。当读写位D01时表示从下一个字节开始主机从从机读取数据当读写位D00时表示从下一个字节开始主机将数据传输给从机。主机发送起始信号后立即传送寻址字节总线上的所有器件都将寻址字节中的7位地址与自己的地址比较如果两者相同则该器件认为被主机寻址并发送应答信号寻址字节中的读写位决定了主机和从机时发送器还是接收器。 主机作为被控器时其7位地址在I2C总线地址寄存器中给出为软件地址而非单片机类型的外围器件地址完全由器件类型与引脚电平给定。在I2C总线中不允许有两个地址相同的器件否则就会造成传输错误。数据传世模式 1主机从从机读取N个字节 主机首先产生起始信号然后发送寻址字节寻址字节传输完毕主机释放数据线数据线拉高,并产生一个时钟信号等待被寻址器件应答信号。 被寻址器件一旦检测到寻址地址与自己的地址相同则产生一个应答信号从机发送完应答信号后开始发送数据。从机每发送完一个字节数据主机产生一个应答信号。 当数据传送完毕后主机产生一个非应答信号结束数据传输然后主机产生一个停止信号结束通信或产生一个重复起始信号进入下一次数据传输。 在数据传输过程中主机随时可以产生非应答信号来提前结束本次数据传输。 2主机向从机写N个字节 主机首先产生起始信号然后发送寻址字节寻址自己传输完成后根据D0为判断时读取还是发送数据主机产生一个时钟信号等待从记得应答信号。 被寻址器件一旦检测到寻址地址与自身的地址相同则产生一个应答信号主机收到应答信号后开始发送数据。主机没发送一个字节的数据从机产生一个应答信号。 当数据传送完毕后主机产生一个停止信号结束数据传输或产生一个重复起始信号进入下一次数据传输。 3重复起始位 当主机在访问类似存储器器件时主机除了发送寻址地址字节来确定从机外还要发送存储单元地址内容如果需要读取存储单元数据存在着先写后读的情况为了解决这个问题可以利用重复起始信号来实现这个过程 主机首先按照2中的主机向从机写入多字节数据将存储单元地址写入从机数据传输结束后并不产生停止信号而是产生一个重复起始位然后发送寻址字节。寻址字节中读写位D01然后等待从机应答从机发完应答位后开始将数据传输给主机然后执行过程和1中相同。 重复起始位开可以让主机在不丧失总线控制权的情况下寻址下一个器件与另外一个从机进行通信。 4冲裁与同步 所有主机在SCL线上产生自己的时钟来传输I2C总线上的数据只有适中的高电平周期有限因此需要一个确定的时钟进行逐位仲裁。 二、STM32的I2C特性和结构 STM32的I2C模块具有4中工作模式即主发送器模式、主接收器模式、从发送器模式、从接收器模式。下图为I2C内部结构 三、STM32的I2C通信实现硬件实现方式 3.1 I2C主模式 在主模式时I2C接口启动数据传输并产生时钟信号。串行数据传输总是以起始条件开始并以停止条件结束。当通过START位在总线上产生了起始条件设备就进入了主模式。 以下是主模式所要求的操作顺序 ● 在I2C_CR2寄存器中设定该模块的输入时钟以产生正确的时序 ● 配置时钟控制寄存器 ● 配置上升时间寄存器 ● 编程I2C_CR1寄存器启动外设 ● 置I2C_CR1寄存器中的START位为1产生起始条件 I2C模块的输入时钟频率必须至少是: ● 标准模式下为2MHz ● 快速模式下为4MHz 发送起始条件 当总线空闲BUSY 0时发送起始信号START 1I2C接口将产生一个起始信号并切换至主模式。在主模式下设置START位将在当前字节传输完成后由硬件产生一个重开始条件起始信号一旦发出SB位被硬件置位如果中断未屏蔽则会产生一个中断。然后主设备等待读状态寄存器SR1接着将从地址写入DR寄存器。从地址的发送 从地址通过内部移位寄存器被送到SDA线上。下图中在7位地址模式时只需送出一个地址字节。一旦该地址字节被送出ADDR位被硬件置位如果中断允许则产生一个中断。然后主设备等待一次读SR1寄存器读SR2寄存器。发送数据 在发送地址和清除ADDR位后将等待发送的数据写入数据寄存器DRI2C模块通过内部移位寄存器将数据字节从DR寄存器发送到SDA线上。主设备等待发送完毕即TxE被清除如下图EV8事件。 当收到应答脉冲时TxE位被硬件置位如果允许中断则产生一个中断。如果TxE位置位并且在上一次数据发送结束之前没有写入新的数据字节到DR寄存器则BTF被置位I2C模块拉长时钟线等待数据写入DR数据寄存器数据写入后将BTF清除I2C继续发送数据。停止和结束 在DR寄存器中写入最后一个字节后通过设置STOP位产生一个停止条件如下图EV8_2然后I2C接口将自动回到从模式。 下图是I2C主模式下的数据发送示意图 四、应用实例 利用I2C控制OLED显示屏实例代码 1I2C硬件配置 void OledDriver_Init(void) {OledDriver_GPIO_Configuration();OledDriver_I2C1_Configuration(); } // //文件名称OledDriver_GPIO_Configuration //功能概要OLED显示屏引脚配置 //参数说明无 //函数返回无 // void OledDriver_GPIO_Configuration(void) {GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB , ENABLE);GPIO_InitStructure.GPIO_Pin GPIO_OLED_I2C1_SCL_PIN | GPIO_OLED_I2C1_SDA_PIN;GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_OD;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIO_OLED_I2C1_PORT, GPIO_InitStructure); } // //文件名称OledDriver_I2C2_Configuration //功能概要OLED显示屏I2C配置 //参数说明无 //函数返回无 // void OledDriver_I2C1_Configuration(void) {I2C_InitTypeDef I2C1_InitStructure;RCC_APB1PeriphClockCmd( RCC_APB1Periph_I2C1, ENABLE); I2C1_InitStructure.I2C_Mode I2C_Mode_I2C;I2C1_InitStructure.I2C_ClockSpeed I2C1_SPEED;I2C1_InitStructure.I2C_DutyCycle I2C_DutyCycle_2;I2C1_InitStructure.I2C_OwnAddress1 I2C1_OWN_ADDRESS1;I2C1_InitStructure.I2C_Ack I2C_Ack_Enable;I2C1_InitStructure.I2C_AcknowledgedAddress I2C_AcknowledgedAddress_7bit;I2C_Init(OLED_I2C,I2C1_InitStructure);I2C_Cmd(OLED_I2C,ENABLE);I2C_AcknowledgeConfig(OLED_I2C, ENABLE); } // //文件名称I2C1_Byte_Write //功能概要I2C写一个字节 //参数说明无 //函数返回无 // void I2C1_Byte_Write(uint8_t addr, uint8_t data) {// 发送开始信号I2C_GenerateSTART(OLED_I2C,ENABLE);// 检查EV5事件while(!I2C_CheckEvent(OLED_I2C,I2C_EVENT_MASTER_MODE_SELECT)); // 检测是否作为主机开始信号是否成功// 发送设备写地址I2C_Send7bitAddress(OLED_I2C,OLED_SLAVE_WRITE_ADDR,I2C_Direction_Transmitter);// 检查EV6事件while(I2C_CheckEvent(OLED_I2C,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED) ERROR); // 检查地址是否发送成功// 发送设备内部地址I2C_SendData(OLED_I2C,addr);// 检查EV8_1事件while(I2C_CheckEvent(OLED_I2C,I2C_EVENT_MASTER_BYTE_TRANSMITTED) ERROR); // 检查移位寄存器中是否还有数据// 发送数据I2C_SendData(OLED_I2C,data);// 检查EV8_2事件while(I2C_CheckEvent(OLED_I2C,I2C_EVENT_MASTER_BYTE_TRANSMITTED) ERROR); // 检查移位寄存器中是否还有数据// 发送停止信号I2C_GenerateSTOP(OLED_I2C,ENABLE); } // //文件名称I2C1_Page_Write //功能概要I2C写多个字节 //参数说明无 //函数返回无 // void I2C1_Page_Write(uint8_t addr, uint8_t *pdata,uint16_t Num_ByteToWite) { // I2CTimeout I2CT_LONG_TIMEOUT;// 发送开始信号I2C_GenerateSTART(OLED_I2C,ENABLE);// 检查EV5事件while(I2C_CheckEvent(OLED_I2C,I2C_EVENT_MASTER_MODE_SELECT) ERROR); // 发送设备写地址I2C_Send7bitAddress(OLED_I2C,OLED_SLAVE_WRITE_ADDR,I2C_Direction_Transmitter);// 检查EV6事件while(I2C_CheckEvent(OLED_I2C,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED) ERROR); // 检查地址是否发送成功// 发送设备内部地址I2C_SendData(OLED_I2C,addr);// 检查EV8_1事件while(I2C_CheckEvent(OLED_I2C,I2C_EVENT_MASTER_BYTE_TRANSMITTED) ERROR); // 检查移位寄存器中是否还有数据while(Num_ByteToWite){I2C_SendData(OLED_I2C,*pdata);Num_ByteToWite--;pdata;}// 检查EV8_2事件while(I2C_CheckEvent(OLED_I2C,I2C_EVENT_MASTER_BYTE_TRANSMITTED) ERROR); // 发送停止信号I2C_GenerateSTOP(OLED_I2C,ENABLE); }
http://www.pierceye.com/news/403776/

相关文章:

  • 试剂产品商城网站建设杭州网站现场备案
  • 高唐企业建网站服务商wordpress google
  • 重庆网站开发商城最近新闻有哪些
  • 电商网站设计线路图有哪些网络推广平台
  • 海门市建设局网站科技与应用
  • 北京做网站s免费做app网站有哪些
  • 免费制作网页的网站网络营销师报名官网
  • 长沙网站制作好公司网络服务模型
  • 网站开发的时间流程微信平台可以做微网站吗
  • 镇江网站seo天猫网店代运营
  • 吴江城乡住房和城乡建设局网站怎么给别人做网站优化
  • 名师工作室网站建设 意义网站图片上浮动文字
  • 做co的网站商城网站不备案
  • 黄山建设网站公司电话网站下载链接怎么做
  • 开发企业网站多少钱电视剧排行榜百度搜索风云榜
  • 什么网站做软文装修公司报价如何计算
  • 网站开发免费视频播放器应用公园app免费制作
  • 道路建设去什么网站能看到做内贸注册什么网站
  • 代理东莞网站制作公司wordpress前台用户中心代码
  • 做拼团网站下载wap浏览器
  • 网站建设合同文百科阿里云加WordPress建站
  • 服装购物网站排名ppt制作神器
  • 长沙营销策划公司排名如何优化企业网站
  • 北京制卡厂家做卡公司北京制卡网站_北京制卡_北京 去114网wordpress 关闭注册
  • 网站建设技术优势广州天河区医院
  • python和php网站开发中国十大公司排行榜
  • 网站栅格如何建设一个外卖订餐平台网站
  • 浙江省网站建设报价群晖wordpress不成功
  • 音乐网站制作策划书网站建设公司的服务公司
  • 南昌定制网站开发多少钱手机在线网页制作