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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

STM32实验报告.docx

1、STM32实验报告实验一:一个灯的闪烁 一、实验要求1. 熟悉使用STM32F103ZET6开发板2. 利用C语言程序实现一个灯闪烁二、电路原理图 图1-1 LED灯硬件连接图三、软件分析1.本实验用到以下3个库函数(省略了参数):RCC_DeInit();RCC_APB2PeriphClockCmd();GPIO_Init();2.配置输入的时钟:SystemInit()主要对RCC寄存器进行配置,GPIOA连接在APB2上,因此RCC_APB2PeriphClockCmd()函数需要使能APB2Periph_GPIOA3.声明GPIO结构: PF6PF10口配置为输出GPIO_InitSt

2、ructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10;4.应用GPIO口:点亮LED1有五种方法ODR寄存器法:GPIOA-ODR=0xffbf;位设置/清除寄存器法:GPIOA-BRR|=0X001;方法只适用于GPIOx_BSRR寄存器GPIO_WriteBit()函数法: GPIO_Write(0xffbf); 置位复位库函数法:GPIO_ResetBits(GPIOF,GPIO_Pin_8);5.主函数程序:int main(void) RCC_Configuration(); /* 配置系

3、统时钟 */ GPIO_Configuration(); /* 配置GPIO IO口初始化 */ for(;) GPIOF-ODR = 0xfeff; /* PF8=0 - 点亮D3 */ Delay(600000); GPIOF-ODR = 0xffff; /* PF8=1 - 熄灭D3 */ Delay(600000); 四、实验现象下载程序后开发板上的LED1灯闪烁五、总结通过对本实验可以发现,和51等8位单片机相比,STM32对I/O端口的操作变得复杂了许多。51单片机点灯的程序最简单,直接在main()中写一个while(1),里面写4行代码就可以了。STM32进入while(1)之

4、前必须先配置I/O的方向,必须使能外设的时钟。对STM32来说,除了CM3内核都算外设,包括GPIO。STM32可以关闭任何外设的时钟以禁止该外设,这样设计是出于减少功耗的考虑。实验二:流水灯的闪烁 一、实验要求1、熟悉使用STM32F103ZET6开发板2、利用C语言程序实现流水灯的闪烁实验二、电路原理图 图1-2 流水灯硬件连接图三、软件分析1.本实验用到以下4个库函数(省略了参数):RCC_DeInit();RCC_APB2PeriphClockCmd();GPIO_Init();GPIO_WriteBit();3个自定义函数LED2.配置输入的时钟:SystemInit()主要对RCC

5、寄存器进行配置,GPIOA连接在APB2上,因此RCC_APB2PeriphClockCmd()函数需要使能APB2Periph_GPIOA3.声明GPIO结构: PF6PF10口配置为输出 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10;4.应用GPIO口:点亮LED1有五种方法ODR寄存器法:GPIOA-ODR=0xffbf;位设置/清除寄存器法:GPIOA-BRR|=0X001;方法只适用于GPIOx_BSRR寄存器GPIO_WriteBit()函数法: GPIO_

6、Write(0xffbf); 置位复位库函数法:GPIO_ResetBits(GPIOF,GPIO_Pin_8);5.主函数程序:int main(void) RCC_Configuration(); /* 配置系统时钟 */ GPIO_Configuration(); /* 配置GPIO IO口初始化 */ for(;) LED1(); LED2(); LED3(); 6.LED1实现所有灯从led1到led5依次点亮再全部熄灭,然后全部点亮,再全部熄灭的过程;LED2实现所有灯从led5到led1依次点亮的过程;LED3实现所有灯从led5到led1依次熄灭,点亮1、3、5灯,然后全部点亮

7、,再全部熄灭的过程;四、实验现象下载程序后开发板上的LED所有灯从led1到led5依次点亮再全部熄灭,然后全部点亮,再全部熄灭,从led5到led1依次点亮,所有灯从led5到led1依次熄灭,点亮1、3、5灯,然后全部点亮,再全部熄灭。五、总结通过代码分析发现,使用固件库函数可以大大简化编程工作,我们可以依葫芦画瓢,很容易修改成自己想要的功能代码。对相关寄存器的深入了解,可以使我们对各种外设功能有更深刻、更具体的掌握,使用起来也更得心应手。实验三:单级外部中断 一、实验要求1.利用C语言程序实现按下SW3, LED5闪烁20次单级外部中断实验2.通过实验掌握外部中断的编程方法二、电路原理图

8、 1-3 外部中断连接图三、软件分析1.STM32外部中断要经过3个部分模块设置处理,然后才进入到中断服务程序的处理,其框图如下:1-4 中断处理模块框图2.STM32外部中断:GPIO输入中断虽然有16个输入通道,但是只占用了7个中断向量。EXTI0EXTI4各占用一个中断向量,EXTI59共用一个,EXTI1015共用一个。所以在编程的时候EXTI59将共用一个中断函数,EXTI1015共用一个中断函数。3.本实验用到以下6个库函数(省略了参数):RCC_DeInit();RCC_APB2PeriphClockCmd();GPIO_Init();GPIO_WriteBit();EXTI_I

9、nitTypeDef();NVIC_PriorityGroupConfig()4.配置输入的时钟:SystemInit()主要对RCC寄存器进行配置,GPIOA连接在APB2上,因此RCC_APB2PeriphClockCmd()函数需要使能APB2Periph_GPIOA5.声明GPIO结构: PF6PF10口配置为输出 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10;6.应用GPIO口:点亮LED1有五种方法ODR寄存器法:GPIOA-ODR=0xffbf;位设置/清

10、除寄存器法:GPIOA-BRR|=0X001;方法只适用于GPIOx_BSRR寄存器GPIO_WriteBit()函数法: GPIO_Write(0xffbf); 置位复位库函数法:GPIO_ResetBits(GPIOF,GPIO_Pin_8);7.EXTI配置:引脚选择: GPIO_EXTILineConfig(GPIO_PortSourceGPIOD,GPIO_PinSource3);清除中断标志位:EXTI_ClearITPendingBit(EXTI_Line8)设置外部中断结构体的成员: EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interr

11、upt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);8.NVIC配置:分为四个部分,分别针对中断线0到中断线3,结构相同。NVIC_PriorityGroupConfig()函数配置占先优先级和副优先级9.主函数程序:int main() RCC_Configuration(); /* 配置系统时钟 */ NVIC_Configuration(); GPIO_Configuration(

12、); /* IO口初始化 */ EXTI_Configuration(); GPIO_Write(GPIOF,0xffff); /* 全灭 */ Delay(5000); while(1) 四、实验现象每按下一次SW3,LED5闪烁20次,实现单级中断五、总结通过实验,我们学习了如何使用STM32的GPIO外部中断功能。GPIO外部中断使用方法比较容易掌握,只要沿着中断信号线一路设置遇到的寄存器,最后编写中断服务程序即可,当然还要设置中断优先级。实验四:中断嵌套 一、实验要求1.利用C语言程序实现中断嵌套实验按下SW3, LED5闪烁20次 SW3 - PA0 LED5 - PF10 中断优先

13、级为1;按下SW2, LED3闪烁20次 SW2 - PD3 LED3 - PF8 中断优先级为2; 按下SW1, LED1闪烁20次 SW1 - PA8 LED1 - PF6 中断优先级为3; 按下SW5, LED4闪烁20次 SW5 - PC13 LED4 - PF9 中断优先级为42.通过实验掌握外部中断的编程方法三、软件分析1.配置输入的时钟:SystemInit()主要对RCC寄存器进行配置,GPIOA连接在APB2上,因此RCC_APB2PeriphClockCmd()函数需要使能APB2Periph_GPIOA2.声明GPIO结构: PF6PF10口配置为输出 GPIO_Init

14、Structure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10;7.应用GPIO口:点亮LED1有五种方法ODR寄存器法:GPIOA-ODR=0xffbf;二、电路原理图 图1-5 多级中断硬件连接图位设置/清除寄存器法:GPIOA-BRR|=0X001;方法只适用于GPIOx_BSRR寄存器GPIO_WriteBit()函数法: GPIO_Write(0xffbf); 置位复位库函数法:GPIO_ResetBits(GPIOF,GPIO_Pin_8);7.EXTI配置:引脚选择: GPIO_EXTILi

15、neConfig(GPIO_PortSourceGPIOD,GPIO_PinSource3);清除中断标志位:EXTI_ClearITPendingBit(EXTI_Line8)设置外部中断结构体的成员:EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);8.NVIC配置:分为四个部分,分别针对

16、中断线0到中断线3,结构相同。优先级组都设为 2,PC13 中断主次优先级分别为4;PA8 主次优先级分别为3;PD3主次优先级分别为2;PA0 主次优先级分别为1;要求先进入 PC13 中断,执行某一个任务,突然 PA8 打断 PC13 的中断,转而进行 PA8的中断。PC13 的中断任务执行完毕,返回到 PC13中断继续原来的中断任务。突然 PD3 打断 PA8 的中断,转而进行 PD3的中断。PD3 的中断任务执行完毕,返回到 PA8中断继续原来的中断任务,以此推类。NVIC_PriorityGroupConfig()函数配置占先优先级和副优先级 NVIC_PriorityGroupCo

17、nfig(NVIC_PriorityGroup_2); /设置中断优先级分组2 NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQChannel; /设定中断源为PC13-SW5 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 4; /中断占优先级为4 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; /副优先级为0 NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel; /

18、设定中断源为PA8-SW1 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; /中断占优先级为3 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; /副优先级为0 NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQChannel; /设定中断源为PD3-SW2 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; /中断占优先级为2 NVIC_InitStructure.NV

19、IC_IRQChannelSubPriority = 0; /副优先级为0 NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel; /设定中断源为PA0-SW3 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; /中断占优先级为1 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; /副优先级为09.主函数程序:int main() RCC_Configuration(); /* 配置系统时钟 */ NVIC_Configur

20、ation(); GPIO_Configuration(); /* IO口初始化 */ EXTI_Configuration(); GPIO_Write(GPIOF,0xffff); /* 全灭 */ Delay(5000); while(1)四、实验现象按下SW3, LED5闪烁20次,闪烁过程中因为其中断优先级为1,所以除了复位按键其他按键不能打断LED5的亮灯情况;按下SW2, LED3闪烁20次,因为中断优先级为2,SW3可以使LED3闪烁停止而其他按键不能;按下SW1, LED1闪烁20次; 按下SW5, LED4闪烁20次,中断优先级为4五、总结通过实验,我们学习了如何使用STM3

21、2的GPIO外部中断功能和中断嵌套的编程。GPIO外部中断使用方法比较容易掌握,设置中断优先级时中断优先级越高,设置的数字应该越小。实验五:TIM2的基本应用 一、实验要求1.利用C语言程序实现用通用定时器TIM2中断控制LED的闪烁2.通过实验掌握定时器的编程方法二、软件分析1.STM32的通用定时器:STM32的通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。STM32有4个通用定时器(TIM2、TIM3、TIM4、TIM5),它们适用于多种场合,包括测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)。每个定时器都是完全独立的,没有互相共享任何资源。它

22、们可以一起同步操作。2.配置输入的时钟:SystemInit()主要对RCC寄存器进行配置,GPIOA连接在APB2上,因此RCC_APB2PeriphClockCmd()函数需要使能APB2Periph_GPIOA3.声明GPIO结构: PF6PF10口配置为输出 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10;4.应用GPIO口:点亮LED1有五种方法ODR寄存器法:GPIOA-ODR=0xffbf;位设置/清除寄存器法:GPIOA-BRR|=0X001;方法只适用于

23、GPIOx_BSRR寄存器GPIO_WriteBit()函数法: GPIO_Write(0xffbf); 置位复位库函数法:GPIO_ResetBits(GPIOF,GPIO_Pin_8);5.EXTI配置:引脚选择: GPIO_EXTILineConfig(GPIO_PortSourceGPIOD,GPIO_PinSource3);清除中断标志位:EXTI_ClearITPendingBit(EXTI_Line8)设置外部中断结构体的成员: EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_T

24、rigger = EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);6.NVIC配置:分为四个部分,分别针对中断线0到中断线3,结构相同。NVIC_PriorityGroupConfig()函数配置占先优先级和副优先级7.TIM配置: void TIM2_Init(void) TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; /定义一个TIM初始化结构体 TIM_TimeBaseStructure.TIM_Perio

25、d = 65535; /自动装载寄存器(TIMx_ARR) TIM_TimeBaseStructure.TIM_Prescaler = 0; /预分频器(TIMx_PSC) TIM_TimeBaseStructure.TIM_ClockDivision = 0;/时钟分频因子CKD1:0,在此没有用到 /计数器模式:TIMx向上计数模式,操作的是TIMx_CR1 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, & TIM_TimeBaseStructure); /根据上述参数设

26、置TIMx的时间基数 TIM_InternalClockConfig(TIM2); /TIM2预分频器由内部时钟驱动(默认),操作TIMx_SMCR TIM_ITConfig(TIM2, TIM_IT_Update , ENABLE );/使能TIM2中断,操作的是TIMx_DIER TIM_Cmd(TIM2, ENABLE); /使能定时器TIM2,操作的寄存器是TIMx_CR18.主函数程序:int main() RCC_Configuration(); /* 配置系统时钟 */ GPIO_Configuration(); /* 配置GPIO I/O口初始化 */ NVIC_Configu

27、ration(); /* 配置NVIC */ TIM_Configuration(); /* 配置TIMs */ GPIO_Write(GPIOF,0xffff); /* 全灭 */ while(1);三、实验现象TIM2使LED1灯以1S的周期闪烁,单次定时时间为100*10-6S四、总结通过实验,我们学习了如何使用STM32的通用定时器功能。通用定时器的溢出时间计算:使用通用定时器的最简单功能,就是定时,把计数器单元也当作一个分配器,时钟信号经过预分频器和计数器两级分频后,出来的信号就是溢出中断信号。所以溢出中断频率由以下式子确定: 定时时间为:T=(TIM_Period+1)*(TIM_

28、Prescaler+1)/TIMxCLK实验六:TIM2,TIM3,TIM4多定时器的应用 一、实验要求1. 利用C语言程序实现TIM定时器多级中断2. 通过实验掌握定时器的编程方法二、软件分析1.配置输入的时钟:SystemInit()主要对RCC寄存器进行配置,GPIOA连接在APB2上,因此RCC_APB2PeriphClockCmd()函数需要使能APB2Periph_GPIOA2.声明GPIO结构: PF6PF10口配置为输出、应用GPIO口3.EXTI配置:4.NVIC配置:分为四个部分,分别针对中断线0到中断线3,结构相同。NVIC_PriorityGroupConfig()函数

29、配置占先优先级和副优先级5.TIM配置:使用定时器,就必须使能定时器的时 钟 , 这 就 是 函 数 RCC_APB1PeriphClockCmd(); , 通 过 它 开 启RCC_APB1Periph_TIM2TIM_DeInit( TIM2); 该函数主要用于复位 TIM2 定时器,使之进入初始状态。然后我们对自动重装载寄存器赋值,TIM_Period 的大小实际上表示的是需要经过 TIM_Period 次计数后才会发生一次更新或中断。 TIM_OCInitTypeDef TIM_OCInitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseS

30、tructure; /* TIM2 configuration 通道1:输出比较模式 */ TIM_TimeBaseStructure.TIM_Period = 1999; /自动重装载寄存器的值 TIM_TimeBaseStructure.TIM_Prescaler =35999;/时钟预分频数 TIM_TimeBaseStructure.TIM_ClockDivision = 0;/采样分频 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; /向上计数 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); TIM_PrescalerConfig(TIM2, 7199, TIM_PSCReloadMode_Immediate); TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; TIM_OC1Init(TIM2, &TIM_OCInitStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing;

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

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