基于STM32的IIC总线设计

上传人:yh****1 文档编号:126207682 上传时间:2020-03-23 格式:DOC 页数:15 大小:145KB
返回 下载 相关 举报
基于STM32的IIC总线设计_第1页
第1页 / 共15页
基于STM32的IIC总线设计_第2页
第2页 / 共15页
基于STM32的IIC总线设计_第3页
第3页 / 共15页
基于STM32的IIC总线设计_第4页
第4页 / 共15页
基于STM32的IIC总线设计_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《基于STM32的IIC总线设计》由会员分享,可在线阅读,更多相关《基于STM32的IIC总线设计(15页珍藏版)》请在金锄头文库上搜索。

1、 .基于STM32的IIC总线设计摘要: 在需要远距离传输数据,而且布线不方便的情况下使用IIC总线能解决这个问题。本文通过IIC总线将从机AD采样的数据存储到EEPROM芯片里面,同时,通过IIC总线将存储的数据给其他单片机使用,并用STM32开发板进行了实验仿真。关键词: IIC总线 EEPROM ARM单片机1 引言随着大规模集成电路技术的发展,把CPU和一个单独工作系统所必需的ROM、RAM、I/O端口、A/D、D/A等外围电路集成在一个单片内而制成的单片机或微控制器愈来愈方便。目前,世界上许多公司生产单片机,品种很多。其中包括各种字长的CPU,各种容量的ROM、RAM以及功能各异的I

2、/O接口电路等等,但是,单片机的品种规格仍然有限,所以只能选用某种单片机来进行扩展。扩展的方法有两种:一种是并行总线,另一种是串行总线1。由于串行总线的连线少,结构简单,往往不用专门的母板和插座而直接用导线连接各个设备。因此,采用串行线可大大简化系统的硬件设计。PHILIPS公司早在十几年前就推出了I2C串行总线,利用该总线可实现多主机系统所需的裁决和高低速设备同步等功能。IIC 即Inter-Integrated Circuit(集成电路总线),这种总线类型是由飞利浦半导体公司在八十年代初设计出来的,主要是用来连接整体电路(ICS) ,IIC是一种多向控制总线,也就是说多个芯片可以连接到同一

3、总线结构下,同时每个芯片都可以作为实时数据传输的控制源2。这种方式简化了信号传输总线接口。AD采样AD采样2 方案设计 EEPROM ARM 单片机 ARM 单片机 ARM 单片机 IIC总线图一 方案原理图通过AD采样将我们收集到的数据输入给单片机,经过单片机处理后经IIC总线把数据存储到芯片里面,方便给其他单片机使用。由于使用的是IIC总线,只需要两根线,大大节约了成本,而且方便布线。3 工作原理物理结构上,IIC系统由一条串行数据线SDA和一条串行时钟线SCL组成。主机按一定的通信协议向从机寻址和进行信息传输。在数据传输时,由主机初始化一次数据传输,主机使数据在SDA线上传输的同时还通过

4、SCL线传输时钟。信息传输的对象和方向以及信息传输的开始和终止均由主机决定。每个器件都有一个唯一的地址,而且可以是单接收的器件或者可以接收也可以发送的器件。发送器或接收器可以在主模式或从模式下操作,这取决于芯片是否必须启动数据的传输还是仅仅被寻址。一般情况下,一个标准的IIC通信由四部分组成:开始信号、从机地址传输、数据传输、停止信号。由主机发送一个开始信号,启动一次IIC通信;在主机对从机寻址后,再在总线上传输数据。IIC总线上传送的每一个字节均为8位,首先发送的数据位为最高位,每传送一个字节后都必须跟随一个应答位,每次通信的数据字节数是没有限制的;在全部数据传送结束后,由主机发送停止信号,

5、结束通信。4 硬件设计需要用到的硬件有STM32芯片,本次设计仿真所用的是STM32F103RCT6,同时还需要EEPROM存储芯片,选择的是24C02这款芯片,为了显示是否发送成功增加量LCD显示屏,仿真平台为mini STM32开发版。其中,硬件连接图见图2。图二 STM32与24C02连接图A0、A1、A2为器件的地址选择,GND接地,VCC工作电压-1.8V-6V,WP为写保护,5、6引脚即IIC总线的时钟线和数据线4。5程序设计5.1 ADC初始化图三 ADC初始化流程图 ADC初始化流程图如图三所示。本文采用了定时采样,为了方便设置为10微秒,由于stm32的采样时间没有刚好等于1

6、0微秒的,所以用了71.5的采样周期加上固定的12.5个周期,选用72M6分频得到采样时间为7微秒,再延时3微秒实现要求值。5.2存储与读取数据首先,IIC工作前需要驱动代码。其中包括IIC初始化、IIC开始、IIC结束、ACK、IIC读写等功能。主函数工作之前需要初始化的有延时、串口、IIC等,通过按键来切换选择读取还是写入,其具体代码见附录。读取和存储数据流程图见图四:准备初始化监测总线等待地址信号 N Y产生应答 接受数据存储数据结束信号结束图四 读写和存储数据流程图6 总结特点:1) IIC总线只要求两条总线线路,一条串行数据线 SDA,一条串行时钟线 SCL。布线方便 2) 每个连接

7、到总线的器件都可以通过设定唯一的地址进行数据交换。 3)传输距离远,适合于远距离布线 。缺点:1) 从机的数量收到限制。2) 总线上主机过多会导致数据冲突效率不高。改进:1) 如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁防止数据被破坏。2)可以和智能仪表相连构建现场IIC总线系统。3)将单纯的单片机改变成智能单片机实现智能化。4)多种总线接口联合在一起再和英特网相连实现工业物联网系统5。7参考文献1陈光建,贾金玲,基于单片机12C总线系统设计J.仪器仪表学报,2006,27(6):2466-24722何立民.IIC总线应用系统设计M.北京:北京航空航天大学出版社,19953周立功

8、,张华.深入浅出ARM M.北京:北京航空航天大学出版社.2006:1-161.4 张洋,原子教你玩STM32M. 北京航空航天大学出版社,2013.45雷林,基于internet和现场总线的测控系统研究J.仪器仪表学报,2012,23(z2):690-691 资料.8附录程序主函数#include led.h#include delay.h#include sys.h#include usart.h#include lcd.h#include key.h #include 24cxx.h #include myiic.hconst u8 TEXT_Buffer=MiniSTM32 IIC T

9、EST;#define SIZE sizeof(TEXT_Buffer) int main(void) u8 key;u16 i=0;u8 datatempSIZE;NVIC_Configuration();delay_init(); /延时函数初始化 uart_init(9600); /串口初始化为9600LED_Init(); /初始化与LED连接的硬件接口 LCD_Init();KEY_Init();/按键初始化 AT24CXX_Init();/IIC初始化 POINT_COLOR=RED;/设置字体为红色 LCD_ShowString(60,50,200,16,16,Mini STM3

10、2);LCD_ShowString(60,70,200,16,16,IIC TEST);LCD_ShowString(60,90,200,16,16,ATOMALIENTEK);LCD_ShowString(60,110,200,16,16,2014/3/9);LCD_ShowString(60,130,200,16,16,WK_UP:Write KEY0:Read);/显示提示信息 while(AT24CXX_Check()/检测不到24c02LCD_ShowString(60,150,200,16,16,24C02 Check Failed!);delay_ms(500);LCD_Show

11、String(60,150,200,16,16,Please Check! );delay_ms(500);LED0=!LED0;/DS0闪烁LCD_ShowString(60,150,200,16,16,24C02 Ready!); POINT_COLOR=BLUE;/设置字体为蓝色 while(1)key=KEY_Scan(0);if(key=WKUP_PRES)/WK_UP 按下,写入24C02LCD_Fill(0,170,239,319,WHITE);/清除半屏 LCD_ShowString(60,170,200,16,16,Start Write 24C02.);AT24CXX_Wr

12、ite(0,(u8*)TEXT_Buffer,SIZE);LCD_ShowString(60,170,200,16,16,24C02 Write Finished!);/提示传送完成if(key=KEY0_PRES)/KEY0 按下,读取字符串并显示 LCD_ShowString(60,170,200,16,16,Start Read 24C02. );AT24CXX_Read(0,datatemp,SIZE);LCD_ShowString(60,170,200,16,16,The Data Readed Is: );/提示传送完成LCD_ShowString(60,190,200,16,16

13、,datatemp);/显示读到的字符串i+;delay_ms(10);if(i=20)LED0=!LED0;/提示系统正在运行i=0; ADC初始化代码void Adc_Init(void) ADC_InitTypeDef ADC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1, ENABLE ); /使能ADC1通道时钟RCC_ADCCLKConfig(RCC_PCLK2_Div6); /设置ADC分频因子6 72M/6=12,ADC最大时间不能超过14M/PA1 作为模拟通道输入引脚 GPIO_InitStructure.GPIO_Pin = GPIO_Pin

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号