STM32F1 开发标准教程-习题及答案汇总 第1章 STM32开发平台和工具-第17章 实验16--ADC_第1页
STM32F1 开发标准教程-习题及答案汇总 第1章 STM32开发平台和工具-第17章 实验16--ADC_第2页
STM32F1 开发标准教程-习题及答案汇总 第1章 STM32开发平台和工具-第17章 实验16--ADC_第3页
STM32F1 开发标准教程-习题及答案汇总 第1章 STM32开发平台和工具-第17章 实验16--ADC_第4页
STM32F1 开发标准教程-习题及答案汇总 第1章 STM32开发平台和工具-第17章 实验16--ADC_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章STM32开发平台和工具1.简述STM32与ST公司和ARM公司的关系。STM32是基于ARM®Cortex®M3处理器内核的32位闪存微控制器,是一种包含与被包含的关系。STM32为MCU用户开辟了一个全新的自由开发空间,并提供了各种易于上手的软硬件辅助工具。STM32的内核是ARM推出的基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARMCortex-M3内核。STM32是ARM7架构中的一员。ARM是卖内核的,相当于卖CPU的Intel,ST是卖单片机的,相当于卖PC的HP或DELL。ARM是做核的,但自己不生产也不卖芯片,而是向芯片厂家授权;ST是他们的已经授权厂家,拿到授权后容,再做二次开发,像STM32F系列就是ARM的M3系列的芯片。但ST的产品不止商城ARM芯片,还有其他的芯片,像逻辑芯片,老式的单片机芯片。2.通信-下载模块接口电路中使用了一个红色LED(PWR)作为电源指示,请问如何通过万用表检测LED的正、负端?万用表选择电阻档R,不大于100Ω万用表红黑两线搭LED发光二极管两级(可随意搭)观察万用表是否有读数。如果没有读数,调换红黑两线的搭线位置,有读数后搭红线端为正,黑线端为负,3.通信-下载模块接口电路中的电阻(R9)有什么作用?该电阻阻值的选取标准是什么?R9电阻起到限流的作用,防止红色LED被烧坏。4.电源转换电路中的5V电源网络能否使用3.3V电压?请解释原因。一般情况下,5V电源网络不能直接用于3.3V电压电路。主要原因是因为3.3V和5V之间存在电压差异,以及电源网络的电流传输能力。首先,3.3V电路需要的电压级别是3.3V,如果直接使用5V电源,电压过高可能会导致电路中的元件工作不正常甚至损坏。此外,3.3V电压一般是嵌入式系统、微控制器等低功耗电子设备中常用的工作电压,对电压稳定性要求较高。其次,电源网络的电流传输能力也是考虑的因素。如果3.3V电路的负载电流较大,而5V电源网络的电流传输能力不足以满足需求,那么3.3V电压将会下降,导致电路无法正常工作。为了解决这个问题,可以使用适当的电压降低器(如稳压芯片)来降低5V电源来满足3.3V电路的需求。这样可以确保3.3V电压稳定且适合电路要求。另外,还需要注意将电源和电路之间的地线连接好,以保证电路的正常工作和电压的稳定性。5.电源转换电路中,二极管(VD1)上的压差为什么不是一个固定值?这个压差的变化有什么规律?请结合SS210的数据手册进行解释。二极管上的压差不是一个固定值,主要由于二极管的特性和工作条件的影响。首先,二极管的压降与其正向偏置电流有关。正向偏置电流越大,二极管的压降就越小,反之亦然。这是因为二极管在正向偏置下会产生一个导通通道,从而使电流流过,形成压降。当正向偏置电流较小时,导通通道较窄,压降较大;而正向偏置电流较大时,导通通道扩大,压降较小。其次,温度也会对二极管的压降产生影响。温度升高会导致导通通道的导电性增强,从而使压降减小。这是因为随着温度的升高,二极管内部的载流子数量会增加,造成电流的导通更加容易,进而降低了压降。对于SS210这款二极管,你可以参考其数据手册,查找关于压降特性的信息。数据手册中通常会提供一张正向特性曲线图,其中显示了二极管正向压降与正向电流之间的关系。通过观察曲线,你可以了解到在不同正向偏置电流下,二极管上的压降是如何变化的。此外,数据手册还可能提供关于温度对压降的影响的信息,你可以查阅这些细节来更好地理解二极管压降的变化规律。6.什么是低压差线性稳压电源?请结合AMS1117-3.3的数据手册,简述低压差线性稳压电源的特点。低压差线性稳压电源是一种用于提供.3V的输出电压,压降仅为1.1V。2.稳定输出电压:AMS1117-3.3具有良好的线性调整特性,可以在输入电压变化的情况下保持输出电压的稳定性。它的输出电压精度为±2%。3.过热保护:AMS1117-3.3内部集成了过热保护功能,当芯片温度达到一定值时会自动降低输出电压以保护芯片不被过热损坏。4.过负载保护:这个芯片还具备过负载保护功能,当输出电流超过其最大额定值时,会自动切断输出以保护芯片和外部电路的安全性。5.快速响应时间:AMS1117-3.3的响应时间很快,可以在输入电压变化时迅速调整输出电压,以保持稳定的输出。总而言之,低压差线性稳压电源如AMS1117-3.3具有低压差、稳定输出、过热保护、过负载保护和快速响应等特点,适用于需求稳定电源的电子设备。7.低压差线性稳压电源的输入端和输出端均有电容(C16、C17、C18),请问这些电容的作用是什么?输入和输出端都有电容的低压差线性稳压电源,这些电容起着以下作用:1.平滑输入电流:输入端的电容(C16)可以平滑电源输入电流的波动,避免电源噪声和干扰对电压稳定性的影响。它能滤除输入端电源线上的噪声、干扰和高频扰动,保持输入电压的稳定性。2.储存能量:输出端的电容(C17、C18)可以储存能量,以满足负载瞬时需求的特性。当负载突然变化或需要更大功率时,输出端的电容可以通过放电提供额外的电流,以保持输出电压的稳定性。3.过滤输出纹波:输出端的电容(C17、C18)也有助于减小输出纹波,使输出电压更为稳定。电容可以吸收和补偿由于线路和负载变化引起的纹波信号,以保持输出电压的平稳性。总之,这些电容在低压差线性稳压电源中起到了平滑输入电流、储存能量和过滤输出纹波的作用,以确保电源的稳定性和可靠性。8.电路板上的测试点有什么作用?哪些位置需要添加测试点?请举例说明。测试点是电路板上专门用于连接测试设备的位置,用于检测和验证电路板的功能和性能。通过测试点,测试仪器可以接入电路板的各个关键节点,进行信号测量、电压测量、电流测量、时序分析等测试操作。测试点通常需要在电路板设计阶段就预留,并在布局布线过程中添加。一般来说,以下位置需要添加测试点:1.电源线和地线:为了测量电源电压和电流,测试点需要放置在电源引脚处,以便测量电源电压和电流的稳定性。2.输入输出端口:输入输出端口是电路板与外部连接的接口,测试点需要放置在输入输出端口的连接点处,以便验证信号的正确性和稳定性。3.电源过滤电容器:测试点可以放置在电源过滤电容器的引脚处,以便测量电容器的电压稳定性。4.关键信号节点:关键信号节点是电路板中重要的信号路径,测试点需要放置在这些节点的连接点处,以便验证信号的质量和时序。5.调试用信号:为了方便调试和故障排除,测试点可以放置在一些特定信号路径上,用于监测信号波形和时序。举例来说,如果设计一个音频放大器电路板,测试点可以添加在以下位置:电源输入端、音频输入端、音频输出端、放大器芯片引脚等位置。通过这些测试点,可以检测电源电压、音频信号的输入和输出情况,以确保音频放大器电路板的正常工作和性能达到要求。9.电源电路中的电感(L2)和电容(C19)有什么作用?二极管起整流作用,把交流电压变成脉动直流电压。电感起隔离交流电压的作用,因负载对电源输出电压纹波要求较高,而开关管的输出电流是方波,加电容后输出电压近似于三角波(自激式开关电源常利用此纹波电压作信号源),故需用电感隔离(电阻也有近似效果,但效率太低,没有实用意义),在电感后加电容即可得到质量较高的低纹波电压源。电容起滤波作用,大幅度降低电源纹波,使输出电压变成较为平直的直流电压。10.独立按键电路中的电容有什么作用?单相电动机产生的是椭圆磁场,因为不是旋转磁场,所以启动时不转。这时转子需用手扳动半圈,或由启动绕组加电容,使转子转过半圈开始切割磁力线,产生转子电流才开始正常旋转。还有运行电容电动机,电机启动后,电容不断开,他和启动绕组参与运行,等于增加一台小电动机的功率。11.独立按键电路为什么要通过一个电阻连接3.3V电源网络?为什么不直接连接3.3V电源网络?独立按键电路通常需要通过一个电阻连接到电源网络,而不是直接连接到3.3V电源。这是因为电阻可以用来限制按键电流的流动,起到保护电路的作用。当按键被按下时,电流会通过按键电路流入电源网络。通过添加一个适当的电阻,可以限制电流的大小,防止电流过大而损坏电路或电源。这种限流电阻的选择要根据电路的特性和要求进行合理的设计。此外,电阻还可以起其他作用。例如,通过选择适当的电阻值,可以防止按键被无意识地短路,造成电路的误操作。电阻还可以用于防止电源网络中的电流过载或电压过高。因此,使用电阻连接独立按键电路到电源网络是为了保护电路、限制电流并提高系统的稳定性。第2章实验1——F103基准工程1.为什么要对Keil进行软件标准化设置?对Keil软件进行标准化设置,比如将编码格式改为ChineseGB2312(Simplified),这样可以防止代码文件中输入的中文乱码现象;将缩进的空格数设置为2个空格,同时将Tab键也设置为2个空格,这样可以防止使用不同的编辑器阅读代码时出现代码布局不整齐的现象。2.STM32核心板上的STM32芯片的型号是什么?该芯片的内部Flash和内部SRAM的大小分别是多少?核板上STM32芯片的型号是STM32F103RCT6,STM32核心板上的STM32F103RCT6芯片的内部Flash容量为256KB,芯片的内部SRAM容量为48KB。3.在创建STM32基准工程时,使用了两个宏定义,分别是STM32F10XHD和USESTDPERIPHDRIVER,这两个宏定义的作用是什么?STM32F10XHD和USESTDPERIPHDRIVER,一个宏定义表示使用在大容量的STM32芯片,第二个宏定义表示使用标准库。4.在创建STM32基准工程时,为什么要勾选UseMicroLIB?为了方便调试,本书在很多地方都使用了printf语句,在Keil中使用printf,需要勾选UseMicroLIB5.在创建STM32基准工程时,为什么要勾选CreateHEXFile?Keil默认编译时不生成.hex文件,如果需要生成.hex文件,则需要勾选CreateHEXFile6.通过查找资料,总结.hex、.bin和.axf文件的区别。axf文件、hex文件与bin文件都是可以运行在我们的stm32上的,它们都存储了编译器根据源代码生成的机器码,根据应用场合的不同,它们又有所区别。1axf文件:包含调试信息。2hex文件:包含地址信息。3bin文件:最直接的代码映像。axf文件是编译默认生成的文件,不仅包含代码数据,而且还包含着调试信息,在MDK里进行debug调试用的就是这个文件。hex文件在MDK里要勾选如下选项才可以生成:hex文件是一种使用十六进制符号表示的代码记录,记录了代码应该存储到FLASH的哪个地址,下载器可以根据这些信息辅助下载。bin文件是根据axf文件生成的,需要在MDK下添加类似如下格式命令来生成对应的bin文件:bin文件就是最小的可以运行的文件了,其包含最直接的代码映像。这三个文件中axf文件最大,hex文件次之,bin文件最小。7.通过网络下载并安装STM32ST-LINKUtility软件,尝试通过ST-Link工具和STM32ST-LINKUtility软件将.hex文件下载到STM32核心板。略第3章实验2——串口电子钟1.Proc2msTask函数的核心语句块如何实现每2ms执行一次?Timer模块的TIM2用于产生2ms标志,TIM5用于产生1s标志,Main模块通过获取和清除2ms、1s标志,实现Proc2msTask函数中的核心语句块每2ms执行一次,Proc1SecTask函数中的核心语句块每1s执行一次。2.Proc1SecTask函数的核心语句块如何实现每秒执行一次?Timer模块的TIM2用于产生2ms标志,TIM5用于产生1s标志,Main模块通过获取和清除2ms、1s标志,实现Proc2msTask函数中的核心语句块每2ms执行一次,Proc1SecTask函数中的核心语句块每1s执行一次。3.PauseClock函数如何实现电子钟的运行和暂停?Main模块调用RunClock模块的PauseClock函数启动时钟运行,通过SetTimeVal函数设置初始时间值;Proc2msTask函数调用RunClock模块的RunClockPer2Ms函数,实现RunClock模块内部静态变量siHour/siMin/siSec的计数功能,进而实现时钟的运行;时间显示是由RunClock模块的DispTime函数调用printf语句输出实现的,Proc1SecTask函数每秒调用一次DispTime函数。4.RunClockPer2Ms函数为什么要每2ms执行一次?RunClockPer2Ms函数的功能是以2ms为最小单位运行时钟系统第4章实验3——GPIO与流水灯1.简述GPIO都有哪些工作模式。可以通过GPIO寄存器将STM32的GPIO配置成8种模式,这8种模式又分为4种输入模式和4种输出模式。4种输入模式分别为输入浮空、输入上拉、输入下拉和模拟输入,4种输出模式分别为开漏输出、推挽式输出、推挽式复用功能和开漏复用功能。2.GPIO都有哪些寄存器?CRL和CRH的功能是什么?每个GPIO端口有7个寄存器,本实验涉及的GPIO寄存器包括2个32位端口配置寄存器(GPIOxCRL,GPIOxCRH)、1个32位端口输出数据寄存器(GPIOxODR)、1个32位端口位设置/清除寄存器(GPIOxBSRR)、1个32位端口位清除寄存器(GPIOxBRR)。CRL和CRH用于控制GPIO端口的输入/输出模式及输出速度,CRL用于控制GPIO端口(A~G)低8位的输入输出模式及输出速度,CRH用于控制GPIO端口(A~G)高8位的输入输出模式及输出速度。3.计算GPIOE→BRR的绝对地址。0E40011400+0E0C4.GPIOInit函数的作用是什么?该函数具体操作了哪些寄存器?GPIOInit函数的功能是设定A、B、C、D、E、F、G端口的任一个引脚的输入/输出的配置信息,通过向GPIOx→CRL或GPIOx→CRH写入参数来实现,同时,该函数还可以按需要初始化STM32的I/O口状态,通过向GPIOx→BRR或GPIOx→BSRR写入参数来实现。具体描述如表4-8所示。5.如何通过RCC→APB2ENR使能GPIOA端口时钟,且其他模块时钟状态不变?RCCAPB2PeriphClockCmd函数的功能是打开或关闭APB2上相应外设的时钟,通过向RCC→APB2ENR写入参数来实现。6.如何通过固件库函数使能GPIOD端口时钟?GPIO固件库函数包括GPIOInit、GPIOWriteBit和GPIOReadOutputDataBit,这3个函数在stm32f10xgpio.h文件中声明,在stm32f10xgpio.c文件中实现。第5章实验4——GPIO与独立按键输入1.GPIO的IDR的功能是什么?IDR是查看引脚电平状态用的寄存器,ODR是引脚电平输出的寄存器。2.计算GPIOC→IDR的绝对地址。0C0011400+0CC3.GPIOReadInputDataBit函数的作用是什么?该函数具体操作了哪些寄存器?GPIOReadInputDataBit函数的功能是读取指定外设端口引脚的电平值,每次读取一位,高电平为1,低电平为0,通过读取GPIOx→IDR来实现。4.如何通过寄存器操作读取PC4的电平?通过寄存器操作的方式,将PC4输出设置为高电平,且GPIOC端口的其他引脚电平不变。temp=GPIOC->ODR;temp=(temp&0xFFFFFFEF)10x00000010;GPIOC->ODR=temp;5.如何通过固件库操作读取PC4的电平?(1)STM32核心板的LED1和LED2分别与STM32F103RCT6芯片的PC4和PC5相连接,因此需要通过RCCAPB2PeriphClockCmd函数使能GPIOC时钟。该函数涉及APB2ENR的IOPCEN,IOPCEN用于使能GPIOC的时钟,可参见图4-13和表4-14。(2)通过GPIOInit函数将PC4和PC5配置为推挽输出模式,并将两个I/O的最大输出速度配置为50MHz。该函数涉及GPIOxCRL、GPIOxBSRR和GPIOxBRR。GPIOxCRL用于配置输入/输出模式及I/O的最大输出速度,可参见图4-7、图4-8、图,4-11、图4-12,以及表4-4、表4-6、表4-7。(3)通过GPIOWriteBit函数将PC4和PC5的默认电平分别设置为高电平和低电平。该函数也涉及GPIOxBSRR和GPIOxBRR,通过GPIOxBSRR设置高电平,通过GPIOxBRR设置低电平。6.在函数内部定义一个变量,加static与不加static关键字有什么区别?1、函数加上static,该函数就失去了全局可见性,只在该函数所在的文件作用域内可见;2、在类的成员函数前面加上static标识符,成员函数是属于类的而非对象的。第6章实验5——串口通信1.如何通过USARTCR1设置串口的奇偶校验位?如何通过USARTCR1使能串口?向USART_CR1的TE写入1,即可启动数据发送,发送移位寄存器的数据会按照一帧数据格式(起始位+数据帧+可选的奇偶校验位+停止位)通过TX引脚一位一位输出,一帧数据的最后一位发送完成且TXE为1时,USART_SR的TC将由硬件置为1,表示数据传输完成,此时,如果USART_CR1的TCIE为1,则产生中断。在发送过程中,除了发送完成(TC=1)可以产生中断,发送寄存器为空(TXE=1)也可以产生中断,即TDR中的数据被硬件转移到发送移位寄存器时,TXE将被硬件置位,此时,如果USART_CR1的TXEE为1,则产生中断。UART,EnableUARTTx函数用于使能串口发送static voidEnableUARTTx(void); //使能串口发送,在WriteUARTx中调用,每次发送数据之2.如何通过USARTCR2设置串口的停止位?STOP[1:0]用于设置停止位3.USARTDR包含两个寄存器,分别是TDR和RDR,这两个寄存器的作用分别是什么?一个给发送用(TDR),一个给接收用(RDR),因此该寄存器兼具读和写的功能。4.如果某一串口的波特率为9600,应该向USARTBRR写什么?略5.串口的一帧数据发送完成后,USARTSR哪个位会发生变化?1:RTS中断使能,只有接收缓冲区内有空余的空间时才请求下一个数据。当前数据发送完成后,发送操作就需要暂停下来。如果可以接收数据了,将nRTS输出置为有效(拉至低电平)。6.为什么可以通过printf输出调试信息?完成了fputc函数的实现之后,还需要在Keil集成开发环境中,勾选OptionsforTarget→Target→UseMicroLIB,这样就相当于启用了微库(MicroLIB)。因此,我们不但要重写fputc,还要启用微库,才能使用printf输出调试信息。7.能否使用STM32的UART2输出调试信息?如果可以,怎样实现?STM32微控制器的集成开发环境,如Keil、IAR等也同样支持标准库函数,本书基于Keil集成开发环境,"实验1F103基准工程"中已经涉及printf,并且printf输出的内容通过UART1发送到计算机上的串口助手显示。第7章实验6——定时器1.如何通过TIMxCR1设置时钟分频系数、计数器计数方向?DIR用于设置计数器计数方向,CMS[1:0]用于选择中央对齐模式,CKD[1:0]用于设置时钟分频系数2.如何通过TIMxCR1使能定时器?要通过TIMxCR1寄存器使能定时器,你可以按照以下步骤进行操作:1.首先,找到TIMx_CR1寄存器的地址,其中TIMx表示你想要使用的具体定时器,例如TIM1、TIM2等等。通常,这个地址是时器的基地址加上相应的偏移量。2.通过写操作,将要设置的位设置为1以启用定时器。根据TIMx_CR1寄存器的位配置,请确保只修改使能定时器的位,而不影响其他位的值。你可以使用位操作方法,例如按位或操作,来设置相应的位。3.等待定时器使能。在你设置TIMx_CR1寄存器后,你需要等待一定时间,以确保定时器完全启动。3.如何通过TIMxDIER使能或除能更新中断?如果TIMxDIER的CCxIE为1,则产生CCxI中断4.如果某通用计数器设置为递增计数,当产生溢出时,TIMxSR哪个位会发生变化?当TIM2递增计数产生溢出时,UIF由硬件置为1,并产生更新中断,执行TIM2IRQHandler函数。会执行TIM2IRQHandler函数。5.如何通过TIMxSR读取更新中断标志?当产生更新事件时该位由硬件置为1,由软件清零。0:无更新事件产生;1:更新中断等待响应。当寄存器被更新时该位由硬件置为1:若TIMxCR1的UDIS=0、URS=0,当TIMxEGR的UG=1时产生更新事件(软件对计数器CNT重新初始化);若TIMxCR1的UDIS=0、URS=0,当计数器CNT被触发事件重新初始化时产生更新事件6.TIMxCNT、TIMxPSC和TIMxARR的作用分别是什么?略第8章实验7——SysTick1.简述DelayNus函数产生延时的原理。微秒级的延时与毫秒级的延时实现不同,微秒级的延时是通过一个while循环语句内嵌一个for循环语句和一个siTimCnt变量递减语句实现的,for循环语句和sTimCnt变量递减语句执行时间大约是1us。参数nus一开始就赋值给sTimCnt变量,然后在while表达式中判断siTimCnt变量是否为0,如果不为0,则执行for循环语句和siTimCnt变量递减语句;否则,退出DelayNus函数。for循环语句执行完之后,sTimCnt变量执行一次减1操作,接着继续判断siTimCnt是否为0。如果nus为5,则可以实现5μs延时。2.DelayNus函数的时间计算精度受什么因素影响?DelayNus函数的时间计算精度受以下几个因素影响:1.系统时间精度:计算机操作系统的时间精度对于计算时间延迟是很关键的。如果系统时间的精度较低,比如只精确到毫秒级别,那么计算时间延迟也将受到限制,无法达到亚毫秒级的精度。2.硬件性能:计算时间延迟的精度还取决于计算机硬件的性能。比如,处理器的时钟频率越高,单个指令执行的时间就越短,计算延迟的精度也就越高。3.代码实现和算法复杂度:程序代码的实现和算法的复杂度也会对计算时间延迟的精度产生影响。如果算法实现过于复杂,或者存在大量的循环和条件语句,那么计算时间延迟的精度可能会降低。综上所述,DelayNus函数的时间计算精度受系统时间精度、硬件性能以及代码实现和算法复杂度等因素的影响。3.STM32芯片中的通用定时器与SysTick定时器有什么区别?STM32芯片中的通用定时器和SysTick定时器是两种不同类型的定时器。通用定时器是STM32芯片内置的多功能定时器,可以配置为不同的工作模式,如定时器、输入捕获或输出比较等。可以通过编程设置定时器的时钟源、预分频系数和计数周期,以实现不同的定时功能。通用定时器具有更高的灵活性和功能,适用于更复杂的定时任务。SysTick定时器是一种简单的定时器,专门为系统计时和任务调度而设计。它是一个基于内核的定时器,在STM32芯片上有固定的时钟频率,通常为CPU时钟频率的1/8或1/16。SysTick定时器具有内置的计数器和自动重载寄存器,并且可以用于生成中断,以实现周期性的系统定时。总的来说,通用定时器适用于更复杂的定时需求,而SysTick定时器则是用于简单的系统计时和任务调度。选择使用哪种定时器取决于具体的需求和应用场景4.如何通过寄存器将SysTick时钟频率由72MHz更改为9MHz?要将SysTick时钟频率从72MHz更改为9MHz,需要针对系统时钟进行相应的配置更改。以下是一种可能的方法:1.找到系统时钟的源,通常是从主时钟(主OSC)产生的。假设主OSC频率为72MHz。2.定义一个要达到的目标频率,即9MHz。3.计算需要的分频因子。将主OSC频率除以目标频率,即:72MHz/9MHz=8。4.在芯片的寄存器中找到与SysTick相关的寄存器。通常,SysTick控制寄存器(SysTick_CTRL)和SysTick加载寄存器(SysTick_LOAD)是需要配置的。5.将SysTick控制寄存器的时钟源(CLKSOURCE)位设置为0,以使用外部时钟源(系统时钟)。6.将SysTick加载寄存器的值设置为分频因子减1。即如果分频因子为8,则将加载寄存器设置为7。第9章实验8——RCC1.什么是有源晶振,什么是无源晶振?1.无源晶振是有2个引脚的无极性元件,需要借助于时钟电路才能产生振荡信号,自身无法振荡起来2.有源晶振有4只引脚,是一个完整的振荡器,其中除了石英晶体外,还有晶体管和阻容元件主要看你应用到的电路,如果有时钟电路,就用无源,否则就用有源无源晶体需要用DSP片内的振荡器,无源晶体没有电压的问题,信号电平是可变的,也就是说是根据起振电路来决定的,同样的晶体可以适用于多种电压,可用于多种不同时钟信号电压要求的DSP,而且价格通常也较低,因此对于一般的应用如果条件许可建议用晶体,这尤其适合于产品线丰富批量大的生产者。有源晶振不需要DSP的内部振荡器,信号质量好,比较稳定,而且连接方式相对简单(主要是做好电源滤波,通常使用一个电容和电感构成的PI型滤波网络,输出端用一个小阻值的电阻过滤信号即可),不需要复杂的配置。电路有个点标记的为1脚,按逆时针(管脚向下)分别为2、3、4。有源晶振通常的用法:一脚悬空,二脚接地,三脚接输出,四脚接电压。相对于无源晶体,有源晶振的缺陷是其信号电平是固定的,需要选择好合适输出电平,灵活性较差,而且价格高。2.简述RCC模块中的各个时钟源及其配置方法。RCC模块中的主要时钟源包括:1.HSI(High-SpeedInternal)时钟:内部高速时钟源,通常为16MHz,可通过相关寄存器配置。2.HSE(High-SpeedExternal)时钟:外部高速时钟源,可以通过从晶振或外部时钟源引入。通过设置寄存器来配置HSE的频率范围和稳定性参数3.PLL(Phase-LockedLoop)时钟:通过将HSI或HSE时钟源与PLL倍频器相连接,产生更高频率的时钟。PLL可以根据需要配置成不同的倍频倍数,用于系统的主时钟。配置这些时钟源的方法如下:1.配置HSI时钟:通过对RCC_CR寄存器中的HSION位进行设置或清除,来使能或禁用HSI时钟。通过RCC_CFGR寄存器的相关位来配置HSI时钟的分频系数。2.配置HSE时钟:通过对RCC_CR寄存器中的HSEON位进行设置或清除,来使能或禁用HSE时钟。通过RCC_CR寄存器的HSEBYP位来选择是否绕过HSE时钟。通过RCC_CFGR寄存器的相关位来配置HSE时钟的分频系数。3.配置PLL时钟:通过对RCC_PLLCFGR寄存器中的相关位进行设置,来配置PLL的输入时钟源(HSI或HSE)以及PLL的倍频系数。通过RCC_CR寄存器中的PLLON位来使能或禁用PLL时钟。在配置完时钟源后,还需要对系统时钟进行配置,将所需的时钟源作为系统的主时钟:1.配置系统时钟源:通过RCC_CFGR寄存器的SW位来选择所需的时钟源,可以选择HSI、HSE或PLL作为系统主时钟。2.配置AHB、APB1和APB2的分频系数:通过RCC_CFGR寄存器的相关位来配置这些总线的分频系数,以使得它们能够按照所需的频率工作。3.简述RCCDeInit函数功能。RCCDeInit函数的功能是将外设RCC寄存器重设为默认值,通过向RCC→CR、RCC→CFGR和RCC→CIR写入参数来实现。4.在RCCGetSYSCLKSource函数中通过直接操作寄存器完成相同的功能。RCCGetSYSCLKSource函数的功能是返回用作系统时钟的时钟源,通过读取RCC→CFGR来实现。5.本实验为什么要通过FLASHSetLatency函数将时延设置为两个等待状态?通过FLASHSetLatency函数将时延设置为两个等待状态。该函数涉及FLASHACR的LATENCY[2:0],系统时钟SYSCLK时钟频率在0~24MHz时,LATENCY[2:0]取值为000(零等待状态);时钟频率在24~48MHz时,取值为001(一个等待状态);时钟频率在48~72MHz时,取值为010(两个等待状态),可参见图9-5和表9-20。第10章实验9——外部中断1.简述什么是外部输入中断。外部中断一般是由计算机外设发出的中断请指求,如:键盘中断、打印机中断、定时器中断等。外部中断是可以屏蔽的中断,也就是说,利用中断控制器可以屏蔽这些外部设备的中断请求。2.简述外部中断服务函数中断标志位的作用,说明应该在什么时候清除中断标志位,如果不清除中断标志位会有什么后果。外部中断服务函数中断标志位用于标记是否发生了中断事件,例如硬件中断请求或软件中断请求。当中断触发时,中断标志位会被置位,告知处理器发生了中断事件。应该在中断服务函数中清除中断标志位。清除中断标志位的目的是让处理器能够接受新的中断请求。如果不清除中断标志位,处理器会持续地处理之前触发的中断事件,无法接受新的中断请求。如果不清除中断标志位,会导致以下后果:1.处理器无法响应新的中断请求,导致系统无法及时处理其他重要事件。2.在中断服务函数中,如果发生了其他中断,可能会引发嵌套中断的问题,使系统陷入混乱状态。3.若中标志位未清除且发生了循环中断,则可能导致系统无法正常运行,甚至崩溃。因此,为了保证系统的稳定运行和处理器的响应能力,应及时清除中断标志位。3.在本实验中,假设有一个全局int型变量giCnt,该变量在TIM2中断服务函数中执行乘9操作,而在KEY3按键按下的中断服务函数中对giCnt执行加5操作。若某一时刻两个中断恰巧同时发生,且此时全局变量giCnt的值为20,则两个中断都结束后,全局变量giCnt的值应该是多少?略第11章实验10——0LED显示1.简述OLED显示原理。OLED显示技术具有自发光的特性,采用非常薄的有机材料涂层和玻璃基板,当有电流通过时,有机材料就会发光。OLED显示屏幕可视角度大,节省电能。另外,LCD需要背光源,而OLED不需要,因此,同样的显示,OLED效果要比LCD更好一些。2.简述SSD1306芯片工作原理。SSD1306是一种常见的单色OLED(有机发光二极管)显示驱动芯片,它用于驱动OLED显示屏的像素。以下是SSD1306芯片的工作原理简述:1.内部RAM:SSD1306芯片内部包一块RAM,用于存储显示内容的像素数据。这块RAM的尺寸与屏幕的分辨率相关,可以存储每个像素的亮度信息。2.控制信号:SSD1306通过I2C或SPI接口与主控板连接,接收来自主控板的控制信号。3.显示缓存:主控板需要将要显示的内容写入SSD1306的显示缓存中,通过向SSD1306的RAM写入对应的像素数据进行更新。4.显示模式:SSD1306支持多种显示模式,例如整个屏幕点亮、局部区域点亮、反色显示等。主控板可以通过发送命令来设置不同的显示模式。5.刷新显示:一旦主控板完成了对显示缓存的更新,它会向SSD1306芯片发送命令来刷新显示。SSD1306会将显示缓存中的像素数据传输到OLED屏幕上。总的来说,SSD1306芯片负责接收主控板发来的控制信号,并将像素数据存储在内部RAM中,最后将其传输到OLED屏幕上以实现图像的显示。3.简述SSD1306芯片控制OLED显示原理。首先,配置OLED相关的GPIO,其次,将OLEDRES拉低10ms之后再将OLEDRES拉高,对SSD1306进行复位,接着,关闭显示,配置SSD1306,配置完SSD1306之后再开启显示,并执行清屏操作,然后写STM32上的GRAM,最后,将STM32上的GRAM更新到SSD1306上,这样就完成了OLED的显示。4.基于F103微控制器的OLED驱动的API函数包括InitOLED、OLEDDisplayOn、OLEDDisplayOff、OLEDRefreshGRAM、OLEDClear、OLEDShowNum、OLEDShowChar、OLEDShowString,简述这些函数的功能。基于F103微控制器的OLED驱动的API函数包括:1.InitOLED:初始化OLED屏幕,设置通信接口和相关参数。2.OLEDDisplayOn:将OLED屏幕打开,使其显示内容。3.OLEDDisplayOff:将OLED屏幕关闭,停止显示内容。4.OLEDRefreshGRAM:刷新OLED屏幕的显存,将新的图像数据写入到屏幕。5.OLEDClear:清除OLED屏幕上的所有内容,将屏幕恢复为初始状态。6.OLEDShowNum:显示一个数字到OLED屏幕,可以指定显示的位置和字体大小。7.OLEDShowChar:显示一个字符到OLED屏幕,可以指定显示的位置和字体大小。8.OLEDShowString:显示一个字符串到OLED屏幕,可以指定显示的位置和字体大小。第12章实验11——独立看门狗1.简述独立看门狗的作用。看门狗(WDT)是一个定时器。看门狗是用来防止万一单片机程序出错造成重大损失的。防错的原理很简单,它在硬件上就是一个定时器,当它溢出的时候就会让单片机强制复位使程序重新开始执行。正常的情况下是不能让它溢出的,所以在程序上每隔一段时间要给他置一次值(俗称喂狗),只要程序中正常给它喂他就不会溢出。一旦程序跑飞了,有干扰或者进入死循环之类的情况时,不能正常执行程序了,那么就永远执行不到喂狗的指令了,但此时定时器是硬件控制的,仍然会走,所以溢出了,单片机就复位了。一般安全性要求比较高的,系统跑飞了会造成重大事故的都会加一个“狗”保安全。通常,看门狗的溢出时间越短越灵敏,跑飞之后复位的时间越短,也就越安全,但是,喂狗的操作也要更频繁。2.简述延时函数如何影响独立看门狗的喂狗。延时函数可以对独立看门狗的喂狗功能产生影响。独立看门狗通常是一种硬件设备,用于监视系统的正常运行,并在系统出现故障或停止响应时采取适当的措施,例如重新启动系统。独立延时函数在独立看门狗(watchdog)的喂狗过程中起到重要的作用。独立看门狗是一种硬件计时器,用于检测系统是否处于正常运行状态。为了避免系统崩溃或死锁,我们需要在特定时间间看门狗的喂狗机制是通过定期向独立看门狗发送喂狗信号来避免系统进入无响应状态。如果系统正常运行,延时函数的执行时间应小于独立看门狗的喂狗时间间隔。也就是说,在一定的时间内,延时函数需要执行完毕,并且喂狗信号被正确发送,以保持独立看门狗的活动状态。否则,如果延时函数的执行时间超过了喂狗时间间隔,独立看门狗会认为系统发生故障,并采取相应的措施,例如重启系统。因此,隔内喂狗,也就是定期重置独立看门狗计时器。延时函数的作用是在一段指定的时间内暂停程序的执行。在喂狗过程中,延时函数用于确保系统在规定的时间范围内完成任务并执行重置独立看门狗的操作。如果延时时间过长,可能会导致独立看门狗认定系统出现故障,进而执行相应的保护机制。而如果延时时间过短,则可能无法完成系统中的重要任务,也会导致独立看门狗触发报警机制。因此,在编写程序时,我们需要根据系统的要求和任务的复杂程度,合理设定延时函数的时间,以确保独立看门狗能正常工作并提供系统保护。这样一来,独立看门狗可以持续监控系统的运行状态,一旦检测编写延时函数时需要考虑独立看门狗的喂狗时间间隔,并确保延时函数的执行时间不会超过该时间间隔,以保证系统正常工作并避免不必要的重启。这可以通过合理设置延时函数的参数和调整代码逻辑来实现。故障或异常,它将采取相应的措施,如重启系统或触发报警,以确保系统的稳定性和可靠性。3.尝试通过寄存器实现独立看门狗的配置。1.找到相关寄存器:首先,查阅芯片手册,找到与独立看门狗相关的寄存器。通常包括看门狗控制寄存器(IWDG_CR)和看门狗预分频器寄存器(IWDG_PR)。2.配置预分频器:独立看门狗的预分频器用于设置看门狗的溢出计数时间。根据你的需求,配置预分频器寄存器(IWDG_PR)以设置适当的分频系数。3.配置重装载寄存器:重装载寄存器(IWDG_RLR)用于设置看门狗的重装载值,即看门狗的计数器在达到此值之前应被喂狗,否则会发生复位。通过写入适当的值到重装载寄存器,以根据你的需求设置看门狗的喂狗时间。4.喂狗:在执行主要任务的过程中,定时地喂狗。通过定期写入固定值到看门狗关键字寄存器(IWDG_KR)的特定序列,实现喂狗操作。请确保在配置IWDG寄存器之前,先初始化并使能相关的时钟,以及正确设置芯片的访问权限。对于具体的寄存器地址和位字段的值,请参考芯片手册。第13章实验12——读/写内部Flash1.微控制器的内部Flash和内部SRAM有什么区别?1.性质不同Flash是由macromedia公司推出的交互式矢量图和Web动画的标准,由Adobe公司收购。SRAM是随机存取存储器的一种。2.中文名不同Flash中文名是固态存储器与动画编辑器,SRAM中文名是静态随机存取存储器。3.用途不同Flash是一种动画创作与应用程序开发于一身的创作软件,AdobeFlashProfessionalCC为创建数字动画、交互式Web站点、桌面应用程序以及手机应用程序开发提供了功能全面的创作和编辑环境。SRAM主要用于二级高速缓存(Level2Cache)。它利用晶体管来存储数据。2.STM32采用的是大端存储模式还是小端存储模式?STM32采用的是小端模式,将较高的字节存放在较高的地址,较低的字节存放在较低的地址,简单记忆为高放高,低放低为小水,而另外-种存放方式为人端模式,即高放低,低放高为大]。3.程序是存放在内部Flash还是内部SRAM中?程序可以存放在微控制器芯片的内部Flash或内部SRAM中,具体取决于程序的大小和执行的需求。内部Flash是一种非易失性存储器,用于存储程序代码和常量数据。通常,较大的程序或需要长期保存的数据会存储在内部Flash中。Flash存储器的数据被擦除和编程,因此可以多次写入。内部SRAM是一种易失性存储器,用于存储程序运行时使用的临时变量和堆栈。SRAM速度快,但断电后,其中的数据将被清除。通常,较小临时数据和频繁访问的变量会存储在内部SRAM中。选择存放位置要根据需要进行评估。如果程序较大并且需要长期保存,通常会选择内部Flash。如果程序需要频繁地读写临时数据或变量,并且速度很重要,那么内部SRAM可能更合适。有些情况下可能会同时使用两者,将程序代码存放在Flash中,而将需要频繁读写的数据存放在SRAM中。4.使用写内部Flash函数修改内存地址为0x08000000的内容会有什么后果?说明并解释原因。更改内存地址为0x08000000的内容可能会导致严重的问题,并且可能会导致系统崩溃或不可预测的行为。这是因为0x08000000是专门用于存储编译后的程序代码的区域,也被称为Flash存储器。Flash存储器中存储了程序的指令。这些指令是由开发者编写的代码,并在编译后被存储在Flash存储器中。当系统启动时,处理器会从Flash存储器中读取指令,并按照指令的顺序执行相应的操作。如果你直接修改了0x08000000地址处的内容,会导致原本存储在Flash中的指令被篡改或覆盖。这将导致处理器无法正确获取或执行原始指令,从而导致系统运行异常或崩溃。此外,Flash存储器通常具有特殊的访问权限和保护机制,以防止未经授权的修改。如果尝试直接修改Flash存储器的内容,系统可能会拒绝访问或触发保护机制,从而导致修改操作失败。5.简述Flash.c的内部静态函数STM32FlashWriteWord进行内部Flash写操作的流程。Flash.c中的内部静态函数STM32FlashWriteWord是用于进行内部Flash写操作的函数。下面是其大致流程:1.首先,函数会调用内部静态函数STM32FlashUnlock()对Flash解锁,即解除Flash的写保护。2.然后,函数会调用内部静态函数STM32FlashClearStatusFlags()来清除Flash的状态标志。3.接下来,函数会调用内部静态函数STM32FlashSetProgramming()来设置Flash编程模式。4.然后,函数会将待写入的数据转换为字大小,因为Flash只能按字(32位)进行写入。5.函数会利用STM32的内部函数HAL_FLASH_Program()来将转换后的数据写入到Flash的指定地址。6.最后,函数会调用内部静态函数STM32FlashLock()来锁定Flash,重新启用Flash的写保护。第14章实验13——PWM输出1.在SetPWM函数中通过直接操作寄存器完成相同的功能。当我们在编写程序时,可以使用特定的函数来设置PWM(脉冲宽度调制)输出。这些函数通常由硬件厂商提供,并通过操作特定的寄存器来实现。如果要通过直接操作寄存器实现相同的功能,首先需要了解在一些嵌入式系统开发中,可以通过直接操作寄存器来完成某些功能,包括设置PWM(脉冲宽度调制)的功能。这种方法一般需要了解硬件的寄存器映射及其用法。具体而言,在一些芯片或微控你使用的具体硬件平台和寄存器的映射方式。2.通用定时器有哪些计数模式?可以通过哪些寄存器配置这些计数模式?通用定时器有四种计数模式:A、停止/保持吧、模式(TxCON.TMODE1~TMODE0=00)B、连续增计数模式(TxCON.TMODE1~TMODE0=01)C、定向增/减计数模式(有外部引脚决定,xCON.TMODE1~TMODE0=11D、连续增减计数模式(TxCON.TMODE1~TMODE0=10)通过定时器控制寄存器TxCON的12~11位决定,3.根据本实验中的配置参数,计算PWM输出实验输出方波的周期,与示波器中测量的周期进行对比。根据您提供的信息,我们可以使用以下配置参数计算PWM输出方波的周期:1.确定输入信号的周期(单位:秒)。2.计算PWM的占空比(运行时间与周期的比值)。3.使用PWM的占空比乘以输入信号的周期,计算PWM输出方波的周期。例如,假设输入信号的周期为0.1秒,PWM的占空比为50%,则计算PWM输出方波的周期:PWM输出方波的周期=输入信号周期×PWM的占空比=0.1秒×0.5=0.05秒4.STM32F103RCT6芯片还有哪些引脚可以用作PWM输出?STM32F103RCT6芯片具有多个引脚可以用作PWM输出。以下是一些常用的引脚:1.PA0-PA7:GPIOA的引脚0到7可以用作PWM输出。2.PB0-PB7:GPIOB的引脚0到7可以用作PWM输出3.PC0-PC7:GPIOC的引脚0到7可以用作PWM输出。4.PD12-PD15:GPIOD的引脚12到15可以用作PWM输出。5.PE5-PE15:GPIOE的引脚5到15可以用作PWM输出。这只是一些常见的引脚,实际上,STM32F103芯片有多个引脚可以用作PWM输出。第15章实验14——输入捕获1.本实验如何通过设置下降沿和上升沿捕获,计算按键按下时长?当siCaptureSts的bit6为1,表示前一次已经捕获到下降沿,那么这次就表示捕获到上升沿,因此,将siCaptureSts的bit7置为1,同时,通过TIMGetCapture1函数读取TIM5CCR1的值,并将该值赋给siCaptureVal。最后,再通过TIMOC1PolarityConfig函数将TIM5的CH1设置为下降沿触发,为下一次捕获KEY3按下做准备。否则,如果siCaptureSts的bit6为0,表示前一次未捕获到下降沿,那么这次就是第一次捕获到下降沿,因此,将siCaptureSts和siCaptureVal均清零,并通过TIMSetCounter函数将TIM5的计数器清零,同时,将siCaptureSts的bit6置为1,标记已经捕获到了下降沿。最后,再通过TIMOC1PolarityConfig函数将TIM5的CH1设置为上升沿触发,为下一次捕获KEY3松开做准备。2.计算本实验的低电平最大捕获时长。略3.在TIMGetCapture1函数中通过直接操作寄存器完成相同的功能。在使用函数TIM_GetCapture1时,通过直接操作寄存器完成相同的功能是可能的。当直接操作寄存器时,你需要了解寄存器的地址和相关的位域(bitfield)信息。这个过程可能会因硬件平台和编程环境的不同而有所差异。首先,你需要查阅芯片厂商提供的文档,以便了解到与TIM_GetCapture1函数相对应的寄存器是哪个,以及如何设置和读取其中的值。可能的资源包括芯片的参考手册、数据手册或编程手册。一旦你了解到了寄存器的地址和需要操作的位域信息,你可以使用合适的寄存器访问方法来读取或写入对应的寄存器。这通常包括以下几个步骤:1.确定寄存器的地址。寄存器地址通常是一个十六进制值,可以通过参考文档获得。2.写入或读取寄存器的值。你可以使用编程环境提供的相应的寄存器操作函数或者直接访问内存地址的方式来实现。3.对寄存器值进行位操作。根据,你可以设置或清除特定的位,或者以其他方式修改寄存器的值。4.如何通过TIMITConfig函数使能TIM5的更新中断和捕获1中断?这两个中断与TIM5IRQHandler函数之间有什么关系?要通过TIMITConfig函数使能TIM5的更新中断和捕获1中断,可以使用以下代码:```TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC1,ENABLE);```这将使能TIM5的更新中断和捕获1中断。TIM_IT_Update表示更新中断,TIM_IT_CC1表示捕获1中断。第一个参数TIM5表示要配置的定时器。关于TIM5IRQHandler函数和这两个中断之间的关系,IRQHandler函数是用来处理中断的回调函数。当发生更新中断或者捕获1中断时,系统会自动调TIM5IRQHandler函数进行处理。你需要在TIM5IRQHandler函数中编写相应的中断处理代码,以实现你需要的功能。也就是说,当发生更新中断时,TIM5IRQHandler函数会被调用来处理更新中断相关的操作;当发生捕获1中断时,TIM5IRQHandler函数会被调用来处理捕获1中断相关的操作。第16章实验15——DAC1.简述本实验中DAC的工作原理。DAC(数字模拟转换器)是一种电子设备,用于将数字信号转换为模拟信号。它在许多应用中起到重要的作用,包括音频设备、通信系统和控制系统等。DAC的工作原理如下:1.量化:在这一步中,DAC使用一个参考电压来测量抽样和保持的电压,并将其转换为与输入数字表示相对应的模拟信号。此过程可以通过几种不同的方法实现

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论