STM32测试题

STM32测试题
STM32测试题

STM32测试题

一年级的小Q同学立志要成为南强电子设计的牛人,于是他向老师请教,老师给了他一片STM32单片机,但是小Q初来乍到,不知道如何使用,你能帮帮小Q吗?

要求利用STM32单片机实现以下功能,以下所有功能写在一个工程中,一次性实现以下尽可能多的功能(多种功能组合):

(最高难度情况下的器材:STM32单片机,STLINK烧写器,USB串口,5个LED,8个相同电阻,17条连接线)

1、利用面包板,挑选相关器材,搭建LED电路(5%)和UART(串口)接线(5%)。

要求:STM32管脚高电平时LED亮,低电平时LED暗。

提示:STM32管脚接LED,接电阻,再到GND;UART与USART是基本一样的;

UART部分连2条线即可(GND相连,STM32的TX端接USB串口的RX

端);搭建出所需的电路即可得分。

2、利用STM32控制LED闪烁(三选一):

2.1、利用PB0管脚控制LED闪烁。(10%)

要求:LED大约亮0.5秒,暗0.5秒。

2.2、利用定时中断(TIM2),让PB0管脚控制LED闪烁。(20%)

要求:LED精确亮0.5秒,暗0.5秒。

提示:根据电脑上的或手机上的时钟,预估程序的对错。

2.3、利用定时中断(TIM2, TIM4), 分别让PB0和PB1管脚控制两个LED闪烁。

(30%)

要求:PB0控制的LED精确亮0.5秒,暗0.5秒;PB1控制的LED精确

亮0.7秒,暗0.7秒。

提示:根据电脑上的或手机上的时钟,预估程序的对错;要利用到计算

器计算周期,除不尽时,四舍五入。

3、利用STM32管脚控制LED(三选一):

3.1、利用PA11管脚作为输入,控制LED的亮暗。(10%)

要求:PB2接LED,PA11输入电平LED亮,PA11输入低电平LED暗。

3.2、利用PA11的外部中断,点亮LED。(20%)

要求:PB2接LED,LED初始时是暗的,PA11输入高/低电平LED亮。

提示:外部中断利用边缘触发,配置好后,管脚碰一下3V3(一般情况)

或GND,有正确的现象即可。

3.3、利用PA11和PA12的外部中断,控制LED亮暗。(30%)

要求:PB2接LED,PA11输入高/低电平LED亮,PA12输入高/低电平

LED暗。

提示:外部中断利用边缘触发,配置好后,管脚碰一下3V3(一般情况)

或GND,有正确的现象即可。

4、利用STM32的UART(串口)功能(二选一):

4.1、利用PA2管脚作为上拉输入,PA2每低电平一次,UART向电脑发送一次

a字符。(10%)

提示:对串口通信的波特率等参数不做具体要求,能出正确现象即可。

4.2、利用PA2管脚作为上拉输入,PA2每低电平一次,UART向电脑发送一次

Hello字符串。(20%)

提示:对串口通信的波特率等参数不做具体要求,能出正确现象即可;

上拉输入GPIO的MODE为GPIO_Mode_IPU,配置后管脚悬空(默认)时

为高电平。

5、利用STM32的ADC功能(都做):

5.1、在3V3和GND之间用三个相同电阻串联(5%),PA0管脚采集电压,数值

存在value变量中(10%)。

5.2、根据PA0管脚的电压,改变LED亮暗。(10%)

要求:PA1接LED,利用5.1中的分压电路,当PA0采集的电压小于1/2

的3V3时,LED暗,反之,LED亮。

提示:ADC管脚悬空(默认)时,采集的电压不稳定,大约在2000左

右变化;分压电路测量口电压大约为1/3的3V3和2/3的3V3。

6、利用STM32的PWM功能(三选一):

6.1、控制PA7口输出20%占空比的方波,控制LED亮度。(10%)

要求:定时器周期100Hz。

提示:定时器周期指的是TIM_Period的数值。

6.2、控制PA7口输出占空比变化的方波,实现呼吸灯的功能。(25%)

要求:定时器周期100Hz,占空比按0%递增到100%,这样不停循环。

提示:定时器周期指的是TIM_Period的数值;占空比每变化一次(比

如占空比从0%到1%),间隔delay(100000)的时间,方便观察呼吸灯的

现象。

6.3、控制PA7口输出占空比变化的方波,实现呼吸灯的功能。(35%)

要求:定时器周期100Hz,占空比按0%递增到100%,再到递减到0%,

这样不停循环。

提示:定时器周期指的是TIM_Period的数值;占空比每变化一次(比

如占空比从0%到1%),间隔delay(100000)的时间,方便观察呼吸灯的

现象。

恭喜你,已经答完所有题目!

请认真检查一下,注意是否是按照题目要求进行配置的!

本测试满分150分,按得分点给分,达到60分即可过关,进入下一阶段的培训!等级:0-55分,不及格;60-85分,及格;90-115分,良好;120-150分,优秀。

stm32试题及答案

STM32习题集 一、选择题 1.Cortex-M处理器采用的架构是( D ) (A)v4T (B)v5TE (C)v6 (D)v7 2.NVIC可用来表示优先权等级的位数可配置为是( D ) (A)2 (B)4 (C)6 (D)8 3.Cortex-M系列正式发布的版本是( A ) (A)Cortex-M3 (B)Cortex-M4 (C)Cortex-M6 (D)Cortex-M8 4.Cortex-M3的提供的流水线是( B ) (A)2级(B)3级(C)5级(D)8级 5.Cortex-M3的提供的单周期乘法位数是( C ) (A)8 (B)16 (C)32 (D)64 6.STM32处理器的USB接口可达(B ) (A)8Mbit/s (B)12Mbit/s (C)16Mbit/s (D)24Mbit/s 4.下面是Context-M3处理器代码执行方式的是( A ) (A)特权方式(B)普通方式(C)Handle方式(D)Thread方式5.下面是Context-M3处理器的工作模式的是( A ) (A)Thread模式(B)Thumb模式(C)Thumb-2模式(D)Debug模式6.下列是Cortex – M3 处理器可以使用的堆栈的栈是( B ) (A)线程栈(B)进程栈(C)多线程栈(D)空栈7.Context – M3处理器的寄存器r14代表( B ) (A)通用寄存器(B)链接寄存器(C)程序计数器(D)程序状态寄存器 8.Handle模式一般使用( A ) (A)Main_SP (B)Process_SP (C)Main_SP和Process_SP (D)Main_SP或Process_SP 9.Cortex – M3使用的存储器格式是( D ) (A)小端格式(B)大端格式(C)小端或大端格式(D)没有正确答案 10.Cortex – M3的存储格式中专用外设总线区域可以使用( A ) (A)小端格式(B)大端格式(C)小端或大端格式(D)没有正确答案 11.每个通用I/O端口有()个32位的配置寄存器,()个32位的数据寄存器,()个32位的置位/复位寄存器,()个16位的复位寄存器,(B )个32位的锁定寄存器(A)2,1,2,1,1 (B)2,2,1,1,1 (C)2,2,2,1,1 (D)2,2,1,2,1 12.( A )寄存器的目的就是用来允许对GPIO寄存器进行原子的读/修改操作 (A)GPIOX_BSRR和GPIOX_BRR (B)GPIOX_CRL和GPIOX_CRH (C)GPIOX_BSRR和GPIOX_LCKR (D)GPIOX_IDR和GPIOX_ODR 13.所有的GPIO引脚有一个内部微弱的上拉和下拉,当它们被配置为( A )时可以是激活的或者非激活的 (A)输入(B)输出(C)推挽(D)开漏 14.端口输入数据寄存器的地址偏移为( B ) (A)00H (B)08H(C)0CH (D)04H

STM32练习题2(关于IO,有答案)

一、填空题 1.当STM32的I/O端口配置为输入时,输出缓冲器被禁止,施密特触发输入被激活。根据输入配置(上拉,下拉或浮动)的不同,该引脚的弱上拉和下拉电阻被连接。出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器,对输入数据缓冲器的读访问可得到I/O状态。 2.STM32的所有端口都有外部中断能力。当使用外部中断线时,相应的引脚必须配置成输入模式。 3.STM32具有单独的位设置或位清除能力。这是通过_GPIOx BSRR____和GPIOx BRR 寄存器来实现的。 4.ST公司还提供了完善的通用IO接口库函数,其位于stm32f10x_gpio.c ,对应的头文件为stm32f10x_gpio.h。 5.为了优化不同引脚封装的外设数目,可以把一些复用功能重新映射到其他引脚上。这时,复用功能不再映射到它们原始分配的引脚上。在程序上,是通过设置复用重映射和调试I/O配置寄存器(AFIO MAPR) 来实现引脚的重新映射。 二、选择题 1.在APB2上的I/O脚的翻转速度为(A)。 A.18MHz B.50MHz C.36MHz D.72MHz 4.当输出模式位MODE[1:0]=“10”时,最大输出速度为(B)。 A.10MHz B.2MHz C.50MHz D.72MHz 三、简答题 1.简述不同复用功能的重映射。 答:为了优化不同引脚封装的外设数目,可以把一些复用功能重新映射到其他引脚上。这时,复用功能不再映射到它们原始分配的引脚上。在程序上,是通过设置复用重映射和调试I/O配置寄存器(AFIO MAPR) 来实现引脚的重新映射。 2.简述STM32的GPIO的一些主要特点(至少5个)。 答: 1.通用IO,可以作为输入、输出等功能。 2.单独的位设置和位清除 3.外部中断唤醒线 4.复用功能/重映射 5.GPIO锁定机制 四、编程题 编写一个初始化定时器的程序。 GPIO_InitTypedef GPIO_InitStructure; GPIO_InitStructure.GPIO_pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_pp; GPIO_InitStructure.GPIO_Speed=GPIO_Seep_50Mhz; GPIO_Init(GPIOC,&GPIO_InitStructure);

stm32试题

1.Cortex-M处理器采用的架构是( D) (A)v4T (B)v5TE (C)v6 (D)v7 2.NVIC可用来表示优先权等级的位数可配置为是(D ) (A)2 (B)4 (C)6 (D)8 4.Cortex-M3的提供的流水线是( B) (A)2级(B)3级(C)5级(D)8级 5.Cortex-M3的提供的单周期乘法位数是(C ) (A)8 (B)16 (C)32 (D)64 6.STM32处理器的USB接口可达( B ) (A)8Mbit/s (B)12Mbit/s (C)16Mbit/s (D)24Mbit/s 7.Context – M3处理器的寄存器r14代表( B ) (A)通用寄存器(B)链接寄存器(C)程序计数器(D)程序状态寄存器 8.Handle模式一般使用(A ) (A)Main_SP (B)Process_SP (C)Main_SP和Process_SP (D)Main_SP或Process_SP 11.每个通用I/O端口有()个32位的配置寄存器,()个32位的数据寄存器,()个32位的置位/复位 寄存器,()个16位的复位寄存器,( B )个32位的锁定寄存器 (A)2,1,2,1,1 (B)2,2,1,1,1 (C)2,2,2,1,1 (D)2,2,1,2,1 12.(A )寄存器的目的就是用来允许对GPIO寄存器进行原子的读/修改操作 (A)GPIOX_BSRR和GPIOX_BRR (B)GPIOX_CRL和GPIOX_CRH(C)GPIOX_BSRR和GPIOX_LCKR (D)GPIOX_IDR和GPIOX_ODR 13.所有的GPIO引脚有一个内部微弱的上拉和下拉,当它们被配置为( A)时可以是激活的或者非激活的 (A)输入(B)输出(C)推挽(D)开漏 14.端口输入数据寄存器的地址偏移为( B ) (A)00H (B)08H(C)0CH (D)04H 17.每个I/O端口位可以自由的编程,尽管I/O端口寄存器必须以( B )的方式访问 (A)16位字(B)16位字节(C)32位字节(D)32位字 19.固件库中的标志状态(FlagStatus)类型被赋予以下两个值( A) (A)ENABLE或者DISABLE (B)SUCCESS或者ERROR (C)SET或者RESTE (D)YES或者NO 20.STM32F107V有( C )可屏蔽中断通道 (A)40 (B)50 (C)60 (D)70 21.STM32F107V采用( B )位来编辑中断的优先级 (A)4 (B)8 (C)16 (D)32 22.向量中断控制器最多可支持( C )个IRQ中断 (A)127 (B)128 (C)240 (D)255 23.系统控制寄存器 NVIC 和处理器内核接口紧密耦合,主要目的是( C ) (A)结构更紧凑,减小芯片的尺寸 (B)连接更可靠,减小出错的概率 (C)减小延时,高效处理最近发生的中断 (D)无所谓,没有特别的意思,远一点也没有关系 24.关于中断嵌套说法正确的是(B ) (A)只要响应优先级不一样就有可能发生中断嵌套 (B)只要抢占式优先级不一样就有可能发生中断嵌套 (C)只有抢占式优先级和响应优先级都不一才有可能发生中断嵌套 (D)以上说法都不对 25.在STM32107向量中断控制器管理下,可将中断分为(B )组

ARM原理及应用复习题(附答案)

《ARM原理及应用》复习题 填空题 1.STM32F103是_32_位单片机,内核是ARM公司的___Cortex-M3___。 2.STM32F103最高工作频率___72MHz___。片内具有多种外设,它们分别是:_GPIO_、_USART_、_I2C_、_SPI_、_ADC_、_DAC_、_TIM_、_RTC_、_IWDG_、_WWDG_。 IWDG:独立看门狗 WWDG:窗口看门狗 3.STM32103的GPIO端口具有多种配置状态,输入有3种状态,它们分别是_模拟输入_、_浮空输入__和上拉/下拉输入;输出有4种状态,它们分别是_通用推挽输出_、_通用开漏输出_、_复用推挽输出_和_复用开漏输出_。 5.当STM32I/O端口配置为输入时,输出功能被_禁止_,施密特触发器被激活__。 6.STM32的所有端口都有外部中断能力。当使用外部中断线时,相应的引脚必须配置成 输入模式。 7.STM32具有单独的位设置或位清除能力。这是通过GPIOx->BSRR_和GPIOx->BRR寄存器来实现的。 8.STM32芯片内部集成的12位位ADC是一种逐次逼近(比较)型模拟数字转换器,具有18个通道,可测量16个外部和2个内部信号源。 9.STM32的NVIC管理着包括Cortex-M3核异常等中断,其和ARM处理器核的接口紧密相连,可以实现时延的中断处理,并有效地处理后到中断。 10.系统计时器(SysTick)提供了1个24位二进制递减计数器,具有灵活的控制机制11.STM32通用定时器TIM的16位计数器可以采用三种方式工作,分别为向上计数模式、向下计数模式和向上下计数模式。 12.STM32系列ARM Cortex-M3芯片支持三种复位形式,分别为上电复位、按键复位和备份复位。 简答题 1.什么是嵌入式系统?嵌入式系统一般由哪几部分构成?它与通用计算机有何区别? 答: 是一种嵌入受控器件内部,为特定应用而设计的专用计算机系统,具有“嵌入性”、“专用性”和“计算机系统”3个基本要素。//它一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成。//嵌入式系统通常执行的是带有特定要求的预先定义的任务,强调控制能力与控制的可靠性;而通用计算机则可以通过安装各种软件执行各种不同的任务,强调高速、海量的数值计算。 2.ARM Cortex-M3有何特点? 答: 采用哈佛结构的32位处理器内核,具有高性能、实时功能、数字信号处理、低功耗与低电压操作特性,同时还保持了集成度高和易于开发的特点。 3.简述Cortex-M3系统滴答定时器的功能和作用。 答:

STM32期末考试答案解析详解

简述嵌套向量中断控制器(NVI C)的主要特性。 答:STM32的嵌套向量中断控制器(NVIC) 管理着包括Cortex-M3核异常等中断,其和ARM处理器核的接口紧密相连,可以实现低延迟的中断处理,并有效地处理晚到的中断。STM32嵌套向量中断控制器(NVIC)的主要特性如下:q 具有43 个可屏蔽中断通道(不包含16 个Cortex-M3 的中断线)。q 具有16 个可编程的优先等级。q 可实现低延迟的异常和中断处理。q 具有电源管理控制。q 系统控制寄存器的实现。 1.简述STM32的ADC系统的功能特性。 答:STM32的ADC系统的主要功能特性包括如下几个方面:ADC开关控制、ADC时钟、ADC通道选择、ADC的转换模式、中断、模拟看门狗、ADC的扫描模式、ADC的注入通道管理、间断模式、ADC 的校准模式、ADC的数据对齐、可编程的通道采样时间、外部触发转换、DMA请求、双ADC模式和温度传感器。 2.简述STM32的双ADC工作模式。 答:在有两个ADC的STM32器件中,可以使用双ADC模式。在双ADC模式里,根据ADC_CR1寄存器中DUALMOD[2:0]位所选的模式,转换的启动可以是ADC1主和ADC2从的交替触发或同时触发。双ADC工作模式主要包括如下几种:同时注入模式、同时规则模式、快速交替模式、慢速交替模式、交替触发模式和独立模式。 1.简述STM32的USART的功能特点。、 答:STM32的USART为通用同步异步收发器,其可以与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。USART还可以利用分数波特率发生器提供宽范围的波特率选择。STM32的USART支持同步单向通信和半双工单线通信。同时,其也支持LIN(局部互连网),智能卡协议和IrDA(红外数据)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。STM32还具备多处理器通信能力。另外,通过多缓冲器配置的DMA方式,还可以实现高速数据通信。 1.简述STM32的高级控制定时器TIM1的结构。

STM32F407学习资料

使用心得: STM32F4与STM32F1在ADC方面的区别: 通常,在STM32F1中需要加自动校准的程序,如下: // 使能ADC1自动校准功能 ADC_ResetCalibration(ADC1); //检查ADC1自校准的状态位 while(ADC_GetResetCalibrationStatus(ADC1)); //启动ADC1自校准 ADC_StartCalibration(ADC1); //检查ADC1自校准是否结束 while(ADC_GetCalibrationStatus(ADC1)); // ADC自动校准结束--------------- 然而,STM32F4中无需此程序,给出STM32F407的ADC3和DMA方式的官方程序如下:/** ****************************************************************************** * @file ADC3_DMA/main.c * @author MCD Application Team * @version V1.0.0 * @date 19-September-2011 * @brief Main program body ****************************************************************************** * @attention * * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS A T PROVIDING CUSTOMERS * WITH CODING INFORMA TION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SA VE * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY

STM32考试习题集与答案解析

STM32考试习题及答案 一、填空题 1.当STM32的I/O端口配置为输入时,输出缓冲器被禁止,施密特触发输入被激活。根据输入配置(上拉,下拉或浮动)的不同,该引脚的弱上拉和下拉电阻被连接。出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器,对输入数据寄存器的读访问可得到I/O状态。 2.STM32的所有端口都有外部中断能力。当使用外部中断线时,相应的引脚必须配置成输入模式。 3.STM32具有单独的位设置或位清除能力。这是通过GPIOx_BSRR 和GPIOx_BRR 寄存器来实现的。 4.ST公司还提供了完善的通用IO接口库函数,其位于stm32f10x_gpio.c ,对应的头文件为stm32f10x_gpio.h 。 5.为了优化不同引脚封装的外设数目,可以把一些复用功能重新映射到其他引脚上。这时,复用功能不再映射到它们原始分配的引脚上。在程序上,是通过设置复用重映射和调试I/O配置寄存器(AFIO_MAPR) 来实现引脚的重新映射。 二、选择题 1.在APB2上的I/O脚的翻转速度为(A )。 A.18MHz B.50MHz C.36MHz D.72MHz 4.当输出模式位MODE[1:0]=“10”时,最大输出速度为(B )。 A.10MHz B.2MHz C.50MHz D.72MHz 三、简答题 1.简述不同复用功能的重映射。 答:为了优化不同引脚封装的外设数目,可以把一些复用功能重新映射到其他引脚上。这时,复用功能不再映射到它们原始分配的引脚上。在程序上,是通过设置复用重映射和调试I/O配置寄存器(AFIO_MAPR)来实现引脚的重新映射。各个复用功能的重映射可以参阅正文的介绍,由于内容比较多,正文介绍非常详细,这里省略。 2.简述STM32的GPIO的一些主要特点(至少5个)。 答:主要特点如下:

STM32的学习速成

STM32入门系列教程如何提高STM32的学习效率 Revision0.01 (2010-04-08)

目录 第一章笔者的入门总结 (2) 1.1为什么要把时间花在“犹豫”上? (2) 1.2看资料需要计划、耐心和速度 (2) 1.3学STM32必备开发板 (3) 1.4熟悉开发板并试图写程序 (3) 第二章STM32入门方法谈 (4) 2.1拿到开发板我该做什么? (4) 2.2我的时间如何安排 (5) 2.3碰到问题怎么办? (5) 第三章STM32学习步骤 (6) 3.1关于STM32文档学习 (6) 3.230天上手STM32计划 (7) 3.2.1第1步:熟悉调试软件 (8) 3.2.2第2步:GPIO编程 (8) 3.2.3开始全新的STM32深入研究 (9) 福州芯达工作室简介 (9)

第一章笔者的入门总结 1.1为什么要把时间花在 犹豫””上? 为什么要把时间花在““犹豫 每当我们在入门之前(ARM是这样,DSP也一样),总会会有很多疑问,会有很多顾虑。我们渴望知道学习STM32前景如何?需要啥基础?难不难?适不适合我?但是什么时候能心潮澎湃地、相当着急地开始学STM32?日子在一天一天过去!你开始行动了吗?没有行动的思索,永远都不可能入门!把这些时间用来看书吧,效果能好一万倍。 大家一般都是从51单片机过来的,回想一下,我们之前学单片机时如何入门呢?实际上都是先看书(理论),再玩板子(实践)。严格地说,应该是模仿实验。熟悉之后才会自己写程序代码实现某个功能。因此,如果你正在咨询STM32;如果你正对STM32心潮澎湃;如果你想入门STM32;那么,从现在开始,不要犹豫了,不要想再详细地了解STM32的前景了。做一个可能影响你一生的决定吧!不用咨询,不用兴奋,开始看书籍(文档)吧!!每个人都是这么走过来的。 1.2看资料需要计划、耐心和速度 这里所谓的“资料”包括STM32书籍、文档。因为STM32有个特点,datasheet 很多都是中文的,有些同学就没有去买书籍,直接看STM32的用户手册,也是可以的。但是不管看书籍还是文档,我们是需要计划的。不是今天看3页,明天看5页。一本书看了两个月,还在磨蹭。请记住,你学的不是寂寞,是STM32!看书或文档不是用来消遣时间的。背水一战吧,给自己规定一个底线:两周内把一定粗略地过一遍!不要求都看懂,事实上,不可能都看懂。但我们必须理解基本知识,对难度高的知识有一个印象,至少以后碰到问题的时候,我们会似曾相识,感觉在哪里见到过,于是翻资料上网找答案——带着问题的时候,效率才是超高的。 两周过去了,STM32的知识你过一遍了吗?没看完?那么,你应该考虑这些天中,你是否尽力了?是否真的想学STM32?或者还是看到STM32人气很高,也想跟下时髦?是不是碰到问题没法解决就想放弃了?现在是你做第二个决定的时候了,请决定你是否继续攻读STM32。如果是一时冲动想跟时髦,请马上放弃——你已经浪费两周时间了,你还想再浪费14天吗?如果想吃得苦中苦,方为人上人,OK,请继续往下看:) 1.3学STM32必备开发板 稍微了解一些理论知识后,现在摆在你面前,有两条路: 第一,自己画PCB制板、焊接、调试。 第二,购买一套性价比高的开发板。 笔者之前做过几次PCB设计,而且当时在实验室可以报销所有费用,就自

STM32入门基本知识

STM32学前班教程之一:选择他的理由 经过几天的学习,基本掌握了STM32的调试环境和一些基本知识。想拿出来与大家共享,笨教程本着最大限度简化删减STM32入门的过程的思想,会把我的整个入门前的工作推荐给大家。就算是给网上的众多教程、笔记的一种补充吧,所以叫学前班教程。其中涉及产品一律隐去来源和品牌,以防广告之嫌。全部汉字内容为个人笔记。所有相关参考资料也全部列出。:lol 教程会分几篇,因为太长啦。今天先来说说为什么是它——我选择STM32的原因。 我对未来的规划是以功能性为主的,在功能和面积之间做以平衡是我的首要选择,而把运算放在第二位,这根我的专业有关系。里面的运算其实并不复杂,在入门阶段想尽量减少所接触的东西。 不过说实话,对DSP的外设并和开发环境不满意,这是为什么STM32一出就转向的原因。下面是我自己做过的两块DSP28的全功能最小系统板,在做这两块板子的过程中发现要想尽力缩小DSP的面积实在不容易(目前只能达到50mm×45mm,这还是没有其他器件的情况下),尤其是双电源的供电方式和的电源让人很头疼。 后来因为一个项目,接触了LPC2148并做了一块板子,发现小型的ARM7在外设够用的情况下其实很不错,于是开始搜集相关芯片资料,也同时对小面积的AVR和51都进行了大致的比较,这个时候发现了CortexM3的STM32,比2148拥有更丰富和灵活的外设,性能几乎是2148两倍(按照MIPS值计算)。正好2148我还没上手,就直接转了这款STM32F103。 与2811相比较(核心供电情况下),135MHz×1MIPS。现在用STM32F103,72MHz×,性能是DSP的66%,STM32F103R型(64管脚)芯片面积只有2811的51%,STM32F103C型(48管脚)面积是2811的25%,最大功耗是DSP的20%,单片价格是DSP的30%。且有更多的串口,CAP和PWM,这是有用的。高端型号有SDIO,理论上比SPI速度快。 由以上比较,准备将未来的拥有操作系统的高端应用交给DSP的新型浮点型单片机28335,而将所有紧凑型小型、微型应用交给STM32。 STM32学前班教程:怎么开发 sw笨笨的STM32学前班教程之二:怎么开发目前手头的入门阶段使用的开发器概述 该产品为简易STM32调试器和DEMO板一体化的调试学习设备,价格在一百多块。 2、硬件配置

stm32嵌入式试题

第一章、为什么学习STM32 STM32是一系列以ARM Cortex-M为内核的32位嵌入式微控制器。 第二章、初识STM32库 1.什么是启动文件?启动文件的作用是什么?具体实现了哪些功能? 启动文件是任何处理器在上电复位之后最先运行的一段汇编程序。在我们编写的c语言代码运行之前,需要由汇编为c语言的运行建立一个合适的环境,接下来才能运行我们的程序main函数。所以我们也要把启动文件添加进我们的的工程中去。 ?初始化堆栈指针SP; ?初始化程序计数器指针PC; ?设置堆、栈的大小; ?设置异常向量表的入口地址; ?配置外部SRAM作为数据存储器(这个由用户配置,一般的开发板可没有外部SRAM); ?设置C库的分支入口__main(最终用来调用main函数); ?在3.5版的启动文件还调用了在system_stm32f10x.c文件中的SystemIni() 函数配置系统时钟,在旧版本的工程中要用户进入main函数自己调用SystemIni() 函数。 2.stm32f10x_it.c文件的作用是什么? stm32f10x_it.c是专门用来编写中断服务函数的,在我们修改前,这个文件已经定义了一些系统异常的接口,其它普通中断服务函数由我们自己添加。 第四章、深入分析流水灯例程 1.GPIO是什么意思?STM32芯片的GPIO引脚分成哪些组?每组的引脚的号码是什么范围?STM32芯片上,I/O引脚可以被软件设置成各种不同的功能,如输入或输出,所以被称为GPIO (General-purpose I/O)。而GPIO引脚又被分为GPIOA、GPIOB……GPIOG不同的组,每组端口分为0~15,共16个不同的引脚 2.ST库提供了GPIO输出高电平和低电平的函数,分别是什么函数? 用GPIO_SetBit s()控制输出高电平,用GPIO_ResetBit s()控制输出低电平。 3.RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE);这句代码实现的功能是什么?实现开启外设GPIOC的时钟。 4.下面三句代码,分别实现什么样的功能?(1)a&=~(1<<6);第7位清零,其他位保持不变(2)a|=(1<<6);第7位置1,其他位保持不变(3)a^=(1<<6);第7位取反,其他位保持不变 第5章调试程序 1.在调试STM32程序时,进行软件仿真和硬件调试,分别使用哪些软件或工具? 用MDK软件仿真,使用JLINK进行硬件调试

STM32入门C语言详解精编版

阅读flash:芯片内部存储器flash操作函数我的理解——对芯片内部flash进行操作的函数,包括读取,状态,擦除,写入等等,可以允许程序去操作flash上的数据。 基础应用1,FLASH时序延迟几个周期,等待总线同步操作。推荐按照单片机系统运行频率,0—24MHz时,取Latency=0;24—48MHz时,取Latency=1;48~72MHz时,取Latency=2。 所有程序中必须的 用法:FLASH_SetLatency(FLASH_Latency_2); 位置:RCC初始化子函数里面,时钟起振之后。 基础应用2,开启FLASH预读缓冲功能,加速FLASH的读取。 所有程序中必须的 用法:FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); 位置:RCC初始化子函数里面,时钟起振之后。 3、阅读lib:调试所有外设初始化的函数。 我的理解——不理解,也不需要理解。只要知道所有外设在调试的时候,EWRAM需要从这个函数里面获得调试所需信息的地址或者指针之类的信息。 基础应用1,只有一个函数debug。所有程序中必须的。 用法:#ifdef DEBUG debug(); #endif 位置:main函数开头,声明变量之后。 4、阅读nvic:系统中断管理。 我的理解——管理系统内部的中断,负责打开和关闭中断。 基础应用1,中断的初始化函数,包括设置中断向量表位置,和开启所需的中断两部分。 所有程序中必须的。 用法:void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; //中断管理恢复默认参数 #ifdef VECT_TAB_RAM //如果C/C++ Compiler\Preprocessor\Defined symbols中的定义了 VECT_TAB_RAM(见程序库更改内容的表格) NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); //则在RAM调试 #else //如果没有定义VECT_TAB_RAM NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);//则在Flash里调试 #endif //结束判断语句 //以下为中断的开启过程,不是所有程序必须的。 //NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC优先级分组,方式。 //注:一共16个优先级,分为抢占式和响应式。两种优先级所占的数量由此代码确定, NVIC_PriorityGroup_x可以是0、1、2、3、4,分别代表抢占优先级有1、2、4、8、16个和响应优先级有16、8、4、2、1个。规定两种优先级的数量后,所有的中断级别必须在其中选择,抢占级别高的会打断其他中断优先执行,而响应级别高的会在其他中断执行完优先执行。 //NVIC_InitStructure.NVIC_IRQChannel = 中断通道名; //开中断,中断名称见函数库 //NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级 //NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应优先级

STM32自学笔记

一、原子位操作: 原子位操作定义在文件中。令人感到奇怪的是位操作函数是对普通的内存地址进行操作的。原子位操作在多数情况下是对一个字长的内存访问,因而位号该位于0-31之间(在64位机器上是0-63之间),但是对位号的范围没有限制。 原子操作中的位操作部分函数如下: void set_bit(int nr, void *addr)原子设置addr所指的第nr位 void clear_bit(int nr, void *addr)原子的清空所指对象的第nr位 void change_bit(nr, void *addr)原子的翻转addr所指的第nr位int test_bit(nr, void *addr)原子的返回addr位所指对象nr位int test_and_set_bit(nr, void *addr)原子设置addr所指对象的第nr位,并返回原先的值 int test_and_clear_bit(nr, void *addr)原子清空addr所指对象的第nr位,并返回原先的值 int test_and_change_bit(nr, void *addr)原子翻转addr所指对象的第nr位,并返回原先的值 unsigned long word = 0; set_bit(0, &word); /*第0位被设置*/ set_bit(1, &word); /*第1位被设置*/ clear_bit(1, &word); /*第1位被清空*/ change_bit(0, &word); /*翻转第0位*/ 二、STM32的GPIO锁定: 三、中断挂起: 因为某种原因,中断不能马上执行,所以“挂起”等待。比如有高、低级别的中断同时发生,就挂起低级别中断,等高级别中断程序执行完,在执行低级别中断。四、固文件: 固件(Firmware)就是写入EROM(可擦写只读存储器)或EEPROM(电可擦可编程只读存储器)中的程序。 五、固件库:包含各个外设或者内核的驱动头文件和C文件。 六、TIx的输入捕获滤波器(消抖): 采样频率fSAMPLING,采样次数N,如果以采样频率对一脉冲进行采样时,如果在N个采样方波里该脉宽不变,则视为一次有效的脉冲,否则视为无效的脉冲。 七、高级定时器的PWM互补输出: 常用于X相电机驱动,其中的互补输出则防止电机的死区出现。

稀里糊涂学习STM32全本

J^dt ? ? ? ?? ???? ? ????? ? q?670 ? ?8 ?Yū ?Yū ? ū a ?q? 1 /? ? ? % - ? $ L ? ) 670 &RUWH[ 0 #&RUWH[ 0 ? $50Y 0 8 ? )??? ?) b?0 ) #0 0 ? $50? 0 # 0 ?? $50 2 (? #) 8? ?? 3 δ . (?)?- ? δ 8?b q? ? - /? ??? ? ? ? ?-? -? ? -?670 ?? " $ ? -? / ) ? -?670 q ? ǎ ? ? 670 0) Ρ? ? ???p ? - ? ?? ?- # ? ) ?μ-670 )-1 ? -? - ? ? ?+ ??? ? ?? ?) ??(? C ? - ?

J^dt %- (0? ) ? (??/ ?W ? μ - d /??q670 e $% $% " - ? ?p ?" ? ?? 8 '0$ ? c? q? G>1" 3 ? $+% ?- ??? ? ? ? ? $+%"? ? $3% $3% ?P ?? ? ?? ? ! 8? $ $3% ?ǎ2-? #$3% ?ǎ?-? .1" (-? v 670 " ? 8 ?)? ?v b? 50 670 ) [[[?#μ?? 9

J^dt ? ) 670 ? ?? " ?? . 5HJ K # - 0$7 ; K - ? ? 670 ? ? %3 ? ? ? d K e d670 ) [B6WG3HULSKB/LEB9 e? LQF ?-/ / ?? 0) 670 ? ?< ? - ?) - % ? +- ?) ?> ? / -? ?? ??? ??670 t " ?J ? )- >- .? )8 t)?? ? ? - ? ? */ - -? -% + ) ? ?? % - ? ? 2 ??9 ?a- ǎ ǎ? a

stm32-PVD编程要点

下面对上面2张图和表格中的数据做一个简要的解释: 1)PVD = Programmable Votage Detector 可编程电压监测器 它的作用是监视供电电压,在供电电压下降到给定的阀值以下时,产生一个中断,通知软件做紧急处理。在给出表格的上半部分就是可编程的监视阀值数据。当供电电压又恢复到给定的阀值以上时,也会产生一个中断,通知软件供电恢复。供电下降的阀值与供电上升的PVD 阀值有一个固定的差值,这就是表中的V PVDhyst(PVD迟滞)这个参数,通过列出的PVD阀值数据可以看到这个差别。引入这个差值的目的是为了防止电压在阀值上下小幅抖动,而频繁地产生中断。 2)POR = Power On Reset 上电复位;PDR = Power Down Reset 掉电复位。 POR的功能是在VDD电压由低向高上升越过规定的阀值之前,保持芯片复位,当越过这个阀值后的一小段时间后(图中的"滞后时间"或表中的"复位迟滞"),结束复位并取复位向量,开始执行指令。这个阀值就是表中倒数第4行(min=1.8,typ=1.88,max=1.96)。 POR的功能是在VDD电压由高向低下降越过规定的阀值后,将在芯片内部产生复位,这个阀值就是表中倒数第3行(min=1.84,typ=1.92,max=2.0)。 3)可以看到POR比PDR大了0.04V,这就是表中倒数第2行,V PDRhyst(PDR迟滞)=40mV。 4)从上面的第2张图可以看到,当VDD上升越过POR阀值时,内部并不马上结束复位,而是等待一小段时间(Reset temporization),这就是表中的最后一行T RSTTEMPO,它的典型数值是2.5ms。 这个滞后时间是为了等待供电电压能够升高到最低可靠工作电压以上,我们看到POR阀值最小只有1.8V,最大也只有1.96V,都低于数据手册中给出的最低可靠工作电压2.0V,所以这个滞后时间是十分必要的,如果供电电压上升缓慢,尤其是从1.8V升到2.0V以上超过1~2.5ms,则很可能造成上电复位后MCU不能正常工作的情况。 https://www.360docs.net/doc/761631189.html,/view/f7352fd076a20029bd642db3.html STM32内部自带PVD功能,用于对MCU供电电压VDD进行监控。通过电源控制寄存器中的PLS[2:0]位可以用来设定监控电压的阀值,通过对外部电压进行比较来监控电源。当条件触发,需要系统进入特别保护状态,执行紧急关闭任务:对系统的一些数据保存起来,同时对外设进行相应的保护操作。 操作流程: 1)、系统启动后启动PVD,并开启相应的中断。 PWR_PVDLevelConfig(PWR_PVDLevel_2V8); // 设定监控阀值 PWR_PVDCmd(ENABLE); // 使能PVD EXTI_StructInit(&EXTI_InitStructure); EXTI_InitStructure.EXTI_Line = EXTI_Line16; // PVD连接到中断线16上 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //使用中断模式 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Raising;//电压低于阀值时产生中断 EXTI_InitStructure.EXTI_LineCmd = ENABLE; // 使能中断线

STM32经典学习资料——SPI

SPI总线 与IIC类似,SPI也是一种通信协议。今天我们就以WX25X16芯片为例来介绍SPI.首先我们来看下硬件连接。 、从原理图可以看到该芯片需要单片机控制的管脚有4个,非别是CS,DO,DIO,CLK.其中CS 是片选信号,只有将该位拉低才能选中该芯片。DO,DIO分别是输出和输入。CLK是时钟信号。SPI通信的步骤如下所示: 1)获取地址1 2)获取地址2 3)擦除扇区 4)写入数据 好的,下面我们对每个步骤进行分析 (1)在对芯片操作前先要对端口及SPI外设进行相应的设置: /* 函数名:SPI_FLASH_Init(void) 功能:对端口和SPI初始化 输入:无 输出:无 调用:被主函数调用 */ void SPI_FLASH_Init(void) { SPI_InitTypeDef SPI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; /* Enable SPI1 and GPIO clocks */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOD, ENABLE); /*!< SPI_FLASH_SPI Periph clock enable */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); /*将PA5(CLK)配置成复用推挽输出*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); /*将PA6(DO)设置成浮空输入*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_Init(GPIOA, &GPIO_InitStructure); /将PA7(DIO)设为浮空输入/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_Init(GPIOA, &GPIO_InitStructure); /将PA4(CS)设为推挽输出/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); /拉高CS,失能芯片,该语句是宏定义,就是置高PA4/ SPI_FLASH_CS_HIGH(); /* SPI配置/ // W25X16: data input on the DIO pin is sampled on the rising edge of the CLK. // Data on the DO and DIO pins are clocked out on the falling edge of CLK. /*将SPI设为全双工模式*/ SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; /*将SPI设为主模式*/ SPI_InitStructure.SPI_Mode = SPI_Mode_Master; /*将SPI通信的数据大小设为8位*/ SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; /*将CLK的高电平设为空闲*/ SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; /*设置在第二个时钟沿捕获数据*/ SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; /*指定NSS信号由软件管理*/ SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; /SPI_BaudRatePrescaler用来定义波特率预分频的值,这个值用以设置发送和接收的SCK时钟/ SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; /SPI_FirstBit指定了数据传输从高位还是低位开始/ SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; /SPI_CRCPolynomial定义了用于CRC值计算的多项式/ SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(SPI1, &SPI_InitStructure); /* Enable SPI1 */ SPI_Cmd(SPI1, ENABLE); } (2)获取器件地址1

STM32习题集附答案

STM32习题集附答案 一、选择题 1.Cortex-M处理器采用的架构是(D) (A)v4T(B)v5TE(C)v6(D)v72.NVIC可用来表示优先权等级的位数可配置为是(D) (A)2(B)4(C)6(D)8 3.Cortex-M系列正式发布的版本是(A) (A)Cortex-M3(B)Cortex-M4(C)Cortex-M6(D)Cortex-M8 4.Cortex-M3的提供的流水线是(B) (A)2级(B)3级(C)5级(D)8级 5.Cortex-M3的提供的单周期乘法位数是(C) (A)8(B)16(C)32(D)64 6.STM32处理器的USB接口可达(B) (A)8Mbit/s(B)12Mbit/s(C)16Mbit/s(D)24Mbit/s4.下面是Context-M3处理器代码执行方式的是(A) (A)特权方式(B)普通方式(C)Handle方式(D)Thread方式5.下面是Context-M3处理器的工作模式的是(A) (A)Thread模式(B)Thumb模式(C)Thumb-2模式(D)Debug 模式6.下列是Cortex–M3处理器可以使用的堆栈的栈是(B) (A)线程栈(B)进程栈(C)多线程栈(D)空栈7.Context–M3处理器的寄存器r14代表(B)

(A)通用寄存器(B)链接寄存器(C)程序计数器(D)程序状态寄存器 8.Handle模式一般使用(A) (A)Main_SP(B)Process_SP(C)Main_SP和Process_SP(D)Main_SP或Process_SP 9.Cortex–M3使用的存储器格式是(D) (A)小端格式(B)大端格式(C)小端或大端格式(D)没有正确答案 10.Cortex–M3的存储格式中专用外设总线区域可以使用(A) (A)小端格式(B)大端格式(C)小端或大端格式(D)没有正确答案 11.每个通用I/O端口有()个32位的配置寄存器,()个32位的数据寄存器,()个32位的置位/复位寄存器,()个16位的复位寄存器,(B)个32位的锁定寄存器(A)2,1,2,1,1(B)2,2,1,1,1(C)2,2,2,1,1(D)2,2,1,2,112.(A)寄存器的目的就是用来允许对GPIO寄存器进行原子的读/修改操作 (A)GPIOX_BSRR和GPIOX_BRR(B)GPIOX_CRL和GPIOX_CRH(C)GPIOX_BSRR和GPIOX_LCKR(D)GPIOX_IDR和GPIOX_ODR13.所有的GPIO引脚有一个内部微弱的上拉和下拉,当它们被配置为(A)时可以是激活的或者非激活的

相关文档
最新文档