stm32单片机考试复习

stm32单片机考试复习
stm32单片机考试复习

一、填空题。

1.ST公司的STM32F4 系列芯片采用了___ 内核,其分为两个系列。其

中STM32F407 系列的运行频率为____ 。

2.所有的IO 端口都有外部中断功能,当使用外部中断时候,IO 引

脚必须设置为模式。

3.程序存储器、数据存储器、寄存器和I/O 端口排列在同一个线性

(即地址连续)的地址空间内。

4.定时器的时基单元包括_____ ,______ 和自动重载寄存器。

5.串口数据帧由______ ,数据位,奇偶校验位,停止位组成。

6.GPIO 端口的位可以配置为多种模式,有输入模式,输出模式,和

7.CM4内核支持256 个中断,其中包含了个内核中断和_ 个外部

中断。

8.ADC转换模式分为___ 和 ___ 。

9.程序存储器、数据存储器、寄存器和I/O 端口排列在同一个线性

(即地址连续)的地址空间内。

10.定时器的时基单元包括_____ , ______ 和自动重载寄存器。

11.串口数据帧由_____ ,数据位,奇偶校验位,停止位组成。

12.GPIO端口的位可以配置为多种模式,有输入模式,输出模式,

13.ST公司的STM32F4系列芯片采用了___ 内核,其分为两个系列。其

中STM32F407系列的运行频率为___ 。

14.当定时器使用GPIO引脚实现输出比较产生PWM,IO 引脚必须设

置为_ 模式。

15.程序存储器、数据存储器、寄存器和I/O 端口排列在同一个线性

(即地址连续)的地址空间内。

16.I2C 总线在传送数据过程中共有三种类型信号,它们分别是:,

结束信号和__________ 。

17.串口数据帧由______ , 数据位,奇偶校验位,停止位组成。

18.GPIO端口的位可以配置为多种模式,有输入模式,输出模式,

19.STM32F407内部集成了___ 个DAC。

20.STM32F407芯片有_______ 个定时器。

21.ADC转换模式分为___ 和 ___ 。

22.DAC采用12 位转换能达到的转换精度是____________

23. I2C 总线在传送数据过程中共有三种类型信号, 它们分别是: 结

束信号和 ____________ 。 24. GPIO 端口的位可以配置为多种模式,有输入模式,输出模式,

二、 选择题

1. 下列哪种方法可以对 STM32 进行程序下载

【 】 A. ST_Link B. J_ Link C. 在线应用编程 D. 以上都可以

2. 哪些不是 STM32 的 ADC 系统的特点

【 】

A. 4-位分辨率

B. 自校准

C. 可编程数据对齐

D. 单次和连续转换模式

3. STM32 嵌套向量中断控制器 (NVIC) 具有多少个可编程的优先等级 【 】 A. 16 B.43 C.72 D.36

4. 以下不属于串行通信方式的接口是 【 】

A. SPI

B. UART

C. IIC

D. 8080 接口

5. 表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模

块中 寻找其定义的关键字是 【 】 A. extern B. static C. define D. typedef

6、 STM32F407ZET6芯片共有多少个引脚。 【 】 A .112 B. 72 C. 144 D. 176

7. STM32F407 系统时钟 SYSCLK 来源不包括 【 】

A .HSE B.HSI C.PLLCLK D.LSI

8. 每个 IO 引脚都有一个复用器,该复用器采用多少路复用功能输入。

【 】 A .8 B. 16 C. 32

D. 4

9. 以下不属于串行通信方式的接口是

【 】

A .SPI

B.UART

C.IIC

D. 8080 接口

10. 表示变量或者函数的定义在别的文件中, 提示编译器遇到此变量和函数时在其他

模块中 寻找其定义的关键字是 【 】 A . extern B. static C.define D.typedef

16.STM32F407ZET6芯片共有多少个 IO 口。 A .112 B. 72 C. 144 D. 176 17. STM32F407 系统时钟 SYSCLK 来源不包括

A HSE B.HSI C.PLLCLK D. LSI

18. STM32F767 的 ADC 是 12 位逐次逼近型的模数转换器,它有 多少个通道。 【 】

_____ 和

11. S TM32F407ZET6 芯片 FLASH 容量是 A.256K B.512K C.1M D.2M

12. 定时器的时基单元不包括 A. 自动重载寄存器 B. C.预分频寄存器 D.

13. S TM32F407 共有多少个 GPIO 引脚。

A.112

B.176

C.144

D.72

14. 以下不属于 IIC 接口的特点是 A . 串行通信

B. 半双工

C.

15. S TM32F767 内部集成温度传感器的输出连接到 A .通道 18 B. 通道 16 C.

【】

【 】

定时器计数器

溢出寄存器

【 】

【 】

异步传输 D. 2

线式总线

ADC 的通道上。 【 】 通道 4 D. 通道 5

A.8 B. 16 C. 19 D. 4

19.串口接口是几线的串行通信总线。【】A. 1 B. 2 C.4 D.8

20.定义结构体的类型别名和枚举类型的关键字是【】A.extern B. static C. define D. typedef

三、简答题

1.简述不同复用功能的重映射过程。

2.简述STM32 的USART 的功能特点。

3.简述STM32 时钟的类型。

4.IIC 总线的组成?画出IIC 总线工作时序图,并说明总线数据传输过程。

5.说明外部按键扫描方式和外部线中断方式的差异。

6.请说明使用基于HAL 库的编程方式处理ADC 的步骤。

7.简述GPIO 端口四种模式的区别。

8.简述查询方式和中断方式在ADC 的区别。

9.简述STM32F407 时钟系统的来源构成及多个时钟源的作用。

10.简述定时器输出比较输出PWM 的原理。

11.请说明使用基于HAL 库的编程方式使用DAC 的步骤。

四、程序阅读题

1.阅读下列程序,在空格填上正确注释。

void IIC_Start(void)

{

SDA_OUT(); // _________________________

IIC_SDA=1;

IIC_SCL=1;

delay_us(4);

IIC_SDA=0; // ________________________

delay_us(4);

IIC_SCL=0; // _________________________

}

void IIC_Stop(void)

{

SDA_OUT();

IIC_SCL=0;

IIC_SDA=0; // ________________________

delay_us(4); IIC_SCL=1;

IIC_SDA=1; // ______________________ delay_us(4);

}

2. 阅读下列程序,完成程序填空,并说明程序功能。

u8 KEY_Scan(u8 mode)

{

____ u8 key_up=1;

// 按键松开标志

if(mode==1) _______ ; // 支持连按

if(key_up&&(KEY0==0||KEY1==0||KEY2==0||WK_UP==1))

delay_ms(10); key_up=0; if(KEY0==0) else if(KEY1==0) else if(KEY2==0) else if(WK_UP==1) return WKUP_PRES; } else if(

_____________________________ ) key_up=1; return 0; // 无按键按下

}

程序实现的功能?

3. 找出下列程序中错误,并改正。

void MY_ADC_Init(void)

{

ADC1_Handler.Instance=ADC1;

ADC1_Handler.Init.ClockPrescaler=ADC_CLOCK_SYNC_PCLK_DIV4; ADC1_Handler.Init.Resolution=ADC_RESOLUTION_4B; ADC1_Handler.Init.DataAlign=ADC_DATAALIGN_RIGHT; ADC1_Handler.Init.ScanConvMode=DISABLE; ADC1_Handler.Init.EOCSelection=DISABLE;

return KEY0_PRES; return KEY1_PRES;

return KEY2_PRES;

ADC1_Handler.Init.ContinuousConvMode=DISABLE;

ADC1_Handler.Init.NbrOfConversion=1;

ADC1_Handler.Init.DiscontinuousConvMode=DISABLE;

ADC1_Handler.Init.NbrOfDiscConversion=0;

ADC1_Handler.Init.ExternalTrigConv=ADC_SOFTWARE_START;

ADC1_Handler.Init.ExternalTrigConvEdge=ADC_EXTERNALTRIGCONVEDGE_NONE;

ADC1_Handler.Init.DMAContinuousRequests=DISABLE;

HAL_ADC_Init(&ADC1_Handler);

}

void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) {

GPIO_InitTypeDef GPIO_Initure; __HAL_RCC_ADC2_CLK_ENABLE();

__HAL_RCC_GPIOC_CLK_ENABLE(); GPIO_Initure.Pin=GPIO_PIN_5;

GPIO_Initure.Mode=GPIO_MODE_OUTPUT; GPIO_Initure.Pull=GPIO_PULLUP;

HAL_GPIO_Init(GPIOA,&GPIO_Initure);

}

4.阅读下列程序,在空格填上正确注释

int main(void)

{

u8 key_num=0;

HAL_Init(); // ______________________________

Stm32_Clock_Init(432,25,2,9);

while (1)

// ______________

delay_init(21 6);

Led_Init();

Digitron_Init();

Key_Init();

// _____________ // ______________

{

}

key_num=KEY_Scan(0x01); // _________________ switch (key_num)

{

case 1: LED0(0); LED1(1);break;

case 2: LED0(0); LED1(0);break;

case 3: LED0(1); LED1(1);break;

case 4: LED0(1); LED1(0);break;

}

}

}

5 阅读下列程序,完成程序填空,并说明程序功能。u8 KEY_Scan(u8 mode)

{

static u8 key_up=1;

if(mode==1)key_up=1;

if( _________________________ )

{

delay_ms(10);

key_up=0;

if(Key0==0) return 1;

if(Key1==0) return 2;

if(Key2==0) return 3;

if(Wk_Up==1) return

4;

}

else if (Key0==1&&Key1==1&&Key2==1&&Wk_Up==0)

程序实现了什么功能?

6.找出下列程序中错误,并改正。

#include "digitron.h"

#include "delay.h"

u8 Posture_Code[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

u8 Segment_Code[]=

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,0x00,0x40,0xff};

void Digitron_Init(void)

{

GPIO_InitTypeDef GPIO_Initure;

__HAL_RCC_GPIOF_CLK_ENABLE();

GPIO_Initure.Pin=GPIO_PIN_8 || GPIO_PIN_6 || GPIO_PIN_7;

GPIO_Initure.Mode=GPIO_MODE_INPUT_PP;

GPIO_Initure.Pull=GPIO_PULLUP;

GPIO_Initure.Speed=GPIO_SPEED_HIGH;

HAL_GPIO_Init(GPIOC,&GPIO_Initure);

}

void HC595_Transport_Byte(u8 dat) // 实现一个字节数据的输出

{

u8 i,temp;

for(i=0;i<8;i++)

{

temp=dat&0x80;

if(temp)

HAL_GPIO_WritePin(GPIOF, GPIO_PIN_7, GPIO_PIN_SET);

else

HAL_GPIO_WritePin(GPIOF, GPIO_PIN_7, GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIOF, GPIO_PIN_8, GPIO_PIN_RESET);

delay_us(5);

HAL_GPIO_WritePin(GPIOF, GPIO_PIN_8, GPIO_PIN_SET);

delay_us(5);

dat>>=1;

}

}

void Disp_Digitron(u8 *posture,u8 *dispture)

{

u8 i;

for(i=0;i<8;i++)

{

HAL_GPIO_WritePin(GPIOF, GPIO_PIN_6, GPIO_PIN_SET);

delay_ms(5);

HC595_Transport_Byte(~posture[i]);

HC595_Transport_Byte(Segment_Code[dispture[i]]);

HAL_GPIO_WritePin(GPIOF, GPIO_PIN_6, GPIO_PIN_RESET); delay_us(5);

}

}

7.阅读下列程序,在空格填上正确注释

void LED_Init(void)

{

GPIO_InitTypeDef GPIO_Initure; // _____________

__HAL_RCC_GPIOC_CLK_ENABLE(); // _____________

GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1;

GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; // ______________

GPIO_Initure.Pull=GPIO_PULLUP; // ________________

GPIO_Initure.Speed=GPIO_SPEED_HIGH;

HAL_GPIO_Init(GPIOC,&GPIO_Initure);

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_SET);// ___________

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_1,GPIO_PIN_SET);

}

8.阅读下列程序,完成程序填空,并说明程序功能

void LCD_ShowString(u16 x,u16 y,u16 width,u16 height,u8 size,u8 *p)

{

u8 x0=x;

width+=x;

height+=y;

while((*p<='~')&&(*p>=' '))// 判断是不是非法字符!

{

if( _______ ) {x=x0;y+=size;}

if( _______ ) break;// 退出

LCD_ShowChar(x,y,*p,size,0);

x+=size/2;

}

}

程序(函数)实现的功能?

9.找出下列程序中错误,并改正。

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)

{

if(huart->Instance=USART1)

{

if((USART_RX_STA && 0x8000)==0)

{

if(USART_RX_STA&0x4000)

{ if(aRxBuffer[0]==0x0a)USART_RX_STA=0;

else USART_RX_STA =0x8000;

}

else

{

if(aRxBuffer[0]!=0x0d)USART_RX_STA|=0x4000; else

{

USART_RX_BUF[USART_RX_STA&0X3FFF]=aRxBuffer[0] ;

USART_RX_STA++;

if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;

}

}

}

}

}

10. 阅读下列程序,在空格填上正确注释。

u8 KEY_Scan(u8 mode)

{

if(key_up&&(KEY0==0||KEY1==0||KEY2==0||WK_UP==1))

{

delay_ms(10);

key_up=0;

// ________________

if(KEY0==0) return KEY0_PRES;

else if(KEY1= =0) return KEY1_PRES; else if(KEY2==0) return KEY2_PRES;

else if(WK_UP==1) return WKUP_PRES; }

else if(KEY0==1&&KEY1==1&&KEY2==1&&WK_UP==0)

key_up=1; // ________________________ return 0; // ____________________________

}

11. 阅读下列程序,完成程序填空,并说明程序功能。

void LED_Init(void)

static u8 key_up=1; // ________________

if(mode==1) key_up=1; // ________________

{

GPIO_InitTypeDef _____________ ;

__HAL_RCC_GPIOC_CLK_ENABLE();

GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1;

GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;

GPIO_Initure.Pull=GPIO_PULLUP;

GPIO_Initure.Speed=GPIO_SPEED_HIGH;

HAL_GPIO_Init( _____________ );

HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_SET);

//PB0 置1,默认初始化后灯灭

HAL_GPIO_WritePin( _____________________ );

//PB1 置1,默认初始化后灯灭

}

程序(函数)实现的功能?

12.找出下列程序中错误,并改正。

void IIC_Start(void)

{

SDA_OUT();

IIC_SDA(1);

IIC_SCL(0);

delay_us(4);

IIC_SDA(0);

delay_us(4);

IIC_SCL(1);

void IIC_Stop(void)

{

SDA_OUT();

IIC_SCL(0);

IIC_SDA(1);

delay_us(4);

IIC_SCL(1);

IIC_SDA(0);

delay_us(4);

}

// 产生ACK应答

void IIC_Ack(void)

{

IIC_SCL(0);

SDA_OUT();

IIC_SDA(1);

delay_us(2);

IIC_SCL(1);

delay_us(2);

IIC_SCL(0);

五、程序设计题。

1.使用DAC 的通道1,通过外部引脚PA4 输出模拟信号。要求写出完整的

2.设计程序,使用定时器在PA2 端口输出f=2HZ,q=2/3 的方波。

3.下列程序是DAC的初始化函数,请写出完整的MspInit 函数。

#include "dac.h"

DAC_HandleTypeDef DAC1_Handler; //DAC 句柄

// 初始化DAC

void DAC1_Init(void)

{

DAC_ChannelConfTypeDef DACCH1_Config;

DAC1_Handler.Instance=DAC;

HAL_DAC_Init(&DAC1_Handler); // MspInit() 函数。

初始化

DAC

DACCH1_Config.DAC_Trigger=DAC_TRIGGER_NONE; // 不使用触发功能

DACCH1_Config.DAC_OutputBuffer=DAC_OUTPUTBUFFER_DISABLE;

//DAC1 输出缓冲关闭

HAL_DAC_ConfigChannel(&DAC1_Handler,&DACCH1_Config,DAC_CHANNEL_1);

//DAC 通道 1 配置HAL_DAC_Start(&DAC1_Handler,DAC_CHANNEL_1); // 开启DAC通道 1

}

void HAL_DAC_MspInit(DAC_HandleTypeDef* hdac)

{

}

4.设计程序,使用定时器TIMER2的通道CHANNEL_3输出PWM,要求实现定时器的初始化、PWM输出控制函数及将主程序填写完整。

#include "sys.h"

#include "delay.h"

#include "usart.h"

#include "led.h"

#include "timer.h"

int main(void)

{

u8 dir=1;

u16 led0pwmval=0;

HAL_Init();

Stm32_Clock_Init(336,2,8,7);

delay_init(168);

uart_init(115200);

while(1)

{

}

}

5.编程驱动74HC595,在数码管上显示自己的学号。

6.设计程序,使用定时器TIMER2在PA3端口输出f=1HZ,q=3/5 的方波。

7. 下列程序是DAC的初始化函数,请写出完整的MspInit 函数。

void uart_init(u32 bound)

{

UART1_Handler.Instance=USART1;

UART1_Handler.Init.BaudRate=bound;

UART1_Handler.Init.WordLength=UART_WORDLENGTH_8B;

UART1_Handler.Init.StopBits=UART_STOPBITS_1;

UART1_Handler.Init.Parity=UART_PARITY_NONE;

UART1_Handler.Init.HwFlowCtl=UART_HWCONTROL_NONE;

UART1_Handler.Init.Mode=UART_MODE_TX_RX;

HAL_UART_Init(&UART1_Handler);

HAL_UART_Init();

HAL_UART_Receive_IT(&UART1_Handler, (u8 *)aRxBuffer, RXBUFFERSIZE);

}

void HAL_UART_MspInit(UART_HandleTypeDef *huart)

{

8.设计程序,使用定时器TIMER5的通道CHANNEL_实1 现输入捕获,要求实现定时器的初始化、输入捕获的中断函数和中断回调函数及将主程序填写完整。

#include "sys.h"

#include "delay.h"

#include "usart.h"

#include "led.h" #include "timer.h"

extern u8 TIM5CH1_CAPTURE_STA; extern u32 TIM5CH1_CAPTURE_VAL;

int main(void)

{

long long temp=0;

HAL_Init();

Stm32_Clock_Init(336,8,2,7); //

delay_init(168);

uart_init(115200);

while(1)

{// 输入捕获

状态

// 初始化HAL 库设置时钟,168Mhz

// 初始化延时函数

// 初始化USART

}

}

7.画图题。

1 请画出IIC 总线时序图,并简要说明。

2 请画出定时器输出PWM 波的原理示意图,并简要说明。

3、画出定时器输入捕获的原理示意图,并简要说明。

4、画出串传输数据帧格式,并简要说明?

5、画出系统时钟树示意图,说明系统时钟来源。

相关主题
相关文档
最新文档