STM32实验报告
stm32实训报告经验总结

stm32实训报告经验总结STM32实训报告经验总结一、引言在这次STM32实训中,我深入了解了微控制器的基本原理和操作,学会了使用Keil MDK-ARM软件进行编程,掌握了STM32的GPIO、串口、定时器等基本外设的使用。
通过实际操作,我对于嵌入式系统设计和开发有了更深刻的理解。
二、实训过程1. 基础知识学习:首先,我通过阅读教材和网上资料,学习了微控制器的基本概念、STM32的体系结构和外设特性。
我了解到,STM32是一款功能强大的32位ARM Cortex-M核微控制器,具有丰富的外设接口和强大的处理能力。
2. 开发环境搭建:我按照教程安装了Keil MDK-ARM软件,配置了开发环境。
Keil软件提供了完整的开发工具链,包括代码编辑、编译链接、调试和仿真等功能。
3. 硬件平台搭建:我使用STM32开发板搭建了硬件平台。
我熟悉了开发板的电路原理图和引脚配置,了解了各个外设接口的使用方法。
4. 编程实践:在理解了基本概念和操作方法后,我开始进行编程实践。
我编写了GPIO输入输出、串口通信、定时器中断等程序,通过实际操作掌握了STM32的基本外设使用。
5. 调试与优化:在编程过程中,我遇到了许多问题,通过查阅资料和反复调试,最终解决了问题。
我还对程序进行了优化,提高了程序的效率和稳定性。
三、实训收获通过这次实训,我掌握了STM32微控制器的开发流程和基本外设的使用方法。
我学会了使用Keil MDK-ARM软件进行编程和调试,了解了嵌入式系统设计和开发的实际操作过程。
同时,我在实践中遇到了许多问题,通过解决问题,我提高了解决问题的能力。
四、展望未来这次实训让我对嵌入式系统设计和开发有了更深刻的理解。
在未来的学习和工作中,我将继续深入学习嵌入式系统的相关知识,掌握更多的技能和方法。
同时,我将尝试将所学知识应用到实际项目中,提高自己的实践能力和工程经验。
单片机STM32实验报告

实验报告课程名称:单片微机原理与车载系统学生姓名蒋昭立班级电科1601学号***********指导教师易吉良成绩2018年12 月17 日实验1 GPIO实验1.1 实验目的1)熟悉MDK开发环境;2)掌握STM32单片机的GPIO使用方法。
1.2 实验设备1)一台装有Keil和串口调试软件的计算机;2)一套STM32F103开发板;3)STlink硬件仿真器。
1.3 基本实验内容1)熟悉MDK开发环境,参考《STM32F1开发指南(精英版)-寄存器版本_V1.0》第3章,安装MDK 并新建test工程,运行例程,在串口窗宽观察结果,并记录如下:从图片可以看出,例程运行成功,没有错误。
2)按键输入实验,《STM32F1开发指南(精英版)-寄存器版本_V1.0》第8章。
实现功能:3 个按钮(KEY_UP、KEY0和KEY1),来控制板上的2 个LED(DS0 和DS1)和蜂鸣器,其中KEY_UP 控制蜂鸣器,按一次叫,再按一次停;KEY1 控制DS1,按一次亮,再按一次灭;KEY0 则同时控制DS0 和DS1,按一次,他们的状态就翻转一次。
理解连续按概念及其实现代码。
参数mode 为0 的时候,KEY_Scan 函数将不支持连续按,扫描某个按键,该按键按下之后必须要松开,才能第二次触发,否则不会再响应这个按键,这样的好处就是可以防止按一次多次触发,而坏处就是在需要长按的时候比较不合适。
当mode 为1 的时候,KEY_Scan 函数将支持连续按,如果某个按键一直按下,则会一直返回这个按键的键值,这样可以方便的实现长按检测。
寄存器方法实现不支持连续按的关键代码,以及程序运行后的效果。
由程序可知,给KEY_Scan函数输入的值为0,为不支持连按模式。
寄存器方法实现支持连续按的关键代码,以及程序运行后的效果。
由程序可知,给KEY_Scan函数输入的值为1,为支持连按模式。
3)采用库函数方法实现按键输入实验,参考《STM32F1开发指南(精英版)-库函数版本_V1.0》第8章。
STM32专题报告(南京航空航天大学)

南京航空航天大学研究生实验报告项目名称:STM32专题报告专题内容:STM32芯片的优势及其改进建议分班代码:2班11组姓名:XXX 学号:SXXXXXXX 导师:XXX 学科:ARM嵌入式系统设计与应用技术电话:XXXXXXXX Email:XXXXXXXXXXXXXXX 20XX年XX月XX日STM32芯片的优势及其改进建议1引言ARM在1990年成立,当初的名字是“Advanced RISC Machines Ltd.,”,当时它是三家公司的合资——它们分别是苹果电脑,Acorn电脑公司,以及VLSI技术(公司)。
在1991年,ARM推出了ARM6处理器系列。
后来,逐渐的有一些大公司,包括TI、NEC、Sharp、ST等,都获取了ARM授权,这些公司运用ARM处理器加入一些其他相应的模块设计出符合自己需求功能的控制器,因而得到了广泛地应用,其中ST公司就是运用Cortex-M3内核设计出了STM32系列芯片。
Cortex-M3 内核内核是专门设计于满足集高性能、低功耗、实时应用于一体的嵌入式领域的要求。
Cortex-M3 在系统结构上的增强,让STM32 性能得到了提高;Thumb-2 指令集带来了更高的指令效率和更强的性能;通过紧耦合的嵌套矢量中断控制器,对中断事件的响应比以往更迅速。
STM32系列芯片外形结构如图1所示。
图1 STM32系列芯片外形结构2 STM32芯片的优势分析对于STM32芯片的优势可以从其使用的内核进行分析,STM32处理器的内核是ARM 公司最新的、先进架构的Cortex TM-M3内核(1.25 Dhrystone MIPS/MHz),它的具体优势如下:1)功能强大。
Cortex-M3采用了哈佛结构,拥有独立的指令总线和数据总线,可以同时进行取指与数据访问。
并且Thumb-2 指令集以16 位的代码密度带来了32 位的性能。
它能在相同主频条件下处理更多的任务,支持更为复杂的程序设计。
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结构: PF6~PF10口配置为输出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_Write(0xffbf);⑤置位复位库函数法:GPIO_ResetBits(GPIOF,GPIO_Pin_8);5.主函数程序:int main(void){RCC_Configuration(); /* 配置系统时钟 */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端口的操作变得复杂了许多。
STM32实训实验1报告

STM32实训实验1报告
实验一我的第一个工程实验
一.实验简介
我的第一个工程,STM32固件库点亮LED灯。
二.实验目的
掌握STM32开发环境,掌握从无到有的构建工程。
三.实验内容
基本要求:熟悉MDK KEIL开发环境,构建基于固件库的工程,编写代码实现GPIO 口控制开发板上LED灯亮灭。
扩展要求:实现流水灯功能。
使用JLINK下载代码到目标板,查看运行结果。
四.实验设备
硬件部分:PC计算机(宿主机)、奋斗STM32实验板、JLINK。
软件部分:PC机WINDOWS系统、MDK KEIL软件。
五.实验步骤
1.熟悉MDK KEIL开发环境
2.查看固件库结构和文件
3.建立工程目录,复制库文件
4.建立和配置工程
5.编写代码
6.编译代码
7.测试运行结果
8.使用JLINK下载到实验板
9.记录实验过程,撰写实验报告
六.实验过程
1.创建本地文件夹和软件中的文件夹
2.对软件中的文件夹进行配置
3.GPIO初始化过程
4.软件设计及代码(写一个简单的main函数)
七.实验心得体会
1.遇到的问题及解决方法。
stm32 实验报告

stm32 实验报告STM32 实验报告一、引言STM32是一款由STMicroelectronics公司推出的32位单片机系列,具有高性能、低功耗和丰富的外设资源等特点。
本篇实验报告将介绍我在学习和实践STM32过程中的一些经验和成果。
二、实验目的本次实验的目的是通过使用STM32单片机,实现一个简单的温度监测系统。
通过该实验,我希望能够熟悉STM32的开发环境,掌握基本的硬件连接和编程方法,并能够成功运行一个简单的应用程序。
三、实验步骤1. 硬件连接:将STM32单片机与温度传感器、LCD显示屏等硬件设备连接起来。
确保连接正确,避免短路或接触不良的情况。
2. 开发环境搭建:下载并安装STM32CubeIDE,配置开发环境。
这是一个集成开发环境,支持STM32系列的开发和调试。
3. 编写代码:使用C语言编写一个简单的程序,实现温度传感器数据的读取和显示。
在编写代码过程中,需要熟悉STM32的寄存器和外设配置,以及相关的函数库。
4. 编译和烧录:将编写好的代码进行编译,生成可执行文件。
然后使用JTAG或SWD接口将可执行文件烧录到STM32单片机中。
5. 测试和调试:将STM32单片机连接到电源,观察LCD显示屏上是否正确显示当前的温度数值。
如果有错误或异常情况,需要进行调试和排查。
四、实验结果经过以上的实验步骤,我成功地实现了一个简单的温度监测系统。
在LCD显示屏上,我可以清晰地看到当前的温度数值,并且该数值能够实时更新。
通过与实际温度计的对比,我发现该系统的测量结果相当准确。
五、实验总结通过这次实验,我对STM32单片机的开发和应用有了更深入的了解。
我学会了如何搭建开发环境、编写代码、编译和烧录程序,并且成功实现了一个简单的应用。
在实验过程中,我也遇到了一些问题,但通过查阅资料和与同学的交流,我能够及时解决这些问题。
在今后的学习和实践中,我将进一步探索STM32单片机的功能和应用领域。
我希望能够深入研究更复杂的项目,并挖掘出更多的潜力。
stm32外部中断实验报告-STM32实例外部中断实验

stm32外部中断实验报告_STM32实例外部中断实验上⼀篇⽂章我们介绍了 STM32F10x 的中断,这次我们就来学习下外部中断。
本⽂中要实现的功能与按键实验⼀样,即通过按键控制LED,只不过这⾥采⽤外部中断⽅式进⾏控制。
学习时可以参考《STM32F10x 中⽂参考⼿册》-9 中断和事件章节。
外部中断介绍EXTI 简介STM32F10x 外部中断/事件控制器(EXTI)包含多达 20 个⽤于产⽣事件/中断请求的边沿检测器。
EXTI 的每根输⼊线都可单独进⾏配置,以选择类型(中断或事件)和相应的触发事件(上升沿触发、下降沿触发或边沿触发),还可独⽴地被屏蔽。
EXTI 结构框图EXTI 框图包含了 EXTI 最核⼼内容,掌握了此框图,对 EXTI 就有⼀个全局的把握,在编程的时候思路就⾮常清晰。
从图中可以看到,有很多信号线上都有标号 9 样的“20”字样,这个表⽰在控制器内部类似的信号线路有 20 个,这与 STM32F10x 的 EXTI 总共有20 个中断/事件线是吻合的。
因此我们只需要理解其中⼀个的原理,其他的 19个线路原理都是⼀样的。
EXTI 分为两⼤部分功能,⼀个产⽣中断,另⼀个产⽣事件,这两个功能从硬件上就有所差别,这个在框图中也有体现。
从图中标号 3 的位置处就分出了两条线路,⼀条是 3-4-5 ⽤于产⽣中断,另⼀条是 3-6-7-8⽤于产⽣事件。
下⾯我们就来介绍下这两条线路:(1)⾸先看下产⽣中断的这条线路(1-2-3-4-5)1.标号 1 为输⼊线,EXTI 控制器有 20 个中断/事件输⼊线,这些输⼊线可以通过寄存器设置为任意⼀个 GPIO,也可以是⼀些外设的事件,这部分内容我们会在后⾯专门讲解。
输⼊线⼀般是存在电平变化的信号。
2.边沿检测电路,EXTI 可以对触发⽅式进⾏选择,通过上升沿触发选择寄存器和下降沿触发选择寄存器对应位的设置来控制信号触发。
边沿检测电路以输⼊线作为信号输⼊端,如果检测到有边沿跳变就输出有效信号 1 给红⾊框 3 电路,否则输出⽆效信号 0。
STM32实验系统专题报告

2.3.2内嵌向量中断控制器(NVIC)
Cortex-M3异常类型及优先级表
2.3.2 Cortex-M3和ARM7的比较
2.3.2 Cortex-M3和ARM7相比异常处理的优化
单个异常处理过程
处理时间比较
TARM7= TARM7_PUSH +TARM7_POP =26+16 =42 TCortex-M3= TM3_PUSH +TM3_POP =12+12 =24
对于Back-to-Back异常的处理,Cortex-M3少用了28个时钟周期
3、STM32简介
STM32系列产品命名规则
示例: STM32 F 103 R E T 6 A XXX 产品系列 STM32 = 基于ARM®的32位微控器 产品类型 F = 通用类型 产品子系列 101 = 基本型 102 = USB基本型,USB 2.0全速设备 103 = 增强型 105或107 = 互联型
2.1 ARM Cortex-M3处理器结构框图
2.2 ARM Cortex-M3处理器内存映射
2.3 Cortex-M3内核特点
Cortex-M3内核采用ARMv7-M架构,
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一:一个灯的闪烁一、实验要求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结构:PF6~PF10口配置为输出=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(); /* 配置系统时钟*/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)之前必须先配置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寄存器进行配置,GPIOA连接在APB2上,因此RCC_APB2PeriphClockCmd()函数需要使能APB2Periph_GPIOA3.声明GPIO结构:PF6~PF10口配置为输出=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(); /* 配置系统时钟*/GPIO_Configuration(); /* 配置GPIO IO口初始化*/for(;;){LED1();LED2();LED3();}}6.LED1实现所有灯从led1到led5依次点亮再全部熄灭,然后全部点亮,再全部熄灭的过程;LED2实现所有灯从led5到led1依次点亮的过程;LED3实现所有灯从led5到led1依次熄灭,点亮1、3、5灯,然后全部点亮,再全部熄灭的过程;四、实验现象下载程序后开发板上的LED所有灯从led1到led5依次点亮再全部熄灭,然后全部点亮,再全部熄灭,从led5到led1依次点亮,所有灯从led5到led1依次熄灭,点亮1、3、5灯,然后全部点亮,再全部熄灭。
五、总结通过代码分析发现,使用固件库函数可以大大简化编程工作,我们可以依葫芦画瓢,很容易修改成自己想要的功能代码。
对相关寄存器的深入了解,可以使我们对各种外设功能有更深刻、更具体的掌握,使用起来也更得心应手。
实验三:单级外部中断一、实验要求1.利用C语言程序实现按下SW3, LED5闪烁20次单级外部中断实验2.通过实验掌握外部中断的编程方法二、电路原理图1-3 外部中断连接图 三、软件分析外部中断要经过3个部分模块设置处理,然后才进入到中断服务程序的处理,其框图如下: 1-4 中断处理模块框图 外部中断:GPIO 输入中断虽然有16个输入通道,但是只占用了7个中断向量。
EXTI0~EXTI4各占用一个中断向量,EXTI5~9共用一个,EXTI10~15共用一个。
所以在编程的时候EXTI5~9将共用一个中断函数,EXTI10~15共用一个中断函数。
3.本实验用到以下6个库函数(省略了参数):RCC_DeInit();RCC_APB2PeriphClockCmd();GPIO_Init();GPIO_WriteBit();EXTI_InitTypeDef();NVIC_PriorityGroupConfig()4.配置输入的时钟:SystemInit()主要对RCC 寄存器进行配置,GPIOA 连接在APB2上,因此RCC_APB2PeriphClockCmd()函数需要使能APB2Periph_GPIOA5.声明GPIO 结构: PF6~PF10口配置为输出 =GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10;6.应用GPIO 口:点亮LED1有五种方法①ODR 寄存器法:GPIOA->ODR=0xffbf;②位设置/清除寄存器法:GPIOA->BRR|=0X001;外部中断信号输入通道映射(选择)模块外部中断控制器模块 NVIC 中断控制器模块 中断服务程序 外部信号③方法③只适用于GPIOx_BSRR寄存器④GPIO_WriteBit()函数法:GPIO_Write(0xffbf);⑤置位复位库函数法:GPIO_ResetBits(GPIOF,GPIO_Pin_8);配置:①引脚选择:GPIO_EXTILineConfig(GPIO_PortSourceGPIOD,GPIO_PinSource3);②清除中断标志位:EXTI_ClearITPendingBit(EXTI_Line8)③设置外部中断结构体的成员:= EXTI_Mode_Interrupt;= EXTI_Trigger_Falling;= ENABLE;EXTI_Init(&EXTI_InitStructure);配置:分为四个部分,分别针对中断线0到中断线3,结构相同。
NVIC_PriorityGroupConfig()函数配置占先优先级和副优先级9.主函数程序:int main(){RCC_Configuration(); /* 配置系统时钟*/NVIC_Configuration();GPIO_Configuration(); /* 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 中断优先级为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结构:PF6~PF10口配置为输出=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);配置:①引脚选择:GPIO_EXTILineConfig(GPIO_PortSourceGPIOD,GPIO_PinSource3);②清除中断标志位:EXTI_ClearITPendingBit(EXTI_Line8)③设置外部中断结构体的成员:= EXTI_Mode_Interrupt;= EXTI_Trigger_Falling;= ENABLE;EXTI_Init(&EXTI_InitStructure);8.NVIC配置:分为四个部分,分别针对中断线0到中断线3,结构相同。
优先级组都设为2,PC13 中断主次优先级分别为4;PA8 主次优先级分别为3;PD3主次优先级分别为2;PA0 主次优先级分别为1;要求先进入PC13 中断,执行某一个任务,突然PA8 打断PC13 的中断,转而进行PA8的中断。