ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:546.29KB ,
资源ID:3786515      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3786515.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(STM32ARM综合实验报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

STM32ARM综合实验报告.docx

1、STM32ARM综合实验报告南京航空航天大学 研究生实验报告 项目名称: ARM 嵌入式系统设计与应用技术 设计专题:综合实验二类:数据采集和显示系统 班级 : 小组成员(1)姓名: 学号: 学科: 电话: Email: 导师:(2)姓名: 学号: 学科: 电话: Email: 导师:(3)姓名: 学号: 学科: 电话: Email: 导师: 20XX 年 XX 月 XX 日一、本实验主要内容及要求本次综合实验的主要内容是,利用 ARM 内部的 A/D 转换器进行数据采集和显示 系统设计。实验要求如下:1、 采用 STM32开发板上的 12位A/D 转换器(参考电压 3.3V)采集电位器测 试

2、点的电压值。电位器与 A/D 的输入通道 14 相连接。2、 当按下 Key 键之后任意旋转电位器,利用 A/D 转化器采样 20 组电压值(每 1ms 采样一次,使用定时器 TIM2 计时),并在液晶屏幕上显示当前电压值,当 再次按下 Key 键之后将 20 组电压值存入到 FLASH 中。3、 复位后按下 Temper键将保存的 20 组电压值在液晶屏幕中央绘制出波形(要 求各点连接,每个点为 5 个像素,要有坐标系)。1) 横坐标为“120,”每个横坐标之间的间隔为 8个像素点;2) 纵坐标为电压值 “0V,1V,2V,3V,4V”,相邻坐标之间的为 10 个像素 点。4、 在液晶屏合适

3、的位置显示组名、姓名、学号、开发日期等信息。可利用 STM32 开发板的资源扩展其他自定义功能(如增加温度采集通道、当前采样频率显示和 设置、采样率调节等)。二、硬件框图本次实验的硬件部分主要是计算机和 STM32 两个部分,对于计算机部分不做过 多的介绍,下面着重介绍 STM32 中的与本实验相关模块。1.1 ADC 模块12位 ADC 是一种逐次逼近型模拟数字转换器。它有多达 18个通道,可测量 16 个外部和 2个内部信号源。各通道的 A/D 转换可以单次、连续、扫描或间断模式 执行。 ADC 的结果可以左对齐或右对齐方式存储在 16位数据寄存器中。 模拟看门狗特性允许应用程序检测输入电

4、压是否超出用户定义的高 /低阀值。 ADC 的输入时钟不得超过 14MHz ,它是由 PCLK2 经分频产生。STM32 教学平台的电位器是信号是连接到 STM32 的 PC4口的, PC4 正好是 A/D 转换的通道 14,STM32 实验教学平台上也标注了 ADC12_14(14通道),电位 器硬件框图如图 1所示, ADC 硬件框图如图 1 所示。图 1 ADC 硬件框图1.2 Flash存储模块STM32F103ZET6有3个 SPI,分别为 SPI1、SPI2和 SPI3。其中 SP2和 I2S2, SPI3和 I2S3共用管脚,采用 SPI功能还是 I2S功能是由 SPI_I2S_

5、CFGR寄存器的 第 11位 I2SMOD 来决定的。SPI_I2S配置寄存器 (SPI_I2S_CFGR),如下图 3所示。其中 I2SMODE 位为 1时表 示选择 I2S 模式,为 0 时表示选择 SPI 模式。在 STM32开发板上,是采用 STM32 的SPI1连接 SPI FLASH 的,如图 2所示, STM32 与 M25P80的 IO 接口对应关系如表 1所示。图 2 STM32 的 SPI1 硬件框图1 STM32 与 M25P80 的 IO 接口对应关系 1.3 Key 按键介绍通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械 触点 的弹性作用,一个按键

6、开关在闭合时不会马上稳定地接通,在断开时也不会 一下 子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种 现象 而作的措施就是按键消抖。 消抖是为了避免在按键按下或是抬起时电平剧烈抖动 带来的影响。按键的消 抖,可用硬件或软件两种方法。 Key 硬件框图如图 3 所 示,按键输入与 PG8 口连接。当按键不按下时, PG8 口输入高电平;当按键按下时, PG8 口输入低电平。图 3 Key 硬件框图 41.4 定时器STM32 有 4 个定时器单元,一共有 8 个定时器。定时器 1 和定时器 8 构成功能强 大的高级定时器,这两个定时器在电机控制方面有绝对的优势。其他剩下的定时

7、 器是通用定时器。STM32 的定时器除了可以计时外,还可以捕获比较。这些定时器具有捕获比较功 能,同时还有一些特殊的工作模式。如在捕获模式下,定时器将启用一个输入过 滤器和一个特殊的 PWM 测量模块,同时还支持编码器输入,这些编码输入可以 测出电机的旋转方向甚至可以测出速度。而在比较模式下,定时器可以实现标准 的比较功能、输可以调节占空比的 PWM 波。STM32 定时器内部结构,如图 4 所示。图 4 STM32 定时器内部结构三、程序流程图 1、主程序流程图图 5 主程序的流程框图 如图 5 所示,对于该流程框图的分析如下:1) 对 STM32的初始化,其中包括 ADC 初始化、 SP

8、I串口初始化、 LCD 初始化 等,初始化过程在其相应的子程序中执行。2) 显示组员的信息和时间,正如实验七所学的,运用函数 LCD_ShowString() , 即可在 LCD 上显示自己所需要的信息,其显示的位置可以根据设定的坐标来设 置。3)设置 Key 键,当 Key 键被按下时,开始采集数据并将其显示,而数据采集和 显示的编程及其分析过程在前面的实验七中已经有过比较详细的介绍了,所以这 里不再赘述。同时,采集到的数据及时的将其存储在 Flash中, Flash的设置在其 初始化中已经完成。4)设置 Temper键,当 Temper 键被按下的时候,开始对之前采集到的数据进行 绘图,而

9、绘图的过程在之后的子程序中有比较详尽地介绍,这里也不在作详细的 说明。2、子程序流程图对于采集 20组数据并显示、 20 组数据绘图两个子程序进行详细地说明如下:1) 采集 20组数据并显示子程序。 ADC数据采集的编程在之前的实验中已经介 绍过, STM32芯片的 ADC 转换模块是 12位的逐次逼近,所以在采集到 14通道 的数据除以 4096( 212),同时应当熟悉 ADC 转换的初始化过程,在采集一个数 据之后,将其保存在 flash 中,同时经过一定的延时之后进行下一个数据采集, 直到采集满 20个数据为止,流程图如图 6 所示。图 6 采集数据并显示子程序流程图2) 将 20组数

10、据绘图。在采集完 20组数据后,进入绘图子程序,绘图最初是进 行坐标的建立,坐标轴绘制好之后,依次读取存入 Flash中的数据,并通过计算 将其转换成坐标系中相应的坐标值,并通过函数 LCD_DrawLine(X1,Y1,X2,Y2) 将 其显示出来,直到绘制完 20个数据为止,流程图如图 7 所示。图 7 数据绘制子程序四、实验结果和分析1、软件的调试结果将程序烧录到 STM32 中进行调试,调试结果如图 89所示,从图中可知,程序 满足实验要求。图 8 显示日期及组员信息图 9 显示电压值及数据绘图2、结果分析 如调试结果可知,程序基本上满足了本实验的要求,其中, 20 个数据的值是通过

11、拧动电位器上的旋转键而得到的,在采样周期和操作人员拧动速度合适的情况 下,数据所绘的图有一定的连续性。如果设置的采样周期太短的话,绘制的图就 可能是一条直线,采集的数据是相同的值,所以在编程的时候,尽量把采样时间 设置的合理一点。在编写显示组员信息的程序时,重要的是把坐标点设置合理, 不然的话会出现显示的字母重叠现象,或是离的比较远,上面的调试结果图是经 过组员对程序的坐标的调整,而得到的比较合适的位置。五、源程序清单#include include.h #define KEY_ON 0 #define KEY_OFF 1 float set_value1; float Get_adcvalu

12、e1; float ADC_Flash20;void Draw_BigPoint(u16 x,u16 y) LCD_DrawPoint(x,y); LCD_DrawPoint(x-1,y);LCD_DrawPoint(x+1,y); LCD_DrawPoint(x,y-1); LCD_DrawPoint(x,y+1);int main(void) int i; int sectorCnt; u32 Flash_ID; char j=0; char flag=0; u16 X1,Y1,X2,Y2;float Adc_Value,lastvalue,adctemp; float adcgroup2

13、0; u32 ADC_ConvertedValue; char filename260;delay_init();uart_init(9600);NVIC_Configuration();Key_GPIO_Config(); Adc_Init(); LCD_Init();SPI_FLASH_Init(); /TIM2_Int_Init(9999,71999);LED_GPIO_Config();Flash_ID = SPI_FLASH_ReadID();POINT_COLOR=BLACK;LCD_ShowString(40, 5, The 11th Group, 2014.5.28); LCD

14、_ShowString(30, 30, ChenMaowu SX1403012);LCD_ShowString(30, 50, Zeng Ruipeng SX1403006); LCD_ShowString(30, 70, GeZhishangSX1405117);while(1) if(Key_Scan(GPIOG, GPIO_Pin_8) = KEY_ON)LCD_Clear(WHITE);POINT_COLOR=GREEN;LCD_DrawLine(60, 200, 240, 200);LCD_ShowString(40, 195, 0V); LCD_DrawLine(60, 200,

15、60, 110); LCD_DrawLine(58, 180, 62, 180);LCD_ShowString(40, 175, 1V);LCD_DrawLine(58, 160, 62, 160);LCD_ShowString(40, 155, 2V);LCD_DrawLine(58, 140, 62,140);LCD_ShowString(40, 135, 3V);LCD_DrawLine(58, 120, 62, 120);LCD_ShowString(40, 115, 4V); LCD_ShowString(36, 100, Voltage); LCD_DrawLine(100,198

16、, 100, 202);LCD_ShowString(96, 205, 5); LCD_DrawLine(140,198, 140, 202); LCD_ShowString(136, 205, 10); LCD_DrawLine(180,198, 180, 202);LCD_ShowString(176, 205, 15); LCD_DrawLine(220,198, 220, 202);LCD_ShowString(216, 205, 20); if(flag=0)for(j=0;j20;j+) ADC_ConvertedValueGet_Adc(ADC_Channel_14);Adc_V

17、alue= (float)ADC_ConvertedValue/ 4096 * 3.3;adcgroupj=Adc_Value;sprintf(filename,Current Value:%.3f,adcgroupj);LCD_ShowString(30,60,filename);POINT_COLOR=BLUE;X1=68+8*j;Y1=200-20*Adc_Value; Draw_BigPoint(X1,Y1); delay_ms(1000); if(flag=1)sectorCntsizeof(adcgroup)/SPI_FLASH_SectorSize; if(sizeof(adcg

18、roup)%SPI_FLASH_SectorSize != 0) sectorCnt+; for(i = 0; i sectorCnt; i+ ) SPI_FLASH_SectorErase(i*SPI_FLASH_SectorSize);for(j=0;j20;j+) set_value0=adcgroupj;SPI_FLASH_BufferWrite(u8*)set_value, 4*j, sizeof(float);LCD_Clear(WHITE); POINT_COLOR=RED;LCD_ShowString(60, 120, Have Stored In Flash!);flag=!

19、flag;if(Key_Scan(GPIOC, GPIO_Pin_13) = KEY_ON)for(j=0;j20;j+)SPI_FLASH_BufferRead(u8*)Get_adcvalue, 4*j, 4);ADC_Flashj=Get_adcvalue0;POINT_COLOR=GREEN;LCD_DrawLine(60, 200, 240, 200); LCD_ShowString(40, 195, 0V);LCD_DrawLine(60, 200, 60, 110);LCD_DrawLine(58, 180, 62, 180); LCD_ShowString(40, 175, 1

20、V);LCD_DrawLine(58, 160, 62, 160); LCD_ShowString(40, 155, 2V);LCD_DrawLine(58, 140, 62,140); LCD_ShowString(40, 135, 3V);LCD_DrawLine(58, 120, 62, 120); LCD_ShowString(40, 115, 4V);LCD_ShowString(36, 100, Voltage);LCD_DrawLine(100,198, 100, 202); LCD_ShowString(96, 205, 5);LCD_DrawLine(140,198, 140

21、, 202); LCD_ShowString(136, 205, 10);LCD_DrawLine(180,198, 180, 202); LCD_ShowString(176, 205, 15);LCD_DrawLine(220,198, 220, 202); LCD_ShowString(216, 205, 20); for(i=0;i20;i+)POINT_COLOR=BLUE; X1=68+8*i;Y1=200-20*ADC_Flashi; Draw_BigPoint(X1,Y1); if(i19) X2=X1+8;Y2=200-20*ADC_Flashi+1; POINT_COLOR

22、=RED;LCD_DrawLine(X1,Y1,X2,Y2); 六、实验分工实验中,三人为一组,组员之间相互合作、共同进步。对于实验的内容,组员之 间一起讨论、编程,分工不会很明确,只要有哪个组员有合理的想法,就可以将 自己的想法编入程序中,实验报告和专题报告是独自完成,而这综合实验报告是 组员一起完成的,分工是次要的,合作才是重点。七、对本实验课程的几点建议本课程意义重大,老师上课讲课认真,同学对实验专注、热忱。但是这有一个小 小的建议,可能有些同学在上这门课程之前,对 STM32 一点了解也没有,所以 在实验刚开始的时候,可以把理论知识多加一点,讲解的更细致一些,这样的 话,这门课程就很完美了!最后,再次感谢老师的谆谆教诲!

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1