STM32复习题

更新时间:2024-03-29 10:19:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一、 选择题

1、STM32F407VET6这款单片机型号表明该款单片机的引脚数目为( )

A、48 B、64 C、100 封装类型为( )

A、BGA B、LQFP C、VFQFPN

2、下列开发软件中,不能用来开发STM32的程序的是( )

A、 EWARM B、MDK C、JDK

3、下列时钟源中不可以用来驱动系统时钟的是( )

A、HSE B、HSI C、LSI

4、STM32F103C8T6的SYSCLK最高为( )

A、48MHz B、72MHz C、168MHz

5、当两个中断的抢占式优先级和子优先级一样时,内核处理中断时,这两个中断都已

触发,响应规则为( )

A、按中断向量表的顺序B、随机响应C、按中断程序入口地址顺序 6、AHB是( )

A、高性能总线B、高速外设总线C、低速外设总线

7、在标准库中,如果某个GPIO作为数字量输入口,应配置为( )

A、 GPIO_Mode_AFB、GPIO_Mode_INC、GPIO_Mode_AN 。。。PA9,如果配置为USART1_TX,应配置为( ) 8、GPIOx_ODR寄存器是( )

A、GPIO输出数据寄存器B、GPIO输入数据寄存器C、GPIO配置寄存器 9、高速外设总线是( )

A、AHB B、APB1 C、APB2

10、下列通讯方式中,没有同步时钟的是( )

A、UART B、SPI C、IIC

11、下列通讯方式中,发送和接收是同时进行的是( )

A、UART B、SPI C、IIC

12、下列看门狗,可以避免跑乱的程序正好跑到喂狗程序从而导致不复位的情况是( )

A、独立看门狗 B、窗口看门狗 C、外部硬件看门狗

13、标准库中,当PA8被配置为外部中断线时,对应的中断向量默认为( )

A、EXTI8 B、EXTI9_5 C、EXTI5_9

14、当PA2配置为中断线,配置中断线时,EXTI_InitStructure.EXTI_Line= ( )

A、EXTI_Line2 B、GPIO_PinSource2 C、GPIO_Pin_2 15、带互补输出功能的定时器是( )

A、高级定时器 B、通用定时器 C、基本定时器 16、没有捕获/比较功能的定时器是( )

A、高级定时器 B、通用定时器 C、基本定时器

17、语句ADC_RegularChannelConfig(ADC1, ADC_Channel_17, 2, ADC_SampleTime_

55Cycles5)使用规则通道组采集的是( )

A、内部温度传感器的数据B、内部参考电压的数据 C、某端口的数据

18、ADC初始化时,可通过结构体ADC_InitTypeDef中ADC_ScanConvMode定义( )

A、ADC使用模式 B、ADC扫描模式 C、ADC连续转换模式

19、ADC初始化时,可通过结构体ADC_InitTypeDef中ADC_ContinuousConvMode定

义( )

A、ADC使用模式 B、ADC扫描模式 C、ADC连续转换模式

20、DMA初始化时结构体DMA_InitTypeDef中DMA_PeripheralInc定义的是( )

A、数据传输方向 B、外设增量模式 C、存储器增量模式

21、若ADC使用DMA采集数据,DMA_InitTypeDef中的DMA_DIR 应配置为( )

A、DMA_DIR_PeripheralDST B、DMA_DIR_PeripheralSRC C、DMA_DIR_M2M 22、IIC通信时,起始信号定义为( )

IIC通信时,停止信号定义为( ) A、 SCL为高电平时拉低SDA B、SCL为高电平时拉高SDA C、SCL为低电平时

拉高SDA

23、支持多主结构的通讯方式是( )

A、485 B、IIC C、SPI

24、CAN通讯中,用于接收单元向具有相同ID的发送单元请求数据的帧叫( )

A、数据帧B、遥控帧 C、过载帧 25、CAN通讯的标准格式ID为( )

CAN通讯的扩展格式ID为( ) A、8位 B、11位 C、29位

26、CAN通讯时,设置过滤器组0工作在1个32为位过滤器、标识符屏蔽模式,CA

N_F0R1=0XFFFF0000,CAN_F0R2=0XFF00FF00,则接收时最低位的ID应为( ) A、0B、1 C、不必关心

27、下列哪个文件是μcos与处理器有关的代码,在移植时需要修改( )

A、os_cpu_c.c B、os_tmr.c C、os_cfg.h 28、μcos调用OSStart()开始启动任务管理,在调用该函数前必须至少创建( )个用户任

务。

A、0 B、1 C、2

29、μcos在任务没有配备任务控制块或被剥夺了任务控制块时的状态叫( )

A、就绪状态 B、等待状态 C、睡眠状态

30、μcos中,创建任务函数OSTaskCreate(void(*task)(void*pd),void *pdata,OS_STK *p

tos,INT8U prio) 第一个参数为( )

A、任务代码指针 B、任务参数指针 C、任务堆栈指针。

二、 判断题

1、嵌入式系统和PC都是计算机系统,因此需要完成某项功能只需要安装相应软件。 2、STM32是ST公司生产的基于Cortex内核的32位单片机,Cortex内核知识产权属于

ST公司。

3、基于STM32设计的产品,软件开发时必须使用MDK。

4、STM32产品和51系统的产品一样,采用外部晶振作为系统时钟。 5、STM32产品中设计有多个定时/计数器,采用同一时钟来驱动其工作。 6、独立看门狗IWDG的“独立”的意思是指其驱动时钟区别于其他器件,采用LSI驱动。 7、STM32的中断系统可支持多达84个中断,因此至少要有84个不同的优先级才能将

其区分。

8、子优先级高的中断可以打断子优先级低的中断,实现中断嵌套。

9、因为STM32系列单片机端口可以重映射,所以某个GPIO可以复用给任意外设使用。 10、当STM32某GPIO配置为输出模式时,可以通过输入数据寄存器读取端口状态。

11、AHB总线是高性能总线,主要用于系统高性能、高时钟速率模块间通信。

12、一般说STM32定时器有多少个,并不包括SYSTICK,所以SYSTICK不是定时器。 13、STM32的定时器是16位的,SYSTICK定时器也是16位的。

14、在设计单片机键盘电路时,只有独立键盘和矩阵键盘两种设计方案。

15、因为GPIO_ReadInputDataBit()函数是读取端口电平状态,所以其返回值是bit。 16、端口复用配置时要使能其端口时钟和相应外设时钟,当端口重映射时还要使能辅助

功能时钟AFIO,并开启重映射。

17、STM32所有的中断可以赋予完全不相同的中断优先级。 18、中断函数名是中断程序的入口地址指针,默认已定义,所以不能象函数名一样定义

具有较强的随意性。

19、在STM32标准库中,获取状态标志位和中断状态标志位的底层实现其实是一样的,

但我们要养成良好习惯区分使用。

20、UART通讯时,接线时两个模块或设备间的TX和TX、RX和RX应该直接连接。 21、语句USART_SendData();执行完毕后,数据就已经从串口发送出去了。

22、STM系列MCU的USART数据收发可以采用查询方式、中断方式和DMA方式,其中查

询方式效率不高,因此在实际工程中较少使用。

23、STM32允许利用内部FLASH来存放一些数据,以实现掉电不丢失功能。但在电磁干

扰强烈的环境下要慎用,因为FLASH打开写保护后,程序区数据也有可能被电磁干扰误写。

24、STM32的所有IO口都可以作为外部中断输入。

25、每个外部中断线的触发方式可配置为上升沿触发、下降沿触发和高低电平触发。 26、双边沿触发是指先有上升沿再有下降沿才触发中断,或先有下降沿再有上升沿才触

发中断的方式。

27、STM32的WWDG和IWDG一样,只要喂狗时间不大于某个设定的时间即可。

28、STM32的窗口看门狗的设计目的是为了防止出现跑乱的程序还能刷新独立看门狗

喂狗操作,从而系统不复位、不能正常工作的尴尬。

29、可以使用基本定时器的输入捕获功能来测量输入脉冲信号。 30、STM32的定时器计数脉冲其能由内部时钟源提供。 31、STM32F1系列MCU的ADC最高转换速率为1M,可以通过双ADC快速交替模式来实现

采样速度翻倍。

32、I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定。 33、IIC是异步通讯方式。

34、μcos的任务优先级可以一样。

三、 填空题

1、嵌入式系统上的软件通常是暂时不变的;所以经常称为。

2、STM32的4位中断优先级控制位又分成2组,从高位开始,前面2位定义的是。 3、STM32的的功能,把某些功能引脚映射到其他引脚,可以方便PCB布局,或当默认

复用功能端口被占用的时候有备用端口。

4、STM32F1系列GPIO初始化时语句RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,

ENABLE);的作用是。 5、APB1是总线。

6、部分重映射是指功能外设的部分引脚重新映射,还有一部分引脚使用引脚。

7、STM32有84个中断,包括16个内核中断和68个可屏蔽中断,具有级可编程的中断

优先级。

8、当某两个中断的PreemptionPriority和SubPriority完全相同且都已触发,STM32

优先响应中断。

9、串行通讯方式有SPI,IIC,UART,WIFI,BLE,ZIGBEE,WIFI,CAN等,其中既常用作芯片

之间的通信也觉见于设备之间的通信。

10、STM32的USART配置时需要定义的参数包括:起始位,数据位,奇偶校验位,停止

位和。

11、语句USART_SendData()执行后,数据移入到寄存器。

12、STM32系列MCU的USART数据收发可以采用查询方式、中断方式和。

13、为提高Cortex内核的使用效率,STM32的外设一般都可以使用功能来进行数据收

发操作。

14、每个外部中断线的触发方式可配置为上升沿触发、下降沿触发和触发。

15、STM32的中断线16连接到事件,可以设置为边沿触发方式,以实现对VDD电压的

监测,当出现异常时处理一些紧急任务。

16、STM32的所有IO口的外部中断,在中断向量表中只分配了个中断向量。 17、标准库函数中,函数名下划线前为的英文缩写。 18、STM32的IWDG由时钟驱动,独立于主程序之外。

19、STM32的看门狗,喂狗时间既不能过早,也不能过迟。

20、可以使用STM32的高级定时器或通用定时器的功能来测量输入信号脉冲的长度,计

算其周期和占空比;使用其输出比较功能来输出波形。 21、STM32的定时器是位定时器。

22、TIM_TimeBaseInit()函数的功能是。

23、STM32的ADC是位逐次逼近型模拟数字转换器。

24、STM32最多支持3个独立ADC,但若要采集内部温度传感器数据,只能使用。 25、STM32的ADC规则通道组最多运行16个通道的数据采集,注入通道组最多支持个

通道组的数据采集。

26、STM32F1xx系列ADC的时钟配置时最大为MHz。

27、I2C总线进行数据传送时,只有在时钟线上的信号为电平期间,数据线上电平状态

才允许变化。

28、I2C总线空闲的时候,SDA和SCL两条信号线处于电平。

29、ISO11898标准规定,CAN显示电平表示逻辑,隐性电平表示逻辑1。 30、CAN总线的起止端一般都有一个终端电阻,来做阻抗匹配,以减少。 31、CAN通讯时,用于发送单元向接收单元传送数据的帧叫。 32、CAN通讯的用于当总线上发生持续数据错误时,可将引起此故障的单元从总线上隔

离出去。

33、CAN通讯时,当多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行

仲裁。连续输出电平最多的单元可继续发送。 34、μcos的多个任务靠组成了一个任务链表。

35、μcos创建任务前必须指定任务侁先级,实现任务代码,并为任务分配。

四、 问答题

1、 什么叫嵌入式系统?

2、 解释端口复用,端口重映射,有什么作用?

3、 结合STM32F1系列USART1为例,若将其TX,RX从默认PA9、PA10重映射到PB6、P

B7上,简述其引脚配置步骤。

4、 STM32有5个时钟源,请写出其英文缩写和英文全称。

5、 试闸述抢占式优先级(PreemptionPriority)和响应优先级(SubPriority)的区别。 6、 若通过定时器的PWM功能,来调整LED灯的亮度,实现亮度由暗变亮,又由亮变暗,

也就是常说的呼吸灯功能,试闸述其实现步骤。

五、 综合题

1、 如图所示为某实际工程中STM32F0的时钟系统配置

问:该工程采用驱动系统时钟,系统选用为SYSCLK,外设时钟频率为MHz,独立看门狗的时钟为KHz,PLL输入时钟为MHz。

2、 某工程中,SPI器件接口时序图如下图所示,试使用标准库函数完成SPI主设备的

初始化程序。

static void SPI2_Init(void) {

SPI_InitTypeDefSPI_InitStructure;

NVIC_InitTypeDefNVIC_InitStructure;

//PA15:RST PB12:DC PB13:CLK:D0 PB15:data:D1

(RCC_APB1Periph_SPI2,ENABLE);

SPI2_GpioInit();

SPI_I2S_DeInit(SPI2);

SPI_InitStructure.SPI_Direction = ; //全双工模式

SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //作为主机使用 SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //数据长度8 SPI_InitStructure.SPI_CPOL =; SPI_InitStructure.SPI_CPHA = ;

SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;

SPI_InitStructure.SPI_BaudRatePrescaler =SPI_BaudRatePrescaler_16;//480Kbps SPI_InitStructure.SPI_FirstBit = ; SPI_InitStructure.SPI_CRCPolynomial = 0; SPI_Init(SPI2,&SPI_InitStructure); SPI_Cmd(SPI2,ENABLE);

/* Configure the SPI interrupt priority */

NVIC_InitStructure.NVIC_IRQChannel = SPI2_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);

/* Enable the Rx buffer not empty interrupt */ SPI_I2S_ITConfig(SPI2, SPI_I2S_IT_RXNE, ENABLE); // /* Enable the Tx buffer empty interrupt */ SPI_I2S_ITConfig(SPI2, SPI_I2S_IT_TXE, DISABLE); SPI_I2S_ITConfig(SPI2, SPI_I2S_IT_OVR, DISABLE); SPI_I2S_ClearFlag(SPI2,SPI_I2S_FLAG_TXE); SPI_I2S_ClearFlag(SPI2,SPI_I2S_FLAG_RXNE);

SPI_I2S_ClearITPendingBit(SPI2,SPI_I2S_IT_TXE); SPI_I2S_ClearITPendingBit(SPI2,SPI_I2S_IT_RXNE); }

3、 以下程序使用HAL库,使用STM32F030单片机实现的串口通讯程序,试阅读程序,

回答问题。/* USART1 init function */

static void MX_USART1_UART_Init(void) {

huart1.Instance = USART1; huart1.Init.BaudRate = 9600;

huart1.Init.WordLength = UART_WORDLENGTH_8B;

huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; huart1.Init.Mode = UART_MODE_TX_RX;

huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart1.Init.OverSampling = UART_OVERSAMPLING_16;

huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; if (HAL_UART_Init(&huart1) != HAL_OK) {

_Error_Handler(__FILE__, __LINE__); } } …… __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);//打开空闲中断 __HAL_UART_DISABLE_IT(&huart1,UART_IT_RXNE); __HAL_UART_DISABLE_IT(&huart1,UART_IT_TXE); HAL_UART_Receive_DMA(&huart1, Uart1Data.uart1Rxbuf, Uart_DataRxLength);//打开空闲中断,初始化DMA接收

该初始化程序指定的波特率、数据位、校验位和停止位分别是。 该程序使用什么方式接收数据? 打开空闲中断的目的是什么?

4、 以下程序使用的单片机(STM32F205RG,SYSCLK配置为120MHz)定时器2(APB1为60

MHz)的初始化程序,试阅读程序,回答问题。

static void TIM2_Config(u32 HZ,float Ratio)// PWM {

uint32_t ARR;

TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure; TIM_OCInitTypeDefTIM_OCInitStructure; ARR = (60000000 / HZ-1);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);

GPIO_PinAFConfig(GPIOB,GPIO_PinSource11,GPIO_AF_TIM2);//

TIM_TimeBaseStructure.TIM_Period = ARR; //between 0x0000 and 0xFFFF TIM_TimeBaseStructure.TIM_Prescaler = 0; //

TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x00; TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;

TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable; TIM_OCInitStructure.TIM_Pulse = (uint32_t)(ARR * Ratio);// TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;// TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set; TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset; TIM_OC4Init(TIM2,&TIM_OCInitStructure);

TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable); TIM_ARRPreloadConfig(TIM2, ENABLE); TIM_ClearFlag(TIM2,TIM_FLAG_Update); TIM_ClearFlag(TIM2,TIM_FLAG_CC4); TIM_Cmd(TIM2,ENABLE);

TIM_CtrlPWMOutputs(TIM2,ENABLE);

}

1)该程序配置TIM2利用其捕获比较功能产生信号。

2)该初始化程序两个参数用于设置,在引用的时候,第一个参数应该不小于,第二个参数应该在0~1之间。 3)生成的信号从端口输出。

4)TIM2的计数模式为向上计数、向下计数还是中央对齐?

5、 以下程序是STM32F205单片机的独立看门狗初始化程序,阅读程序,回答问题。

static void IWDG_Init(void) {

IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); IWDG_SetPrescaler(IWDG_Prescaler_256); // IWDG_SetReload(2500); IWDG_ReloadCounter(); IWDG_Enable(); }

1)F2系列的LSI是32KHz,所以必须在秒内喂狗。 2)喂狗时应该调用的函数是:

3)IWDG_WriteAccessCmd()的功能是取消写保护,对哪两个寄存器有效?

4)如果在IWDG_Enable();前插一句IWDG_WriteAccessCmd(IWDG_WriteAccess_Diable);还能否正常喂狗?

6、 试阅读下面的程序,回答问题。

//adc1 dma2 channel0 stream0

static void ADC1_Mode_Config(void) { DMA_InitTypeDefDMA_InitStructure; ADC_InitTypeDefADC_InitStructure; ADC_CommonInitTypeDefADC_CommonInitStructure; GPIO_InitTypeDefGPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE);

GPIO_InitStructure.GPIO_Pin= GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6;//电流电压取样 PA6是键盘

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN; GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL; GPIO_Init(GPIOA, &GPIO_InitStructure); DMA_DeInit(DMA2_Stream0); DMA_InitStructure.DMA_Channel = DMA_Channel_0; DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_ADDRESS;//ADC1_BASE+0x4C

DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&ADC_Raw_Value; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory; DMA_InitStructure.DMA_BufferSize = 7*NPT;// 前三个是电流,中间是电压,最后一个是键盘

DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize =DMA_PeripheralDataSize_HalfWord ;

DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; DMA_Init(DMA2_Stream0, &DMA_InitStructure); DMA_ITConfig(DMA2_Stream0,DMA_IT_TC,ENABLE); // DMA_Cmd(DMA2_Stream0, ENABLE);

//ADC1 ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;// ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;//adcclk=30M

ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;

ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;

ADC_CommonInit(&ADC_CommonInitStructure); ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b; ADC_InitStructure.ADC_ScanConvMode = ENABLE; //只用了一个通道

ADC_InitStructure.ADC_ContinuousConvMode =DISABLE;

ADC_InitStructure.ADC_ExternalTrigConvEdge =ADC_ExternalTrigConvEdge_None;//使用TIM2中断软件触发

ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfConversion = 7; // ADC_Init(ADC1, &ADC_InitStructure); ADC_RegularChannelConfig(ADC1, ADC_Channel_0 , 1, ADC_SampleTime_15Cycles ); //电流1

ADC_RegularChannelConfig(ADC1, ADC_Channel_1 , 2, ADC_SampleTime_15Cycles );//电流2

ADC_RegularChannelConfig(ADC1, ADC_Channel_2 , 3, ADC_SampleTime_15Cycles );//电流3

ADC_RegularChannelConfig(ADC1, ADC_Channel_3 , 4, ADC_SampleTime_15Cycles );//电压1

ADC_RegularChannelConfig(ADC1, ADC_Channel_4 , 5, ADC_SampleTime_15Cycles );//电压2

ADC_RegularChannelConfig(ADC1, ADC_Channel_5 , 6, ADC_SampleTime_15Cycles );//电压3

ADC_RegularChannelConfig(ADC1, ADC_Channel_6 , 7, ADC_SampleTime_15Cycles ); //键盘

//定时器软件触发是0.3125ms一次,ADCCLK 30M,12+15+5=497*7=3479Cycles/30M=0.116ms,一次采样需要0.116ms<0.3125ms,是可以的

/* Enable ADC1 DMA */ ADC_DMACmd(ADC1, ENABLE); ADC_Cmd(ADC1, ENABLE); /* Enable DMA request after last transfer (Single-ADC mode) */ ADC_DMARequestAfterLastTransferCmd(ADC1, ENABLE); /* Start ADC1 Software Conversion */ ADC_SoftwareStartConv(ADC1); /* Wait until the ADC1 is ready */ while(ADC_GetFlagStatus(ADC1, ADC_FLAG_STRT) == RESET) { } }

1)该初始化程序实现的功能是。 2)该程序基于STM32F2,APB2设置为60MHz,ADCCLK最大不超过30MHz,该程序设置ADCCLK为MHz。

3)STM32F2一次ADC周期=12+采样周期+两次间隔,该程序对50Hz的电压电流进行采样,每个周期采样64点,试通过计算七个通道一次ADC所需要的时间(F2)是否符合要求。

4)参考手册推荐的ADC硬件电路如下图所示,由于ADC采集的时候需要有电流输入,因此在RAIN上会有一个压降,对于一次ADC来说,RAIN不能太大,试计算硬件电路上RAIN取值1K是否合适。

RAIN最大值计算公式

(式中K为采样周期,N为转换精度,fADC为30MHz,查手册知3.3V时CADC为4pF,RADC为1.5K欧,ln2=0.693147)

4)参考手册推荐的ADC硬件电路如下图所示,由于ADC采集的时候需要有电流输入,因此在RAIN上会有一个压降,对于一次ADC来说,RAIN不能太大,试计算硬件电路上RAIN取值1K是否合适。

RAIN最大值计算公式

(式中K为采样周期,N为转换精度,fADC为30MHz,查手册知3.3V时CADC为4pF,RADC为1.5K欧,ln2=0.693147)

本文来源:https://www.bwwdw.com/article/zwnr.html

Top