基于STM32的方波信号测试仪设计--毕业论文.docx
《基于STM32的方波信号测试仪设计--毕业论文.docx》由会员分享,可在线阅读,更多相关《基于STM32的方波信号测试仪设计--毕业论文.docx(51页珍藏版)》请在咨信网上搜索。
摘要 摘要 方波是一种非正弦曲线的波形,理想方波只有“高”和“低”这两个值。电流或电压的波形为矩形的信号即为矩形波信号,高电平在一个波形周期内占有的时间比值称为占空比,占空比为50%的矩形波称之为方波。通过STM32通用定时器TM2输入捕获管脚PA2捕获从PA6管脚产生的PWM波,而PWM波由STM32通用定时器TM3通道CH1产生,然后再由1602输出显示频率和占空比。 关键字:输入捕获,PWM频率,捕获算法,复用推挽输出 Ⅰ ABSTRACT ABSTRACT Square wave is a kind of non sinusoidal waveforms, ideal square wave only "high" and "low" these two values. Current or voltage waveform for rectangular signal is the rectangular wave signal, high level ratio in possession of a waveform cycle time is called duty cycle, duty ratio for 50% of the rectangular wave is called a square wave. Through the STM32 general timer TM2 input capture pin PA2 capture from PA6 tube feet to produce PWM wave, and PWM wave generated by the STM32 general timer TM3 channel CH1, then by 1602 output shows the frequency and duty ratio. Keywords: input capture,The PWM frequency,Capture algorithm,Reuse push-pull output Ⅱ 目录 目录 第1章引言 1 1.1选题背景 1 1.2目标和意义 1 1.3实现思路 2 1.3.1输入键盘的选择 2 1.3.2显示屏的选择 2 1.3.3原理和算法 3 1.3.5 完成预估 4 第2章系统硬件设计 5 2.1 STM32F103ZET6最小系统板 5 2.2 4x4矩阵键盘 6 2.3 1602液晶显示屏 7 第3章系统软件设计 9 3.1主程序流程 9 3.2.1输入捕获 10 3.2.2 STM32 PWM波 11 3.2.3通用定时器TM2/TM3 13 3.2.4 STM32F103ZE的GPIO 14 3.2.5外部中断 16 3.3 STM32库函数解析 18 3.4 STM32时钟配置 22 第4章系统调试 28 4.1硬件调试 28 4.1.1硬件的锡焊 28 4.1.2硬件的总体连接 29 4.2软件调试 30 4.2.1程序编写存在的问题 30 4.2.2 程序的下载 31 4.3用户操作 34 第5章总结 35 参考文献 36 致谢 37 附录 38 外文资料原文 45 译文 46 Ⅲ 第1章引言 第1章 引言 1.1选题背景 示波器、信号发生器、数控电源是电子类学习的必备工具,但这一类产品在市场上都价格不低,而我们学生只能依靠于学校实验室来学习,在一个纵观市场上信号发生器和示波器,一个产生一个捕获,于是便想到能否集于一身呢?可能有人会觉得在市场上这种设计没必要,但对于学生来说却是颇有些不方便之处,需要某些信号来驱动的时候就用于产生,而要观察某种信号时则用于显示频率,而万事从基础做起,方波信号:就是指电路系统中信号的质量,如果在要求的时间内,信号能不失真地从源端传送到接收端,我们就称该信号是方波信号。方波最主要的用途就是为其他芯片提供时钟脉冲,特别是在数字电路中,在数字电路中都是以上升沿和下降沿控制的,方波边沿很陡峭,在数字系统中传输的都是方波。所以想到了用STM32来设置更为踏实而容易实现又不失研究的课题—基于STM32的方波信号测试仪设计。 1.2目标和意义 在键盘上输入信号频率,并在1602上显示频率,接触这个课题时,以为要是键盘上直接输入数字然后再屏幕上显示不是作假吗?经过向老师和同学的求教,才得以明白,知道经过STM32上面产生,也同样在STM32S上显示,输入捕获显示输出会存在误差,是一个精度问题,实验意义在于测试STM32上产生方波信号,在1602显示屏上输出的精度,而从捕获端也可转接到我们需要的某种频率的方波信号,不仅是方波的产生端,而且更为精准的确定其频率,在芯片选择上我选用了STM32F103ZE144管脚的,为以后扩展其他功能做预留。 完成本系统要达到的效果:掌握相关电子电路、STM32基本理论知识和设计方法;熟悉信号产生的原理;完成信号发生器的外围电路设计;利用STM32完成信号频率的可调以及相关信息数据的显示。 1 电子科技大学成都学院本科毕业设计论文 1.3实现思路 而本系统用到的是PWM用当作捕获的信号,貌似自产自销的感觉,为什么不选择外部的例如函数发生器等产生的方波呢,事实上本系统可以测试函数发生器产生的方波信号,一端接PA2捕获端,另一端接地,就能测出从函数发生器端产生的方波信号源,但是STM32最小系统板的功能较多,不管是从实质方便上或者从资源节约上,还是本题目想要达到的测试要求效果,所以选择用定时器产生PWM波,配置TM3的通道CH1,在PA6引脚输出,足以适用,在STM32 选择了GPIOD端口,每个GPIO端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH)分别控制每个端口的低八位和高八位,两个32位数据寄存器,(GPIOx_IDR,GPIOxODR)分别是输入数据寄存器和输出寄存器,本系统用到中断来,捕获信号的脉冲变化,并记录下时间,两次中断即为一次脉冲,在一个周期里的占有比为占空比,矩阵键盘连接的GPIOD8-D15,而GPIOD0-D7,接的1602显示屏。 1.3.1输入键盘的选择 方案1:采用独立式按键。独立式按键硬件结构较为简单且电路配置也比较灵活,但是每个按键都会用到一个IO口。如果在按键数量比较多的时候,IO口的利用率不是很高,有点浪费。虽然程序编写比较简单,但是不适合本次设计。 方案1:采用4×4矩阵式键盘。4×4矩阵式键盘虽然电路连接复杂,但是很有效地提高了单片机I/O口的利用率。由于矩阵式的排列方式使得按键排列的整齐,美观又耐用。像这次设计要用到的数字键盘就是需要这样的矩阵键盘。 根据以上分析,本系统的设计需要多个按键,需要减少单片机I/O口的使用,所以方案二4*4矩阵式键盘比较适合本设计。 1.3.2显示屏的选择 方案1: 1602是一个字符型液晶显示模块,一般应用于显示字母、数字、字符等符号型的显示。1602液晶显示屏还分为有背光和没有带背光两种。1602微功耗、体积小,越来越的到广泛的应用,像本次系统要求,实现的功能要求较低,只需要能够显示频率和占空比就可以,性价比高实用。 2 第1章引言 方案2:虽然在最小系统板子上有TFT液晶显示屏的专门接口对应相应的驱动芯片,但是TFT价格相比要高些,相对会繁琐,性价比不高,唯一可能就是方便演示有视觉感好些罢了可视度及对比度,色彩还原能力对比,TFT传说中的三缺一屏,就是三个方向效果不错,一个方向效果比较差,反应慢,不过它的聚焦性能良好,不会产生几何差错,不会闪屏。广泛用于低端和比较旧款的手机,本系统设计比较低端,两者的性能都能够到达要求。 综上所述,选择价格更低廉1602作为显示模块,而且是带背光的。 1.3.3原理和算法 STM32最小板上利用定时器计数,TIM_Period计数值,比如键盘输入1MHZ,分频参数TIM_prescaler=3TIM_Period=17,APB1时钟是72MHZ,,在本参数下,72MHZ/(17+1)/(3+1)=1MHZ。程序编写的就是键盘输入周期和预分频器的算法 研究思路在STM32上如果不使用外部晶振,OSC_IN和OSC_OUT的接法:如果使用内部RC振荡器而不使用外部晶振,请按照下面方法处理: 对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空。 1.3.4系统框图 图1-1系统框图 3 电子科技大学成都学院本科毕业设计论文 系统流程概述: STM32是32位单片,相对于51单片机8位单片机具有很强大的功能模块,速度更快,功能更强大,有usb控制器,废除了51的机器周期。系统的电源采用USB数据线连接供电为:5V,波动开关,电源指示灯亮灯以及显示屏显示发出蓝光,按动最下系统板上的黄色复位,在矩阵键盘上输入要设置的PWM波的频率,在PA6输出,PA2外部中断捕获。达到的效果是输入频率,显示捕获的到的频率和占空比,可能会存在一定的误差。由于STM32最小系统的功能较为强大,本系统用通用定时器TIM3来产生占空比为PWM波。用通用定时器TIM2作系统中断,捕获方波。最后通过PD管脚来在传输数据在1602液晶显示屏显示。 1.3.5 完成预估 材料准备,硬件来源,最小系统板,已经确定了型号及大小,然后就是上某宝选购最实惠的开发板,成本在60R币左右,同样在某宝上面淘两块1602的显示屏,成本在4R的样子,为什么选两块呢,其主要因素是心理作用,因为邮费比它贵了,加了一块,算是防止意外吧,后面还真用上派头了,说到这里你们会以为出现问题了吗?其实不然,而是送给有需要它的同学了。买了一个JINK下载器,用于下载软件的,外加40根杜邦线。 学习资料收集,学习STM32的固件库,以及安装调试软件,怎么使用Keil软件,阅读STM32F10x硬件文档和STM32 参考手册,从本源出发,方波怎么可以在最小系统板上产生,用到那些方面的管脚,定时器,中断等,网上查看具体例子。 4 第2章系统硬件设计 第2章 系统硬件设计 2.1STM32F103ZET6最小系统板 微控制器STM32系列选择 在芯片选择上我由于选题的要求,当然我们要把他的好处又是以及为甚要选择它的缘由在这里都意义说清楚 第一:STM32,与51属于微控制器范畴,单片集成多种用于控制,通信,存储的外设。系统在程序的控制下执行。CPLD属于逻辑器件,按照程序,有一定智能程度。STm32运算速度、存储容量远高于51单片机。 第二:对于少于100脚的产品,有2种接法:第1种:OSC_IN和OSC_OUT分别通过10K电阻接地。此方法可提高EMC性能;第2种:分别重映射OSC_IN和OSC_OUT至PD0和PD1,再配置PD0和PD1为推挽输出并输出'0'。此方法可以减小功耗并(相对上面)节省2个外部电阻。 第三:选择144管脚的系统板,第一,相对配置方便一点,512闪存的大一点,是为了今后有扩展的可能,管脚预留为以后实现功能更多,板子上有TFT液晶接口,本设计鉴于功能相对简单,所以没有用到TFT液晶显示屏,而是选了价格低实用的1602显示屏,足以满足实验设计要求,用到最小系统板上的GPIOA/GPIOB/GPIOD引脚;黄色复位键,USB接口电路。 第四:虽然在学校本身就有开设51单片机这门课程,这方面有一定基础又是,但是单片是基于寄存器操作的,所以在微机原理等方面要有很好的理解能力,为STM32 微控制器呢,纵观人类发展史,人类总是向着解放双交解放劳动力的方向前行,在这互联网时代,人们在不听的升级升华自己的大脑,解放大脑,放开思维逐渐向着这一趋势开放自我。 在这里引用网络上对STM32和对51单片机的调侃,把它们分别比作地主和农民,51是农民,资源少,能力小;stm32是地主,财大气粗,资源丰富,速度快,所以在这里选STM32F103ZET6。 5 电子科技大学成都学院本科毕业设计论文 2.2 4x4矩阵键盘 4x4矩阵键盘顾名思义他有16的按键,而本系统所涉及的频率输入只需要用到0—9数字,和一个清零/确认按键(SET),连线是PD8-PD15引脚 工作的原理是:用4条I/O线作为行线,4条I/O线作为列线组成的键盘。在行线和列线的每个交叉点上,设置一个按键。而这样的按键中按键的个数是4 X 4个。这样的行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。 矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按键没有按下时,所有的输入端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。 图2-1按键原理 按键的具体响应流程图 初始化矩阵键盘要使用的GPIO口。 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //定义PB8到PB11为上拉输入 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;定义PB12到PB15为下拉输入。 图2-3按键流程图。 6 第2章系统硬件设计 图2-2按键读取 2.3 1602液晶显示屏 标准的16口,第一引脚:VSS为电源地,第二引脚:VDD为正极5V,第三引脚:VO为液晶显示器对比度调整端,接正极对比度最弱,接地对比度最高,然而对比度过高会产生“鬼影”,所以要加一个电位器来调整对比度,也就是用来改变电压的电阻,型号选用:ZOV 204-200kΩ,第四引脚:RS为寄存器选择,高电平为1时选择数据寄存器,低电平0时选择指令寄存器,第五引脚:RW为读写信号线,高电平1时进行读操作;低电平0时进行写操作,第六引脚:E端为使能端,第七至第十四引脚为8位双向数据端,连接最小板的PD0PD7 IO,第15—16:背光电源,15引脚背光正极,16引脚背光负极。 模块最佳工作电压为5.0V,作电流为2.0mA(5.0V)、示容量为16×2个字符。基于STM32F103方波信号测试仪系统开机时就对LCD初始化,然后读取单片机送出的freq:10K。第二行F:10K,D:50然后显示在显示屏上,完成对PWM的捕获并显示频率和占空比。如下图:2—3 7 图2-3 1602功能显示 图2-4,上面一排输入的是PWM波的频率,输入函数接收形参55,进入if语句进行计算,得出其周期,以及预分频数,也就是前面一直提到的主频除以周期再除以预分频值,得到的PWM的频率,最后在定时器3的通道CH1输出。 本系统虽然都是调用的库函数,包括本节所提到的1602的程序也好,输入函数,中断库等,但是在这里还是要简单的贴上1602显示屏的指令集原理介绍: 1602通过D0~D7的8位数据端传输数据和指令: 1.显示模式设置: (初始化) 2.0011 0000 [0x38] 设置16×2显示,5×7点阵,8位数据接口; 3.显示开关及光标设置: (初始化) 4.0000 1DCB D显示(1有效)、C光标显示(1有效)、B光标闪烁(1有效) 5.0000 01NS N=1(读或写一个字符后地址指针加1 &光标加1), 6.N=0(读或写一个字符后地址指针减1 &光标减1), 7.S=1 且 N=1 (当写入一个字符后,整屏显示左移) 8.s=0 当写入一个字符后,整屏显示不移动 数据指针设置:数据首地址为80H,所以数据地址为80H+地址码(0-27H,40-67H)。 第3章系统软件设计 第3章 系统软件设计 3.1主程序流程 图3-1 主流程图 系统的程序执行从该流程图开始,第一步主要是配置系统时钟和管脚初始化,输入捕获都是实现在定时器上的,这里选用TIM2定时器中断捕获,初始化管脚,一般带两个参数,初值和分频数都是为了初始化通用寄存器,得到定时器的频率按键设置输出用于设置PWM的频率,在PA6引脚输出,在矩阵键盘上输入在设置的频率范围内由PA2引脚捕获在1602显示屏上输出。 1602的使能端、RS寄存器选择、读写端RW分别由最小系统板子上的PB7/PB6/PB5控制。按键的输入,频率的捕获也好都是通过这3个端口来控制的。 9 第3章系统软件设计 3.2.1输入捕获 表3-1程序模块划分 函数名 函数功能 参数 GPIO 端口 无 CLOCK 时钟 无 TIM 定时器 无 PWM PWM波 无 EXTI 外部中断 无 NVIC 中断函数 无 main 主函数模块 无 输入捕获模式可以用来测量脉冲宽度或者测量频率。STM32的定时器,除了TIM6和TIM7,其他定时器都有输入捕获功能。STM32的输入捕获,简单的说就是通过检测“TIMx_CHx”上的边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值TIMx_CNT存放到对应的通道的捕获/比较寄存“TIMx_CCRx”里面,完成一次捕获。同时还可以配置捕获时是否触发中断/DMA等.本次实验用到的是TIM2。 TIM2捕获的原理是根据收到PWM波进入外部中断,例如:定时器开始计时第一次上升沿触发中断清零,假如第二次下降沿触发中断记为t1第三次的时候记为t2根据占空比的概念得出算法,也就是两次中断即为一个脉冲,第二次中断除以周期就可以得到占空比。 图3-2捕获的流程图 11 我们用到TIM2_CH1来捕获高电平脉宽,也就是要先设置输入捕获为上升沿检测,记录发生上升沿的时候TIM2_CNT的值。然后配置捕获信号为下降沿捕获,当下降沿到来时,发生捕获,并记录此时的TIM2_CNT值。这样,前后两次TIM5_之差,就是高电平的脉宽,同时TIM2的计数频率我们是知道的,从而可以计算出高电平脉宽的准确时间。 第一次捕获是上升沿,第二次捕获时下降沿,必须在捕获上升沿之后,设置捕获边沿为下降沿,同时,如果脉宽比较长,那么定时器就会溢出,对溢出必须做处理,否则结果就不准了。这两件事,我们都在中断里面做,所以必须开启捕获中断和更新中断。 3.2.2 STM32 PWM波 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,由于STM32没有专门的PWM引脚,所以使用IO的复用模式,通用定时器TM2-TM5每个可以产生4路PWM(CH1-CH4),除了基本定时器6和定时器7,不能产生外,TM1和TM8高级定时器可产生多达7路PWM波, STM32最多可以同时产生30路PWM输出,这里我们仅利用TIM3的CH1产生一路PWM在PA6输出。 图3-3 STM32的时钟分配 此项功能:用来控制一个输出波形指示一段给定的的时间已经到时。脉冲宽度调制模式产生的PWM信号由TIMx_ARR寄存器确定频率TIMx_CCRx寄存器确定占空比。 11 电子科技大学成都学院本科毕业设计论文 要使STM32的通用定时器TIMx产生PWM输出,系统会用到3个寄存器,来控制PWM的。这三个寄存器分别是:捕获/比较模式寄存器(TIMx_CCMR1/2)捕获/比较使能寄存器(TIMx_CCER)、捕获/比较寄存器(TIMx_CCR1~4)。(注意,还有个TIMx的ARR寄存器是用来控制PWM的输出频率) 首先是捕获/比较模式寄存器(TIMx_CCMR1/2),该寄存器总共有2个,TIMx _CCMR1和TIMx _CCMR2。TIMx_CCMR1控制CH1和CH2,而TIMx_CCMR2控制CH3和CH4。 其次是捕获/比较使能寄存器(TIMx_CCER),该寄存器控制着各个输入输出通道的开关。 最后是捕获/比较寄存器(TIMx_CCR1~4),该寄存器总共有4个,对应4个输通道CH1~4。4个寄存器都差不多,说的简单一点,这个寄存器就是用来设置PWM的占空比的。(具体的各个寄存器的各个位,详见STM芯片手册。) TIM3频率=TIM3CLK/(TIM3_Period+1), 由于通道输出占空比等于:TIM3_CCRx/(TIM3_Period+1);本系统只选择了TM3的CH1通道在PA6管脚输出,而且根据输入算法,只做到了频率范围是1——10kHZ, 自动重装载寄存器周期和预分频的算法 {duty=10000; fr=7200/freq; } else { duty=10; fr=7200000/freq; }/* Time base configuration 周期算法72M/2000=0.036M 0.036M=36000HZ 36000/720=50HZ 周期等于50HZ********/ TIM_TimeBaseStructure.TIM_Period = duty-1; //设置在下一个更新事件。 12 第3章系统软件设计 装入活动的自动重装载寄存器周期的值 ///此处是重点,设定重的时间长度 //TIM_Period设置了在下一个更新事件装入活动的自动重装载寄存器周期的值。它的取值必须在0x0000和0xFFFF之间 TIM_TimeBaseStructure.TIM_Prescaler =fr-1; //设置用来作为TIMx时钟频率除数的预分频值 //TIM_Prescaler设置了用来作为TIMx时钟频率除数的预分频值。它的取值必须在0x0000和0xFFFF之间 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_time TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式,TIM_CounterMode_DownTIM向下计数模式 TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位。 /* Output Compare Active Mode configuration: Channel1 */ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2 TIM_OC3Init(TIM3,&TIM_OCInitStructure); //根据TIM_OCInitStruct中指定的参数初始化外设TIMx TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能TIMx在CCR1上的预装载寄存器 TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; //PWM功能使能。 3.2.3通用定时器TM2/TM3 STM32 的通用定时器是一个通过可编程预分频器( PSC )驱动的 16 位自动装载计数器( CNT )构成。 STM32 的通用定时器可以被用于:测量输入信号的脉冲长度 ( 输入捕获 ) 或者产生输出波形 ( 输出比较和 PWM) 等。 STM32 的每个通用定时器都是完全独立的,没有互相共享的任何资源。 13 3.2.4STM32F103ZE的GPIO GPIO的简介:多达112多功能的双向IO口:80%的IO口利用率标准的I/O口可承受5V;IO口可以吸收25mA(总共可吸收150mA);18MHz翻转速度;可设置输出速度达到50MHz;多达21路模拟输入;可改变功能引脚如:USARTx、TIMx、I2Cx、SPIx、CAN、USB等;多达112个IO口可以设置为外部中断(同时可最多可有16个);可用于将MCU从待机模式唤醒(PA.0);可用作防入侵引脚(PC.13); 所有的IO被分成7个端口(GPIOA..GPIOG);可对IO口的位进行位设置或清除;锁定机制可以避免对IO口的寄存器的误写操:当对一个IO口的某一位进行锁定序列操作,该位的配置不再可能被修改,直到下一次复位。 STM32每个引脚都有8种配置模式: 浮空输入上拉输入 下拉输入模拟输入 推挽输出开漏输出 复用推挽输出复用开漏输出 本系统用到复用功能的推挽输出 AF_PP—片内外设功能,因为是串口不在时普通的IO口所以复用,因为没接上拉电阻所以推挽。因为TX为发送数据端口所以输出。 定时器的时钟来源有 4个: (1)内部时钟(CK_INT) (2)外部时钟模式 1 :外部输入脚(TIx) (3)外部时钟模式 2 :外部触发输入(ETR) (4)内部触发输入(ITRx):使用A定时器作为B定时器的预分频器(A为B提供时钟)。 这些时钟,具体选择哪个可以通过“TIMx_SMCR”寄存器的相关位来设置。这里的“CK_INT”时钟是从“APB1”倍频的来的,除非“APB1”的时钟分频数设置为1,否则通用定时器“TIMx”的时钟是“APB1”时钟的2倍,当APB1的时钟不分频的时候,通用定时器“TIMx”的时钟就等于“APB1”的时钟。 第3章系统软件设计 定时器的时钟来源有 4个: (1)内部时钟(CK_INT) (2)外部时钟模式 1 :外部输入脚(TIx) (3)外部时钟模式 2 :外部触发输入(ETR) (4)内部触发输入(ITRx):使用A定时器作为B定时器的预分频器(A为B提供时钟)。 这些时钟,具体选择哪个可以通过“TIMx_SMCR”寄存器的相关位来设置。这里的“CK_INT”时钟是从“APB1”倍频的来的,除非“APB1”的时钟分频数设置为1,否则通用定时器“TIMx”的时钟是“APB1”时钟的2倍,当APB1的时钟不分频的时候,通用定时器“TIMx”的时钟就等于“APB1”的时钟。 void RCC_Configuration(void) { SystemInit(); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE| RCC_APB2Periph_AFIO, ENABLE); //使能GPIO外设和AFIO复用功能模块时钟使能 } TIMx_CNT 寄存器,该寄存器是定时器的计数器,该寄存器存储了当前定时器的计数值。 自动重装载寄存器( TIMx_ARR ),该寄存器在物理上实际对应着2个寄存器。TIMx_CNT 寄存器,该寄存器是定时器的计数器,该寄存器存储了当前定时器的计数值。一个是程序员可以直接操作的,另外一个是程序员看不到的,这个看不到的寄存器在《 STM32 参考手册》里面被叫做影子寄存器。事实上真正起作用的是影子寄存器。根据 TIMx_CR1 寄存器中 APRE 位的设置:APRE=0 时,预装载寄存器的内容可以随时传送到影子寄存器,此时 2 者是连通的;而 APRE=1 时,在每一次更新事件( UEV )时,才把预装在寄存器的内容传送到影子寄存器。 15 第3章系统软件设计 3.2.5外部中断 中断对于开发嵌入式系统来讲的地位绝对是毋庸置疑的,在C51单片机时代,一共只有5个中断,其中2个外部中断,2个定时/计数器中断和一个串口中断,但是在STM32中,中断数量大大增加,而且中断的设置也更加复杂。 基本概念:ARM Coetex-M3内核共支持256个中断,其中16个内部中断,240个外部中断和可编程的256级中断优先级的设置。STM32目前支持的中断共84个(16个内部+68个外部),还有16级可编程的中断优先级的设置,仅使用中断优先级设置8bit中的高4位。 STM32可支持68个中断通道,已经固定分配给相应的外部设备,每个中断通道都具备自己的中断优先级控制字节PRI_n(8位,但是STM32中只使用4位,高4位有效),每4个通道的8位中断优先级控制字构成一个32位的优先级寄存器。68个通道的优先级控制字至少构成17个32位的优先级寄存器。 4bit的中断优先级可以分成2组,从高位看,前面定义的是抢占式优先级,后面是响应优先级。按照这种分组,4bit一共可以分成5组 第0组:所有4bit用于指定响应优先级; 第1组:最高1位用于指定抢占式优先级,后面3位用于指定响应优先级; 第2组:最高2位用于指定抢占式优先级,后面2位用于指定响应优先级; 第3组:最高3位用于指定抢占式优先级,后面1位用于指定响应优先级; 第4组:所有4位用于指定抢占式优先级。 所谓抢占式优先级和响应优先级,他们之间的关系是:具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套。 当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。每一个中断源都必须定义2个优先级。 17 第3章系统软件设计 使用外部中断的基本步骤如下: 1.设置好相应的时钟; 2.设置相应的中断; 3.IO口初始化; 4.把相应的IO口设置为中断线路(要在设置外部中断之前)并初始化; 5.在选择的中断通道的响应函数中中断函数。 说说本系统中的中断,中断用来捕获方波的电平变化,一个脉冲相当于有两次中断。 图3-4外部中断 对于中断的控制,STM32有一个专用的管理机构:NVIC STM32有43个channel的settable的中断源;AIRC(Application Interrupt and Reset Register)寄存器中有用于指定优先级的4 bits。这4个bits用于分配preemption优先级和sub优先级,在STM32的固件库中定义如下 #define NVIC_PriorityGroup_0 ((u32)0x700) #define NVIC_PriorityGroup_1 ((u32)0x600) 17 第3章系统软件设计 #define NVIC_PriorityGroup_2 ((u32)0x500) #define NVIC_PriorityGroup_3 ((u32)0x400) #define NVIC_PriorityGroup_4 ((u32)0x300) 图3-5 外部中断/架构框图 表3-2外部中断寄存器 寄存器 描述 IMR 中断屏蔽寄存器 EMR 事件屏蔽寄存器 RTSR 上升沿触发选择寄存器 FTSR 下降沿触发选择寄存器 SWIR 软件中断事件寄存器 PR 挂起寄存器 3.3STM32库函数解析 意法半导体在推出STM32微控制器之初的同时提供了一套完整细致的固件 开发包,里面包含了STM32开发过程中所涉及到的所有底层操作,通过在C语言程序中引入这样的固件开发包,可以使开发人员或者学习工作者等从复杂底层寄 19 存器操作中解放出来,将精力专注应用程序的开发上,在差错漏方面可以缩小范围,做到专一,这便是ST推出这样一个开发包的初衷,我想,正是因为开发商的这种为使用学习的这一用户群体的细致考虑,所以它会在微控制器业内占有重要地位。 对于大多数人,相比和我一样,当然在51单片机我学的并不是很深入,学习STM32都会有一个不适应的过程,那就是程序开发不在从寄存器层次开始,那些什么堆栈操作物理地址等,那问题来了我们从什么角度出发呢,也就是起始点在哪。咨询过很多人,有老师有学习过同学,首先要先去熟悉STM32所提供的固件库,那还是否一定使用固件库呢?必然没有绝对之事,但STM32微控制器的寄存器规模不是常见8位单片机可以比拟的,假如花大把时间仔细琢磨众多寄存器的意义,先不说顺利与否,这里的顺利是指学习者在寄存器方面有不错的理解基础与经验,时间都浪费在这方面上了,那还谈何存在开发商所说的优势与初衷呢! 在这里引用EEPW的用户名为Albertgreenabc网友,库函数解析部分资源。 以最常见的本系统也用到GPIO设备的初始化函数为例,如下程序: GPIO_InitTypeDef GPIO_InitStructure; ① GPIO_InitStructure.GPIO_GPIO_pin=GPIO_pin_6; ② GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50Mhz ; ③ GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; ④ GPIO_Init(GPIOA,&GPIO_InitStructure); ⑤ 首先①是该语句显然定义了一个 GPIO_InitTypeDef 类型的变量名为 GPIO_InitStructure GPIO_InitTypeDef 的原型位于“stm32f10x_gpio.h”文件,原型如下:typedef struct { u16 GPIO_Pin; GPIOSpeed_TypeDef GPIO_Speed; GPIOMode_TypeDef GPIO_Mode; } GPIO_InitTypeDef; 19 电子科技大学成都学院本科毕业设计论文 可知 GPIO_InitTypeDef 是一个结构体类型同义字,其功能是定义一个结构体,该结构体有三个成员分别是 u16 类型的 GPIO_Pin、GPIOSpeed_TypeDef 类型的 GPIO_Speed GPIOMode_TypeDef 类型的 GPIO_Mode 。继续探查 GPIOSpeed_TypeDef 和 GPIOMode_TypeDef 类型, 在“stm32f10x_gpio.h”文件中找到对 GPIOSpeed_TypeDef 的定义:typedefenum{ GPIO_Speed_10MHz = 1, GPIO_Speed_2MHz, GPIO_Speed_50MHz }GPIOSpeed_TypeDef; 则可知 GPIOSpeed_TypeDef 枚举类型同一只,其功能是定义一个枚举类型变量, 该变量可表示 GPIO_Speed_10MHz、GPIO_Speed_2MHz 和 GPIO_Speed_50MHz 三个含义(其中 GPIO_Speed_10MHz 已经定义为 1,读者必须知道 GPIO_Speed_2MHz 则依次被编译器赋予 2,而 GPIO_Speed_50MHz 为 3)。 同样也在“stm32f10x_gpio.h”文件中找到对 GPIOMode_TypeDef 的定义: Typedef enum {GPIO_Mode_AIN=0x0, GPIO_Mode_IN_FLOATING=0x04, GPIO_Mode_IPD=0x28, GPIO_Mode_IPU=0x48, GPIO_Mode_Out_OD=0x14, GPIO_Mode_Out_PP=0x10, GPIO_Mode_AF_OD=0x1C, GPIO_Mode_AF_PP=0- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 STM32 方波 信号 测试仪 设计 毕业论文
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【w****g】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【w****g】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【w****g】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【w****g】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文