基于stm32的iic总线设计毕业论文

上传人:aa****6 文档编号:38148356 上传时间:2018-04-27 格式:DOC 页数:12 大小:107.50KB
返回 下载 相关 举报
基于stm32的iic总线设计毕业论文_第1页
第1页 / 共12页
基于stm32的iic总线设计毕业论文_第2页
第2页 / 共12页
基于stm32的iic总线设计毕业论文_第3页
第3页 / 共12页
基于stm32的iic总线设计毕业论文_第4页
第4页 / 共12页
基于stm32的iic总线设计毕业论文_第5页
第5页 / 共12页
点击查看更多>>
资源描述

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

1、基于基于 STM32STM32 的的 IICIIC 总线设计总线设计摘要摘要: :在需要远距离传输数据,而且布线不方便的情况下使用 IIC 总线能解决这 个问题。本文通过 IIC 总线将从机 AD 采样的数据存储到 EEPROM 芯片里面,同 时,通过 IIC 总线将存储的数据给其他单片机使用,并用 STM32 开发板进行了 实验仿真。 关键词关键词: : IICIIC 总线总线 EEPROMEEPROM ARMARM 单片机单片机 1 1 引言引言 随着大规模集成电路技术的发展,把 CPU 和一个单独工作系统所必需的 ROM、RAM、I/O 端口、A/D、D/A 等外围电路集成在一个单片内而

2、制成的单片机 或微控制器愈来愈方便。目前,世界上许多公司生产单片机,品种很多。其中 包括各种字长的 CPU,各种容量的 ROM、RAM 以及功能各异的 I/O 接口电路等等, 但是,单片机的品种规格仍然有限,所以只能选用某种单片机来进行扩展。扩 展的方法有两种:一种是并行总线,另一种是串行总线1。由于串行总线的连 线少,结构简单,往往不用专门的母板和插座而直接用导线连接各个设备。因 此,采用串行线可大大简化系统的硬件设计。PHILIPS 公司早在十几年前就推 出了 I2C 串行总线,利用该总线可实现多主机系统所需的裁决和高低速设备同 步等功能。 IIC 即 Inter-Integrated C

3、ircuit(集成电路总线) ,这种总线类型是由飞 利浦半导体公司在八十年代初设计出来的,主要是用来连接整体电路(ICS) ,IIC 是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下, 同时每个芯片都可以作为实时数据传输的控制源2。这种方式简化了信号传输 总线接口。 2 2 方案设计方案设计IIC 总线图一 方案原理图 通过 AD 采样将我们收集到的数据输入给单片机,经过单片机处理后经 IIC 总线把数据存储到芯片里面,方便给其他单片机使用。由于使用的是 IIC 总线, 只需要两根线,大大节约了成本,而且方便布线。 3 3 工作原理工作原理 物理结构上,IIC 系统由一条串行数据线

4、 SDA 和一条串行时钟线 SCL 组成。 主机按一定的通信协议向从机寻址和进行信息传输。在数据传输时,由主机初 始化一次数据传输,主机使数据在 SDA 线上传输的同时还通过 SCL 线传输时钟。 信息传输的对象和方向以及信息传输的开始和终止均由主机决定。AD 采样AD 采样ARM单片机ARM单片机EEPROMARM单片机每个器件都有一个唯一的地址,而且可以是单接收的器件或者可以接收也 可以发送的器件。发送器或接收器可以在主模式或从模式下操作,这取决于芯 片是否必须启动数据的传输还是仅仅被寻址。一般情况下,一个标准的 IIC 通 信由四部分组成:开始信号、从机地址传输、数据传输、停止信号。由主

5、机发 送一个开始信号,启动一次 IIC 通信;在主机对从机寻址后,再在总线上传输 数据。IIC 总线上传送的每一个字节均为 8 位,首先发送的数据位为最高位, 每传送一个字节后都必须跟随一个应答位,每次通信的数据字节数是没有限制 的;在全部数据传送结束后,由主机发送停止信号,结束通信。 4 4 硬件设计硬件设计 需要用到的硬件有 STM32 芯片,本次设计仿真所用的是 STM32F103RCT6, 同时还需要 EEPROM 存储芯片,选择的是 24C02 这款芯片,为了显示是否发送成 功增加量 LCD 显示屏,仿真平台为 mini STM32 开发版。其中,硬件连接图见图 2。图二 STM32

6、 与 24C02 连接图 A0、A1、A2 为器件的地址选择,GND 接地,VCC 工作电压-1.8V-6V,WP 为写 保护,5、6 引脚即 IIC 总线的时钟线和数据线4。 5 5 程序设计程序设计 5.1 ADC 初始化图三 ADC 初始化流程图ADC 初始化流程图如图三所示。本文采用了定时采样,为了方便设置为 10 微秒,由于 stm32 的采样时间没有刚好等于 10 微秒的,所以用了 71.5 的采样 周期加上固定的 12.5 个周期,选用 72M6 分频得到采样时间为 7 微秒,再延时 3 微秒实现要求值。 5.2 存储与读取数据 首先,IIC 工作前需要驱动代码。其中包括 IIC

7、 初始化、IIC 开始、IIC 结 束、ACK、IIC 读写等功能。主函数工作之前需要初始化的有延时、串口、IIC 等,通过按键来切换选择读取还是写入,其具体代码见附录。读取和存储数据流 程图见图四:NY准备初始化地址信号监测总线等待产生应答接受数据存储数据结束信号图四 读写和存储数据流程图 6 6 总结总结 特点: 1) IIC 总线只要求两条总线线路,一条串行数据线 SDA,一条串行时钟线 SCL。布线方便 2) 每个连接到总线的器件都可以通过设定唯一的地址进行数据交换。 3)传输距离远,适合于远距离布线 。 缺点: 1)从机的数量收到限制。 2)总线上主机过多会导致数据冲突效率不高。 改

8、进: 1) 如果两个或更多主机同时初始化数据传输可以通过冲突检测和仲裁防止 数据被破坏。 2)可以和智能仪表相连构建现场 IIC 总线系统。 3)将单纯的单片机改变成智能单片机实现智能化。 4)多种总线接口联合在一起再和英特网相连实现工业物联网系统5。7 7 参考文献参考文献 1陈光建,贾金玲,基于单片机 12C 总线系统设计J.仪器仪表学报,2006,27(6): 2466-2472 2何立民.IIC 总线应用系统设计M.北京:北京航空航天大学出版社,1995 3周立功,张华.深入浅出 ARM M.北京:北京航空航天大学出版社.2006:1- 161. 4 张洋,原子教你玩 STM32M.

9、北京航空航天大学出版社,2013.4 5雷林,基于 internet 和现场总线的测控系统研究J.仪器仪表学报, 2012,23(z2):690-691结束8 8 附录附录 程序 主函数#include “led.h“#include “delay.h“#include “sys.h“#include “usart.h“#include “lcd.h“#include “key.h“ #include “24cxx.h“ #include “myiic.h“const u8 TEXT_Buffer=“MiniSTM32 IIC TEST“;#define SIZE sizeof(TEXT_Bu

10、ffer)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 STM32“);LCD_ShowString(60,70,200,1

11、6,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_ShowString(60,150,200,1

12、6,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_Write(0,(u8*)

13、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,datat

14、emp);/显示读到的字符串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

15、72M/6=12,ADC 最大时间不能超过 14M/PA1 作为模拟通道输入引脚 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;/模拟输入引脚GPIO_Init(GPIOA, ADC_DeInit(ADC1); /复位 ADC1,将外设 ADC1 的全部寄存器重设为缺省值ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;/ADC 工作模式:ADC1和 ADC2 工作在独立模式ADC_InitStructure.ADC_S

16、canConvMode = DISABLE;/模数转换工作在单通道模式ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;/模数转换工作在单次转换模式ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;/由软件而不是外部触发启动ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;/ADC 数据右对齐ADC_InitStructure.ADC_NbrOfChannel = 1; /顺序进行规则转换的 ADC 通道的数目ADC_Init(ADC1, /根据 ADC_InitStruct 中指定的

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

当前位置:首页 > 学术论文 > 毕业论文

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