STM32必备知识点(面试和工作用的到)

文章目录

  • STM32必备知识点(面试和工作用的到)
  • 前言
  • 嵌入式C基础
    • 一、位操作
      • 1. 不改变其他位的值的状况下,对某几个位进行设值
      • 2.移位操作提高代码的可读性:将第 pinpos 位设置为 1
      • 3.~取反操作使用技巧
      • 4.举例:
    • 二、ifdef 条件编译
    • 三、extern 变量申明
  • 二、编译原理
    • 1、Gcc编译的C语言程序占用的内存分为哪几个部分?
  • 三、STM32资料
    • 1、常用小知识
    • 2、基础知识点
      • 1、什么是嵌入式系统?嵌入式系统一般由哪几部分构成?
      • 2、STM32共有那几种基本时钟信号?
      • 3、串口数据接收是怎么处理的?
      • 4、简述嵌套向量中断控制器(NVIC)的主要特性。
      • 5、DMA有什么用?
      • 6、如果单片机ADC输入口电压为1V,则采样得到的值是多少?
      • 7、相比于正常子函数,中断服务函数有什么特点和需要注意的地方?
    • 3、架构知识
      • 1. STM32 的总线架构图:
  • 四、操作系统
    • 1.简述一下什么是RTOS系统
    • 2.在任务中怎么进行数据传输?什么方式?
    • 3.阐述信号量的作用,信号量的类型
    • 4.FreeRTOS有多少个优先级?任务优先级和系统优先级是什么关系?
    • 5.如何处理优先级反转问题?

前言


嵌入式C基础

一、位操作

C 语言支持如下 6 种位操作

不改变其他位的值的状况下,对某几个位进行设值。
这个场景单片机开发中经常使用,方法就是

1. 不改变其他位的值的状况下,对某几个位进行设值

比如我要改变 GPIOA-> BSRRL 的状态,先对需要设置的位用 & 操作符进行清零操作,然后用 | 操作符设值。

GPIOA-> BSRRL &=0XFF0F; //将第 4-7 位清 0
GPIOA-> BSRRL |=0X0040;//设置相应位的值,不改变其他位的值

2.移位操作提高代码的可读性:将第 pinpos 位设置为 1

GPIOx->ODR = (((uint32_t)0x01) << pinpos);

3.~取反操作使用技巧

TIMx->SR = (uint16_t)~TIM_FLAG;
#define TIM_FLAG_Update ((uint16_t)0x0001)
#define TIM_FLAG_CC1 ((uint16_t)0x0002)

看这个应该很容易明白,可以直接从宏定义中看出 TIM_FLAG_Update 就是设置的第 0 位了, 可读性非常强。

4.举例:

1、给定一个整型变量a,设置a的bit 3,清除a 的bit 3

#define BIT3 (0x1<<3)
static int a;
void set_bit3(void)
{
a |= BIT3;
}
void clear_bit3(void)
{
a &= ~BIT3;
} 

2、已知有一个int型大小的内存及其地址,如何向该地址存入数据 :4个字节,32位 0x3a47ba14;

#include "stdio.h"
int main()
{int *p=(int *)0x3a47ba14;    // 地址*p=10printf("%d,0x%x",*p,p);// 输出地址的信息return 0;
}

二、ifdef 条件编译

常见格式:

#ifdef 标识符
程序段 1
#else
程序段 2
#endif

它的作用是:当标识符已经被定义过(一般是用#define 命令定义),则对程序段 1 进行编译, 否则编译程序段 2。

其中#else 部分也可以没有,即:

#if defined (STM32F40_41xxx)
STM32F40x 系列和 STM32F41x 系列芯片需要的一些变量定义
#end

三、extern 变量申明

extern 申明变量可以多次,但定义只有一次

二、编译原理

1、Gcc编译的C语言程序占用的内存分为哪几个部分?

栈区(stack) 存放函数的参数、局部变量
堆区(heap) 提供程序员动态申请的内存空间
全局(静态)区(static) 存放全局变量和静态变量,初始化不为0的全局变量和静态变量、const型常量在一块区域(.data段),未初始化的、初始化为0的全局变量和静态变量在相邻的另一块区域(.bss段)
程序代码区 存放函数体的二进制代码和字符串常量。

三、STM32资料

1、常用小知识

  1. Cortex-M处理器采用的架构是:v6
  2. NVIC可用来表示优先权等级的位数可配置为是:8
  3. Cortex-M系列正式发布的版本是:Cortex-M3
  4. 下面是Context-M3处理器代码执行方式的是:特权方式
  5. 下列是Cortex – M3处理器可以使用的堆栈的栈是:进程栈
  6. Cortex – M3的存储格式中专用外设总线区域可以使用:小端格式
  7. STM32嵌套向量中断控制器(NVIC)具有:16 个可编程的优先等级。
  8. STM32的外部中断/事件控制器(EXTI):支持19个中断/事件请求。
  9. STM32的所有端口都有 外部中断能力。当使用 外部中断线 时,相应的引脚必须配置成 输入模式
  10. STM32具有单独的位设置或位清除能力。这是通过 GPIOX_BSRRGPIOX_BRR 寄存器来实现的。
  11. 当STM32复位后, HSL振荡器 将被选为系统时钟。当时钟源被直接或通过PLL间接作为系统时钟时,它将不能被停止 。

只有当目标时钟源准备就绪了(经过启动稳定阶段的延迟或PLL稳定),才可以从一个时钟源切换到另一个时钟源。在被选择时钟源没有就绪时,系统时钟的切换不会发生。

每个I/O端口位可以自由的编程,尽管I/O端口寄存器必须以32位字的方式访问

1.关于中断嵌套说法正确的是( B )

(A)只要响应优先级不一样就有可能发生中断嵌套

(B)只要抢占式优先级不一样就有可能发生中断嵌套

(C)只有抢占式优先级和响应优先级都不一才有可能发生中断嵌套

(D)以上说法都不对

2.中断屏蔽器能屏蔽( B )

(A)所有中断和异常 (B)除了NMI外所有异常和中断

(C)除了NMI、异常所有其他中断 (D)部分中断

3.PWM是( A )

(A)脉冲宽度调制 (B)脉冲频率调制 (C)脉冲幅度调制 (D)脉冲位置调制

STM32 ADC是一个12位连续近似模拟到数字的转换器

4.ADC转换过程不含哪项( D )

(A)采样 (B)量化 (C)编码 (D)逆采样

5.ADC转换过程正确的是( A )

(A)采样—量化—编码(B)量化—采样—编码

(C)采样—编码—量化(D)编码—采样—量化

6.下列哪项不是ADC转换器的主要技术指标( B )

(A)分辨率 (B)频率 (C)转换速率 (D)量化误差

7.DMA控制器可编程的数据传输数目最大为( A )。

A.65536 B.65535

C.1024 D.4096

8.STM32中,1个DMA请求占用至少(B )个周期的CPU访问系统总线时间。

A.1 B.2

C.3 D.4

9.下面不属于STM32的bxCAN的主要工作模式为(C )。

A.初始化模式 B.正常模式

C.环回模式 D.睡眠模式

10.和PC系统机相比嵌入式系统不具备以下哪个特点( C )。

A、系统内核小 B、专用性强

C、可执行多任务 D、系统精简

11.嵌入式系统有硬件和软件部分构成,以下( C)不属于嵌入式系统软件。

A. 系统软件 B.驱动 C. FPGA编程软件 D.嵌入式中间件
61.ARM Cortex-M3不可以通过(D )唤醒CPU。

A.I/O端口 B.RTC闹钟

C.USB唤醒事件 D.PLL

12.DMA控制器可编程的数据传输数目最大为(A)。

A.65536 B.65535

C.1024 D.4096

13.每个DMA通道具有(A )个事件标志。

A.3 B.4

C.5 D.6

14.STM32中,1个DMA请求占用至少( B)个周期的CPU访问系统总线时间。

A.1 B.2

C.3 D.4

2、基础知识点

1、什么是嵌入式系统?嵌入式系统一般由哪几部分构成?

嵌入式系统(Embedded system),是一种“完全嵌入受控器件内部,为特定应用而设计的专用计算机系统”,
由硬件层、中间层、系统软件层和应用软件层组成。
硬件层中包含嵌入式微处理器、存储器(SDRAM、ROM、Flash等)、通用设备接口和I/O接口(A/D、D/A、I/O等)。在一片嵌入式处理器基础上添加电源电路、时钟电路和存储器电路,就构成了一个嵌入式核心控制模块。其中操作系统和应用程序都可以固化在ROM中。

硬件层与软件层之间为中间层,也称为硬件抽象层(Hardware Abstract Layer,HAL)或板级支持包(Board
Support
Package,BSP),它将系统上层软件与底层硬件分离开来,使系统的底层驱动程序与硬件无关,上层软件开发人员无需关心底层硬件的具体情况,根据BSP
层提供的接口即可进行开发。该层一般包含相关底层硬件的初始化、数据的输入/输出操作和硬件设备的配置功能。

BSP具有以下两个特点: 硬件相关性:因为 嵌入式实时系统的 硬件环境具有应用相关性,而作为上层软 件与硬件平台之间的接口,BSP需要为
操作系统提供操作和控制具体硬件的方法。 操作系统相关性:不同的操作系统具有各自的软件层次结构,因此,不同的操作系统具有特定的硬件接口形式。
BSP的另一个主要功能是硬件相关的设备驱动。硬件相关的设备驱动程序的初始化通常是一个从高到低的过程。尽管BSP中包含硬件相关的设备驱动程序,但是这些设备驱动程序通常不直接由BSP使用,而是在系统初始化过程中由BSP将他们与操作系统中通用的设备驱动程序关联起来,并在随后的应用中由通用的设备驱动程序调用,实现对硬件设备的操作。与硬件相关的驱动程序是BSP设计与开发中另一个非常关键的环节。

系统软件层由实时多任务操作系统(Real-time Operation System,RTOS)、文件系统、图形用户接口(Graphic User Interface,GUI)、网络系统及通用组件模块组成。RTOS是嵌入式应用软件的基础和开发平台。

2、STM32共有那几种基本时钟信号?

在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。
①、HSI是高速内部时钟,RC振荡器,频率为8MHz。
②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。
③、LSI是低速内部时钟,RC振荡器,频率为40kHz。
④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。
⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。

3、串口数据接收是怎么处理的?

串口数据处理有两种方式:

1.通过串口中断接收到数据后,将数据放置环形缓存或队列中,待数据处理函数进行处理时进行处理。(RTOS)

2.通过轮询,时间片方式调度串口寄存器判断是否有数据,有数据则放入缓存待处理。(裸机)

4、简述嵌套向量中断控制器(NVIC)的主要特性。

级别关系是: 抢占式优先级 > 响应优先级 > 中断表中的排位顺序。只有在上一级优先级相同时下一级优先级才会起作用。

5、DMA有什么用?

直接存储器存取用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU的干预,通过DMA数据可以快速地移动。这就节省了CPU的资源来做其他操作。

有多少个DMA资源?

   有两个DMA控制器,DMA1有7个通道,DMA2有5个通道。

数据从什么地方送到什么地方?

   外设到SRAM(I2C/UART等获取数据并送入SRAM);SRAM的两个区域之间;外设到外设(ADC读取数据后送到TIM1控制其产生不同的PWM占空比);SRAM到外设(SRAM中预先保存的数据送入DAC产生各种波形);

6、如果单片机ADC输入口电压为1V,则采样得到的值是多少?

已知单片机内置12位精度的ADC,单片机工作电压3.3V,ADC基准电压3V,请计算ADC采样的电压最小分辨率是多少?如果单片机ADC输入口电压为1V,则采样得到的值是多少?

7、相比于正常子函数,中断服务函数有什么特点和需要注意的地方?

3、架构知识

1. STM32 的总线架构图:

STM32F407 系统架构图:

主系统由 32 位多层 AHB 总线矩阵构成。总线矩阵用于主控总线之间的访问仲裁管理。仲裁采 取循环调度算法。总线矩阵可实现以下部分互联:

八条主控总线是:

  1. Cortex-M4 内核 I 总线, D 总线和 S 总线;
  2. DMA1 存储器总线, DMA2 存储器总线;
  3. DMA2 外设总线;
  4. 以太网 DMA 总线;
  5. USB OTG HS DMA 总线;

七条被控总线:

  1. 内部 FLASH ICode 总线;
  2. 内部 FLASH DCode 总线;
  3. 主要内部 SRAM1(112KB)
  4. 辅助内部 SRAM2(16KB);
  5. 辅助内部 SRAM3(64KB) (仅适用 STM32F42xx 和 STM32F43xx 系列器件);
  6. AHB1 外设 和 AHB2 外设;
  7. FSMC

下面我们具体讲解一下图中几个总线的知识

  1. I 总线(S0):此总线用于将 Cortex-M4 内核的指令总线连接到总线矩阵。内核通过此总
    线获取指令。此总线访问的对象是包括代码的存储器。

  2. D 总线(S1):此总线用于将 Cortex-M4 数据总线和 64KB CCM 数据 RAM 连接到总线矩
    阵。内核通过此总线进行立即数加载和调试访问。

  3. S 总线(S2):此总线用于将 Cortex-M4 内核的系统总线连接到总线矩阵。此总线用于访
    问位于外设或 SRAM 中的数据。

  4. DMA 存储器总线(S3,S4):此总线用于将 DMA 存储器总线主接口连接到总线矩阵。
    DMA 通过此总线来执行存储器数据的传入和传出。

  5. DMA 外设总线:此总线用于将 DMA 外设主总线接口连接到总线矩阵。DMA 通过此
    总线访问 AHB 外设或执行存储器之间的数据传输。

  6. 以太网 DMA 总线:此总线用于将以太网 DMA 主接口连接到总线矩阵。以太网 DMA
    通过此总线向存储器存取数据。

  7. USB OTG HS DMA 总线(S7):此总线用于将 USB OTG HS DMA 主接口连接到总线矩
    阵。USB OTG HS DMA 通过此总线向存储器加载/存储数据。

对于系统架构的知识,在刚开始学习 STM32 的时候只需要一个大概的了解,大致知道是个 什么情况即可。

四、操作系统

1.简述一下什么是RTOS系统

FreeRTOS为例,RTOS系统是以抢占优先级为主,时间片为辅实现任务调度的操作系统,主要核心上实现的是任务调度的功能,使任务具有实时性。

2.在任务中怎么进行数据传输?什么方式?

任务间数据传输一共有三种形式,用的最多的是消息队列,其次是全局变量和信号量。

1.消息队列发送数据的方式可以是发送数据本身和发送数据的地址指针。

2.全局变量使用供所有任务获取和处理,但全局变量占用内存较多,而且不好管理。

3.信号量一般作为标志位使用。

3.阐述信号量的作用,信号量的类型

信号量共有三种,二值信号量、计数信号量、互斥信号量,常用的是二值信号量和互斥信号量。

信号量本质上都是深度为1的消息队列。

二值信号量通常在中断中作为标志位使用,起到线程同步的作用。

互斥信号量作为互斥锁使用。防止不同线程访问同个内存。

4.FreeRTOS有多少个优先级?任务优先级和系统优先级是什么关系?

FreeRTOS一共有32个任务优先级,但实际使用的优先级个数通过系统设置使用。

系统优先级NVIC基于RAM架构,优先级最高,是一切中断的基石。任务优先级基于FreeRTOS,和系统优先级无关。

5.如何处理优先级反转问题?

  1. 优先级继承
  2. 优先级恢复

STM32必备知识点(面试和工作用的到)相关推荐

  1. java面试线程必备知识点,怼死面试官,从我做起

    转载自 java面试线程必备知识点,怼死面试官,从我做起 |--多线程一定好么? cpu密集不好 io密集好 |--如何减少上下文切换: 无锁并发(数据id根据Hash分段).CAS.最少线程 |-- ...

  2. 大专java方向校招面试找工作知识点技术栈以及实习感受分享-简历分享

    大专java方向校招面试找工作知识点技术栈以及实习感受分享 专科生的Java学习以及校招面试 先说一下我的编程历程 开始求职之路 第一次求职 网上海投 第二次面试 第三次面试 学校招聘会 第四次面试 ...

  3. 中级前端面试题必备知识点(2.5w+月薪)进阶

    中级前端面试题必备知识点(2.5w+月薪)进阶 前端已经不再是5年前刚开始火爆时候的那种html+css+js+jquery的趋势了,现在需要你完全了解前端开发的同时,还要具备将上线.持续化.闭环.自 ...

  4. ble开发 linux_嵌入式开发的必备知识点

    嵌入式开发的必备知识点 嵌入式操作系统简介 嵌入式系统无疑是当前最热门最有发展前途的IT应用领域之一.嵌入式系统用在一些特定专用设备上,通常这些设备的硬件资源(如处理器.存储器等)非常有限,并且对成本 ...

  5. 小学教师资格证计算机知识,小学老师教师资格证复习内容是什么 小学教师资格证考试笔试必备知识点...

    小学老师教师资格证复习内容是什么 教师资格证分为笔试和面试,小学和幼儿笔试难度比较容易,综合科目只考核<综合素质>,而小学还要考核<教育教学知识与能力>,幼儿考核<保教知 ...

  6. 视频教程-15年经验大厂HR亲授:程序员必备简历面试课-招聘/面试

    15年经验大厂HR亲授:程序员必备简历面试课 资深人力资源总监,从事IT职业教育培训15年,曾担任北大青鸟就业部经理.蓝科教育总经理及人才服务中心总监.先后辅导.推荐学生就业超过千人 王馨仪 ¥69. ...

  7. 计算机二级常备知识,计算机二级《MS Office高级应用》必备知识点

    计算机二级<MS Office高级应用>必备知识点 二级MS Office高级应用考试的内容分为两部分,二级公共基础和二级Office应用.以下是百分网小编搜索整理的关于计算机二级< ...

  8. 第02课:深度学习 Python 必备知识点

    无论是在机器学习还是深度学习中,Python 已经成为主导性的编程语言.而且,现在许多主流的深度学习框架,例如 PyTorch.TensorFlow 也都是基于 Python.这门课主要是围绕 &qu ...

  9. CSS基础必备知识点01

    CSS基础必备知识点 CSS(Cascading Style Sheme), 层叠样式表或级联样式表,简称样式表.它的作用是给HTML网页设置外观或者样式.其中外观或者样式指的是:HTML网页中的文字 ...

最新文章

  1. c改java_Android NDK开发:C修改Java的属性
  2. flac3d命令流实例大全_如何在Linux上使用xargs命令
  3. ES6——class
  4. Go 之父:聊聊我眼中的 Go 语言和环境
  5. 前端面试题集结号之CSS
  6. android root权限函数,android 4.4下app永久获取root权限的方法
  7. 张家辉申请“渣渣辉”商标,真的很有知识产权意识了
  8. Linux 正在吞噬 Windows 和 Chrome OS!
  9. 用nload查看LINUX的网络流量
  10. 22计算机408考研—数据结构—线性表、栈、队列、数组
  11. 一条命令把“有道词典”的生词本导入“墨墨背单词”
  12. keepalived配置虚拟IP
  13. apple configurator 2 获取appstore ipa包
  14. Clarke Wight saving algorithm求解tsp问题
  15. TANRIC:肿瘤相关lncRNA数据库
  16. Excel-查找和引用函数
  17. 去年净亏7.37亿美元,“自动驾驶第一股”的商业化之痛
  18. eclipse的中文版本安装方法
  19. 数字电路器件——门电路——与门电路、或门电路、非门电路及实例
  20. 用gcc编译.cpp文件可能出现undefined reference to `__gxx_personality_v0'问题的解决

热门文章

  1. 用VC6做QQ对对碰外挂程序
  2. 主板BIOS设置详解
  3. creo服务器缓存位置,creo2.0配置文件把trail的文件保存路径换到别的文件夹里
  4. 星空内网穿透保姆级教程
  5. 学以致用深入浅出数字信号处理 pdf_Robei |《数字集成电路设计》正式出版啦
  6. Android Studio 开发–微信APP门户界面设计(二)
  7. 随机数生成算法的C++实现
  8. 【密码学】RSA的大整数雏形
  9. 大数据分析完28个省会城市后,我们发现存在感最低的省会城市竟是......
  10. matlab 编程之代码规范