ARM 嵌入式系统复习笔记

ARM 嵌入式系统复习笔记

ARM Review

填空

嵌入式系统概念填空

  1. 嵌入式系统是以应用系统为中心,以计算机为基础软硬件可裁剪适应应用系统对功能、可靠性、成本、体积、功耗严格要求专用计算机系统。
  2. ARM处理器是ARM公司设计的基于RISC架构的32位高性能微处理器,一般采用哈佛总线结构,具有高速指令缓存和数据缓存,指令长度固定且多级流水线执行。

工作频率填空

  1. Cortex-M3内核CPU通过总线阵列和高性能总线(AHB)以及AHB-APB总线桥与两类APB总线相连接,即APB1总线和APB2总线,APB1总线的最高工作频率为36MHz。
  2. Cortex-M3内核CPU通过总线阵列和高性能总线(AHB)以及AHB-APB总线桥与两类APB总线相连接,即APB1总线和APB2总线,APB2总线的最高工作频率为72MHz。
  3. Cortex-M3内核的最高工作时钟频率为72MHz。

时钟填空

  1. 32F103的系统时钟SYSCLK可以来自**HSI(内部高速时钟)、HSE(外部高速时钟)和PLL(锁相环)**三个时钟源中的一个。
  2. 当STM32F103外接8MHz的晶体时,若使内核达到最高工作时钟频率,PLL的倍频系数应设置为9倍。
  3. STM32F103外接的32768Hz晶体主要用来为芯片内部的RTC部件提供时钟源。

PLL倍频系数的设置

计算步骤如下:
系统时钟SYSCLK = (输入时钟频率) × (PLL倍频系数)
72 MHz = 8 MHz × 9
因此,PLL的倍频系数应设置为9倍

存储器填空

  1. STM32F103芯片是32位的微控制器,可寻址存储空间的大小为4GB。
  2. STM32F103芯片可寻址存储空间的大小为 4GB,分为 8个512MB的存储块。
  3. 当BOOT0 = 0时,STM32F103上电后,用户程序将从Flash存储器启动。

GPIO填空

  1. STM32F103ZET6芯片包含7 个16位的通用目的输入/输出口(GPIO)。。
  2. STM32F103ZET6芯片共有112根GPIO引脚,可从其中任选16根作为外部中断输入口。

中断填空

  1. STM32F103微控制器具有10个异常和60个中断中断优先级为16 级
  2. STM32F103微控制器的EXTI模块有16个连接GPIO的外部中断线,对应16个外部中断向量
  3. STM32F103微控制器共有3个串口,其中USART1的工作时钟源来自于APB2总线
  4. STM32F103微控制器共有3个串口,其中USART2的工作时钟源来自于APB1总线

ADC填空

  1. STM32F103微控制器的ADC模块支持单次和连续转换模式
  2. STM32F103微控制器的ADC模块分辨率为12位最小转换时间为1.17微妙
  3. STM32F103的ADC1有16个外部模拟输入通道,分辨率为12 位。
  4. STM32F103的ADC的分辨率为12位最高转换速率是1MHz

操作系统填空

  1. 嵌入式操作系统根据各个任务的要求,进行内存管理、多任务管理、资源管理、任务调度、消息管理和异常处理等工作。
  2. uC/OS-II操作系统是一个源代码公开、可移植、可固化、可裁剪、可配置式的实时多任务操作系统,最多可支持255个任务
  3. 在uC/OS-II操作系统中,通过互斥信号量可实现对共享资源的抢占式访问

简答

嵌入式系统概念简答

从技术角度来说什么是嵌入式系统?8051单片机应用系统是否属于嵌入式系统?
  1. 嵌入式系统是以应用系统为中心以计算机为基础软硬件可裁剪适应应用系统对功能、可靠性、成本、体积、功耗严格要求专用计算机系统
  2. 8051单片机应用系统可以被归类为嵌入式系统。
嵌入式实时操作系统中的“实时性”指的是什么?
  1. 实时性是系统对外部事件的及时响应和任务的及时完成能力。 实时性可以分为硬实时和软实时两种类型。
  2. 硬实时要求系统在严格的时间约束下,对外部事件作出及时的响应。任务的截止时间是固定的,任何超出时间限制的情况都可能导致系统功能失效或系统崩溃。
  3. 软实时要求系统尽可能在特定的时间约束下,对外部事件作出及时的响应,但允许偶尔的违反时间限制。任务的截止时间相对宽松,系统可以容忍一定程度的任务响应时间超出。

时钟简答

STM32F103微控制器的工作时钟源有哪几种?各时钟源的频率范围分别是多少?
  1. HSI(High-Speed Internal)高速内部时钟:频率为8MHz。
  2. HSE(High-Speed External)高速外部时钟:频率范围通常为4MHz至16MHz。
  3. PLL(Phase-Locked Loop)锁相环时钟:可以使用HSI或HSE作为输入时钟源,并通过倍频系数进行倍频。具体的频率范围取决于倍频系数的设置。
在STM32F103内部的时钟树中,锁相环PLL有什么用途?
  1. 时钟倍频:PLL可以将输入时钟频率倍增,提供更高的系统时钟频率。
  2. 稳定时钟源:PLL可以提供更稳定的时钟源,减小时钟的抖动和波动。
  3. 系统时钟源:在STM32F103中,PLL经常被配置为系统时钟源(SYSCLK),即整个微控制器系统的主要时钟源。
嵌入式系统中的启动代码(startup_stm32f10x_hd.s)程序的功能是什么?
  1. 初始化向量表:启动代码会定义和初始化微控制器的向量表,其中包含了中断处理函数的入口地址。向量表的初始化是确保中断处理能够正确触发和执行的重要步骤。
  2. 初始化堆栈和堆栈指针:启动代码会设置初始堆栈指针,指向程序的堆栈空间。这是确保函数调用和中断处理正常工作的必要步骤。
  3. 初始化系统时钟:启动代码会进行系统时钟的初始化,包括配置时钟源、设置时钟分频器等操作,以确保系统在正确的时钟频率下运行。
  4. 初始化存储器和外设:启动代码可能包括对存储器和外设的初始化操作,例如设置存储器映射、配置外设寄存器等。
  5. 调用主函数:启动代码最终会调用应用程序的主函数(如main函数),使应用程序正式开始执行。
STM32F103微控制器的最小系统由哪几部分构成?
  1. STM32F103微控制器芯片:这是系统的核心部分,包含了CPU、存储器、外设等功能模块。
  2. 时钟源:最小系统需要提供适当的时钟源,以驱动微控制器的各个部分。常见的时钟源包括晶体振荡器、外部时钟源或者内部时钟源。
  3. 复位电路:复位电路用于在系统上电或者复位时将微控制器置于初始状态。它通常由复位按钮、电容和电阻等组成。
  4. 电源管理电路:为STM32F103微控制器提供稳定的电源供应,并对电源进行滤波和保护。这包括电源连接器、电源滤波电容、稳压器等。
  5. 外部连接器:用于与外部设备或外部电路进行连接,包括通信接口(如UART、SPI、I2C)、GPIO引脚、ADC输入等。
STM32F103微控制器有哪几种启动模式?如何来配置系统启动模式?
  1. 主启动模式(Main Boot Mode):在主启动模式下,微控制器从FLASH存储器的起始地址处开始执行代码。
  2. 系统存储器模式(System Memory Boot Mode):在系统存储器模式下,微控制器从内部的系统存储器(一般为ROM或者Flash)的起始地址处开始执行代码。
  3. 内存模式(RAM Boot Mode):在内存模式下,微控制器从系统RAM中的特定地址处开始执行代码。

系统启动模式的配置是通过BOOT pins(BOOT0和BOOT1)的状态来实现的。这些引脚通常通过跳线帽或者外部电平转换器与微控制器连接。

具体的配置方式如下:

  • 如果BOOT0引脚为高电平,那么微控制器将进入内存模式。
  • 如果BOOT0引脚为低电平(接地),那么微控制器将根据BOOT1引脚的状态来选择启动模式。
    • 如果BOOT1引脚也为低电平,那么微控制器将进入主启动模式。
    • 如果BOOT1引脚为高电平,那么微控制器将进入系统存储器模式。

存储器简答

什么是存储器重映射?STM32F103微控制器的哪些存储区域需要进行存储器重映射?

存储器重映射是指将某些存储器区域的物理地址重新映射到不同的逻辑地址的过程。

在STM32F103微控制器中,存储器重映射主要涉及以下两个存储区域:

  1. 系统存储器(System Memory):系统存储器包含了微控制器的启动代码和ROM固件库。在存储器重映射时,系统存储器的物理地址将被映射到内部的ROM或者Flash存储器的起始地址,使得系统可以从内部存储器中执行代码。

  2. 外部SRAM(External SRAM):STM32F103微控制器具有一些器件型号支持外部SRAM的扩展。在存储器重映射时,外部SRAM的物理地址可以被映射到微控制器的内部存储器的地址空间中,使得外部SRAM可以像内部存储器一样被访问和使用。

中断简答

STM32F103微控制器的异常和中断有什么区别?优先级最高的是哪个异常/中断?

在STM32F103微控制器中,异常和中断是两种不同的事件处理机制,它们有以下区别:

  1. 异常(Exception):异常是指由于指令执行或系统事件引起的处理器中断。它们通常表示了一些严重的错误或特殊情况,需要立即处理。异常包括复位、非屏蔽中断(如硬件故障)、系统调试异常等。异常的处理优先级高于中断。

  2. 中断(Interrupt):中断是指外部设备或特定事件触发的处理器中断。它们通常表示了一些需要优先处理的异步事件,如外部输入信号、定时器溢出等。中断可以根据优先级配置,并可被屏蔽或使能。

在STM32F103微控制器中,优先级最高的异常是**复位(Reset)**异常。复位异常在系统上电或者复位时触发,用于将系统重置到初始状态。它的优先级最高,无法被屏蔽。

GPIO简答

STM32F103微控制器的GPIO有哪几种工作模式?GPIO作按键输入时应选择哪种工作模式?
  1. 输入模式(Input Mode):将GPIO配置为输入模式,用于读取外部信号或按键的状态。可以选择不同的输入模式,如浮空输入、上拉输入和下拉输入,以适应不同的电路连接方式。
  2. 输出模式(Output Mode):将GPIO配置为输出模式,用于控制外部设备或驱动器。输出模式可以选择推挽输出、开漏输出、推挽输出带上拉或下拉等
  3. 复用功能模式(Alternate Function Mode):将GPIO配置为复用功能模式,可以使用GPIO引脚来实现其他外设功能,如串口、定时器、SPI等。
  4. 模拟模式(Analog Mode):将GPIO配置为模拟模式,用于连接模拟信号输入或输出。

当GPIO用作按键输入时,应选择输入模式。可以根据实际情况选择浮空输入、上拉输入或下拉输入,以确保按键的状态能够正确读取。*浮空输入适用于按键有外部上拉或下拉电阻的情况,上拉输入适用于按键接地时为低电平,下拉输入适用于按键接VCC时为高电平的情况。*具体的选择取决于按键连接电路的设计和要求。

请用端口输出数据寄存器(ODR ),编写控制GPIOC口的PC3-PC5引脚输出高电平,其它引脚输出低电平的语句

要使用端口输出数据寄存器(ODR)控制GPIOC口的PC3-PC5引脚输出高电平,其它引脚输出低电平,可以使用以下语句:

GPIOC->ODR |= GPIO_ODR_ODR3 | GPIO_ODR_ODR4 | GPIO_ODR_ODR5; // 设置PC3、PC4、PC5引脚为高电平
GPIOC->ODR &= ~(GPIO_ODR_ODR0 | GPIO_ODR_ODR1 | GPIO_ODR_ODR2); // 设置PC0、PC1、PC2引脚为低电平
请用端口置位/清零寄存器(BSRR ),编写控制GPIOB口的PB0-PB5引脚输出高电平,其它引脚保持不变的语句

要使用端口置位/清零寄存器(BSRR)控制GPIOB口的PB0-PB5引脚输出高电平,同时保持其他引脚状态不变,可以使用以下语句:

GPIOB->BSRR = GPIO_BSRR_BS0 | GPIO_BSRR_BS1 | GPIO_BSRR_BS2 | GPIO_BSRR_BS3 | GPIO_BSRR_BS4 | GPIO_BSRR_BS5; // 设置PB0-PB5引脚为高电平
请用端口清零寄存器(BRR ),编写控制GPIOD口的PD0-PD3引脚输出低电平,其它引脚保持不变的语句

要使用端口清零寄存器(BRR)控制GPIOD口的PD0-PD3引脚输出低电平,同时保持其他引脚状态不变,可以使用以下语句:

GPIOD->BRR = GPIO_BRR_BR0 | GPIO_BRR_BR1 | GPIO_BRR_BR2 | GPIO_BRR_BR3; // 设置PD0-PD3引脚为低电平
简述STM32F103微控制器的GPIO相关各个寄存器的含义和作用
  1. GPIO配置寄存器(GPIOx_CRL和GPIOx_CRH):用于配置GPIO引脚的工作模式、输入/输出类型、输出速度和上下拉等特性。
  2. 端口输入数据寄存器(GPIOx_IDR):用于读取GPIO引脚的输入状态,包括输入高低电平。
  3. 端口输出数据寄存器(GPIOx_ODR):用于设置或读取GPIO引脚的输出状态,可以控制引脚的高低电平。
  4. 端口状态寄存器(GPIOx_SR):用于读取GPIO引脚的状态标志位,包括引脚的输入状态、输出状态和事件状态等。
  5. 端口配置锁定寄存器(GPIOx_LCKR):用于锁定GPIO引脚的配置,防止误操作修改引脚的配置设置。
  6. 端口复位寄存器(GPIOx_BRR):用于通过写入引脚位控制寄存器(BRR)的对应位,将GPIO引脚置为低电平,实现引脚的复位操作。
对比分析STM32寄存器编程和库函数编程两种编程方式的特点
  1. 寄存器编程方式:
    • 直接操作硬件寄存器:寄存器编程方式直接操作硬件寄存器,能够直接控制硬件的各个功能和特性。
    • 精确控制:通过寄存器编程可以对硬件进行细粒度的控制,可以灵活地配置和调整各种参数,满足特定的需求。
    • 低层访问:寄存器编程是对硬件的直接访问,属于底层编程方式,对硬件细节要求较高,需要更多的了解和掌握。
    • 更高的性能:由于直接操作寄存器,避免了函数调用和库函数的开销,寄存器编程方式可以获得更高的性能和响应速度。
  2. 库函数编程方式:
    • 抽象封装:库函数编程方式通过提供封装好的函数接口,屏蔽了底层的寄存器操作细节,提供了更高层次的抽象。
    • 简化开发:库函数提供了丰富的功能库,包括GPIO、定时器、串口等模块,简化了开发者的工作,减少了代码量。
    • 更高的可移植性:库函数编程方式抽象了底层硬件细节,使得代码更具可移植性,可以在不同的芯片和平台上进行移植和复用。
    • 需要更多的资源:库函数需要占用一定的存储空间,同时运行时需要更多的内存资源,因此对于资源有限的嵌入式系统可能需要权衡。

综上所述,寄存器编程方式适用于对硬件控制要求高、对性能要求高的场景,需要更底层的控制和精确配置;而库函数编程方式则适用于快速开发、提高可移植性和简化开发流程的场景。选择哪种编程方式取决于具体的需求和开发环境。

中断

简述STM32F103嵌套向量中断控制器(NVIC)的作用和特点

STM32F103嵌套向量中断控制器(Nested Vectored Interrupt Controller,NVIC)是STM32F103微控制器中负责管理和控制中断的重要模块。它的作用是协调和处理各种中断请求,并根据中断的优先级和状态进行中断服务程序的调度。

以下是STM32F103 NVIC的主要特点和作用:

  1. 中断优先级管理:NVIC支持对各个中断通道的优先级进行配置和管理。中断通道的优先级可以根据应用需求进行设置,以确保关键的中断能够得到及时响应。
  2. 嵌套中断支持:NVIC支持嵌套中断的处理。当一个中断正在处理时,如果有更高优先级的中断请求到达,NVIC会暂时中断当前中断的处理,优先处理更高优先级的中断请求。这种机制确保了关键中断的实时性和优先级的保障。
  3. 中断向量表:NVIC维护着中断向量表,用于存储中断服务程序的入口地址。每个中断通道都对应着中断向量表中的一个位置,当中断请求到达时,NVIC会根据中断通道找到对应的中断服务程序并执行。
  4. 中断使能和屏蔽:NVIC提供了使能和屏蔽中断的功能。通过设置相应的控制寄存器,可以启用或禁用特定的中断通道,以满足应用的需求。
  5. 中断状态管理:NVIC能够管理中断的状态,包括中断挂起、中断激活和中断标志等。这些状态信息可以帮助开发者更好地管理和调试中断程序。
简述STM32F103的NVIC中断优先级分组方法和优先级划分

STM32F103的NVIC中断优先级分组方法和优先级划分主要通过两个寄存器来配置:NVIC_IPR(Interrupt Priority Register)和NVIC_ISER(Interrupt Set Enable Register)。

  1. 中断优先级分组方法:
    • STM32F103支持4种中断优先级分组方式,即分为Group 0、Group 1、Group 2和Group 3。不同的分组方式决定了优先级位数的分配。
    • 通过SCB_AIRCR(Application Interrupt and Reset Control Register)寄存器的位[10:8]来配置中断优先级分组方法。
  2. 优先级划分:
    • 在STM32F103中,中断的优先级范围是从0(最高优先级)到15(最低优先级)。数字越小,优先级越高。
    • 根据选择的中断优先级分组方式,优先级位数的分配有所不同。以下是各个分组方式下的优先级划分情况:
      • Group 0:全局抢占式优先级分组,优先级分配为4位。
      • Group 1:1位抢占式优先级和3位子优先级,优先级分配为3位抢占优先级和1位子优先级。
      • Group 2:2位抢占式优先级和2位子优先级,优先级分配为2位抢占优先级和2位子优先级。
      • Group 3:3位抢占式优先级和1位子优先级,优先级分配为1位抢占优先级和3位子优先级。

通过配置NVIC_IPR寄存器,可以为每个中断通道分配相应的抢占式优先级和子优先级。优先级越高的中断在发生时将优先得到处理,而优先级相同的中断将按照先到先服务(FIFO)的顺序进行处理。

需要注意的是,在STM32F103中,具有相同优先级的中断中,越靠近中断向量表的位置的中断具有更高的优先级。因此,在进行中断优先级划分时,需要根据中断的重要性和实时性要求进行合理的分配。

简述STM32F103的NVIC中断优先级分组中抢占优先级和响应优先级的区别
  1. 抢占优先级(Preemption Priority):

    • 抢占优先级指的是中断发生时,当前正在执行的中断能否被其他中断打断。具有较高抢占优先级的中断可以打断正在执行的低优先级中断,优先获得处理器的控制权。
    • 抢占优先级的数值越小,表示优先级越高,能够打断的中断范围越广。
  2. 响应优先级(Subpriority):

    • 响应优先级指的是在同一抢占优先级下,多个中断同时请求服务时的优先级排序。具有较高响应优先级的中断将首先得到处理器的服务。
    • 响应优先级的数值越小,表示优先级越高。
假定设置中断优先级组为2,然后设置:中断3( RTC 中断)的抢占优先级为2,响应优先级为1;中断6(外部中断0)的抢占优先级为3,响应优先级为0;中断7(外部中断1)的抢占优先级为2,响应优先级为0。写出这3个中断的优先级顺序。

根据您提供的中断优先级设置,结合中断优先级分组为2,可以确定以下中断的优先级顺序:

  1. 中断3(RTC中断)的优先级:抢占优先级 2,响应优先级 1。
  2. 中断6(外部中断0)的优先级:抢占优先级 3,响应优先级 0。
  3. 中断7(外部中断1)的优先级:抢占优先级 2,响应优先级 0。

根据中断优先级的设置规则:

  • 具有较高的抢占优先级的中断可以打断正在执行的低优先级中断。
  • 在相同抢占优先级下,具有较高的响应优先级的中断将首先得到处理器的服务。

根据上述设置,优先级顺序为:

  1. 中断6(外部中断0):抢占优先级 3,响应优先级 0。
  2. 中断7(外部中断1):抢占优先级 2,响应优先级 0。
  3. 中断3(RTC中断):抢占优先级 2,响应优先级 1。

因此,中断6(外部中断0)具有最高优先级,中断3(RTC中断)具有次高优先级,中断7(外部中断1)具有最低优先级。

定时器/计数器简答

STM32F103微控制器的常规定时器分为哪3种?
  1. TIM1(定时器1):这是一个高级定时器,具有较复杂的功能和多路输出通道,可用于实现高级的定时和PWM控制。
  2. TIM2(定时器2):这是一个通用定时器,具有基本的定时功能,可用于一般的定时和计数应用。
  3. TIM3(定时器3):这是一个通用定时器,与TIM2类似,也具有基本的定时和计数功能,可广泛应用于定时和计数需求。
STM32F103微控制器的高级定时器和通用定时器的功能主要有什么区别?

高级定时器(如TIM1):

  1. 多路输出通道:高级定时器通常具有多个输出通道,可以用于实现更复杂的PWM控制和输出信号。
  2. 高级控制功能:高级定时器提供更多的高级控制功能,如编码器模式、输入捕获、输出比较、PWM生成等,能够满足更复杂的定时和控制需求。
  3. 高精度定时:高级定时器通常具有更高的计数精度和更大的计数范围,可以实现更精确的定时操作。

通用定时器(如TIM2、TIM3等):

  1. 基本定时功能:通用定时器提供基本的定时和计数功能,能够满足常见的定时需求。
  2. 灵活性和易用性:通用定时器的配置和使用相对简单,适用于一般的定时和计数应用。
  3. 低功耗模式:通用定时器通常支持低功耗模式,可以在需要时降低功耗,延长电池寿命。

总体而言,高级定时器具有更多的高级功能和扩展性,适用于复杂的定时和控制需求,而通用定时器则更适用于常见的定时和计数应用,并具有简单易用和低功耗的特点。选择合适的定时器取决于具体的应用需求和功能要求。

STM32F103定时器的计数器模式有哪3种?
  1. 向上计数模式(Up Counter Mode):定时器从0开始计数,逐渐增加,直到计数值达到设定的上限值(比如自动重载值),然后重新从0开始计数。在该模式下,定时器的输出信号可以用于生成定时中断或驱动其他外设。
  2. 向下计数模式(Down Counter Mode):定时器从设定的上限值(比如自动重载值)开始计数,逐渐减小,直到计数值为0。在该模式下,定时器的输出信号可以用于生成定时中断或驱动其他外设。
  3. 中央对齐模式(Center-aligned Mode):定时器在向上计数和向下计数之间来回切换,计数器值会在自动重载值的一半处反向。这种模式下的计数器可以产生对称的波形,对于一些特定的应用场景如PWM输出很有用。

ADC简答

简述STM32F103的ADC规则通道组和注入通道组之间的关系

**规则通道组是用于常规的模数转换,它可以配置多个通道进行连续的模数转换。**规则通道组的转换顺序可以根据需要进行设置,可以按照顺序依次转换多个通道的模拟输入信号。

注入通道组则是用于特定的应用场景,如精确的采样或触发转换。注入通道组可以单独配置一个或多个通道进行模数转换,并且可以使用特定的触发源来触发转换。

规则通道组和注入通道组之间是相互独立的,它们有各自独立的转换序列和设置。在配置时,可以选择使用规则通道组、注入通道组或两者同时使用,以满足不同的应用需求。

总结而言,规则通道组和注入通道组是用于不同的模数转换应用场景的两种通道组,可以根据具体需求配置和使用。

串口简答

简述如何判断STM32F103的串口是否完成数据发送和接收
  1. 发送完成标志位(TXE):通过读取串口状态寄存器(SR)中的TXE标志位来判断是否完成数据发送。当TXE标志位为1时,表示发送缓冲器为空,可以继续发送数据;当TXE标志位为0时,表示发送缓冲器正在发送数据,还未完成发送。
  2. 数据接收完成标志位(RXNE):通过读取串口状态寄存器(SR)中的RXNE标志位来判断是否完成数据接收。当RXNE标志位为1时,表示接收缓冲器中已有接收到的数据,可以读取;当RXNE标志位为0时,表示接收缓冲器为空,还未有新的数据接收。

可以使用相关的寄存器和标志位来进行判断,具体操作如下:

  1. 判断发送完成:通过检查USART_SR寄存器中的TXE标志位,当TXE为1时,表示发送完成。
  2. 判断数据接收完成:通过检查USART_SR寄存器中的RXNE标志位,当RXNE为1时,表示数据接收完成。
串行通信分为异步通信和同步通信,简述异步通信和同步通信的区别

异步通信和同步通信是两种不同的串行通信方式,它们的区别在于数据传输的时钟信号的处理方式和数据帧的组织方式。

异步通信:

  • 异步通信使用两个信号线,分别是数据线(TXD和RXD)和单个的时钟信号线(通常为波特率时钟)。
  • 数据的传输是基于起始位、数据位、奇偶校验位和停止位构成的数据帧进行的。每个数据帧之间没有固定的时间间隔。
  • 发送端和接收端的时钟频率可以略有差异,因此需要在接收端通过起始位的边沿检测来同步数据。
  • 异步通信适用于短距离和低速率的通信,例如串口通信。

同步通信:

  • 同步通信使用单独的时钟信号线来同步数据的传输,也称为时钟同步通信。
  • 数据的传输是基于固定的时钟信号来同步发送和接收的。数据被切分成多个连续的数据帧,每个数据帧的长度和时钟信号的周期相对应。
  • 发送端和接收端的时钟频率必须保持一致,以确保数据的正确接收。
  • 同步通信适用于高速率和长距离的通信,例如以太网通信和SPI通信。

总结:
异步通信和同步通信的主要区别在于时钟信号的处理方式和数据帧的组织方式。
异步通信使用单个时钟信号和数据帧的起始位、数据位、奇偶校验位和停止位进行数据传输,而同步通信则使用单独的时钟信号来同步数据的传输,数据被切分成连续的数据帧并通过固定的时钟信号周期来同步发送和接收。

操作系统简答

uC/OS-II操作系统中,信号量和互斥信号量在功能上的主要区别是什么?
  1. 信号量(Semaphore):
    • 信号量是一种用于控制对资源的访问的机制,可以用来表示可用资源的数量。
    • 信号量可以实现资源的共享和同步,允许多个任务对同一资源进行访问。
    • 信号量有两种类型:二进制信号量和计数信号量。
    • 二进制信号量的值只能为0或1,用于实现互斥访问,即只允许一个任务访问资源。
    • 计数信号量的值可以是任意非负整数,用于表示可用资源的数量。
    • 任务可以通过等待信号量来获取资源如果资源不可用,则任务会被阻塞,直到资源可用为止。
  2. 互斥信号量(Mutex):
    • 互斥信号量是一种特殊的信号量,用于实现互斥访问共享资源。
    • 互斥信号量可以保证同一时间只有一个任务可以访问共享资源,避免了多个任务同时访问导致的数据竞争和冲突。
    • 互斥信号量在任务访问共享资源之前需要进行获取(P操作),在任务使用完资源后需要进行释放(V操作)。
    • 如果互斥信号量已经被一个任务获取,其他任务尝试获取该互斥信号量时会被阻塞,直到互斥信号量被释放。

总结:

信号量用于控制对资源的访问,可以实现资源的共享和同步;

而互斥信号量是一种特殊的信号量,用于实现互斥访问共享资源,确保同一时间只有一个任务可以访问共享资源。

互斥信号量是信号量的一种特殊形式,用于解决共享资源的互斥访问问题。

uC/OS-II操作系统中,信号量和消息邮箱在功能上的主要区别是什么?
  1. 信号量(Semaphore):
    • 信号量用于控制对资源的访问和同步任务的执行顺序。
    • 信号量可以表示可用资源的数量,任务可以通过等待信号量来获取资源,如果资源不可用,则任务会被阻塞,直到资源可用为止。
    • 信号量的值可以是任意非负整数,可以用来表示资源的数量或者某种条件的满足情况。
    • 信号量可以用于实现资源的共享和同步,多个任务可以同时等待和释放同一个信号量。
  2. 消息邮箱(Message Mailbox):
    • 消息邮箱用于在任务之间传递消息和数据。
    • 消息邮箱可以存储一个或多个消息,每个消息可以是一个固定长度的数据结构。
    • 任务可以通过发送消息到邮箱来向其他任务传递数据,也可以通过接收消息来获取其他任务发送的数据。
    • 消息邮箱具有缓冲区的功能,当邮箱已满时,发送任务会被阻塞,直到有空间可用;当邮箱为空时,接收任务会被阻塞,直到有消息可接收。

总结:

信号量用于控制资源的访问和同步任务的执行顺序,多个任务可以同时等待和释放同一个信号量;而消息邮箱用于在任务之间传递消息和数据,具有缓冲区的功能,可以存储多个消息。信号量更适用于控制资源的共享和同步,而消息邮箱更适用于任务间的数据传递和通信。

uC/OS-II操作系统中,消息邮箱和消息队列在功能上的主要区别是什么?
  1. 消息邮箱(Message Mailbox):
    • 消息邮箱用于在任务之间传递消息和数据。
    • 消息邮箱可以存储一个或多个消息,每个消息可以是一个固定长度的数据结构。
    • 发送任务通过发送消息到邮箱来向其他任务传递数据,接收任务通过接收消息来获取其他任务发送的数据。
    • 消息邮箱具有缓冲区的功能,当邮箱已满时,发送任务会被阻塞,直到有空间可用;当邮箱为空时,接收任务会被阻塞,直到有消息可接收。
  2. 消息队列(Message Queue):
    • 消息队列用于在任务之间传递消息和数据。
    • 消息队列可以存储一个或多个消息,每个消息可以是一个可变长度的数据结构。
    • 发送任务通过发送消息到队列来向其他任务传递数据,接收任务通过接收消息来获取其他任务发送的数据。
    • 消息队列具有先进先出(FIFO)的特性,保证消息按照发送的顺序进行接收。

总结:

消息邮箱和消息队列都用于任务间的消息传递和数据通信,但它们在消息存储方式和特性上有所不同。消息邮箱适用于固定长度的消息存储和同步发送和接收任务的操作,而消息队列适用于可变长度的消息存储和按照发送顺序进行接收的操作。

程序设计

GPIO程序设计

采用库函数编写通用GPIO控制程序,实现PB5控制LED灯周期闪烁,闪烁周期约为1s,采用软件延时方法。程序应包括GPIO初始化函数和主函数main()代码

以下是使用库函数编写通用GPIO控制程序,实现PB5控制LED灯周期闪烁的示例代码:

#include "stm32f10x.h"  // 包含STM32F103系列的头文件

// GPIO初始化函数
void GPIO_Init(void)
{
   
    GPIO_InitTypeDef GPIO_InitStructure;

    // 使能GPIOB的时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

    // 配置PB5引脚为推挽输出
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
}

// 这部分考试时候可不写
// 延时函数,使用软件延时
void Delay(uint32_t nCount)
{
   
    for (volatile uint32_t i = 0; i < nCount; i++)
    {
   
        for (volatile uint32_t j = 0; j < 1000; j++)
        {
   
            // 空操作,用于延时
        }
    }
}

int main(void)
{
   
    // 初始化GPIO
    GPIO_Init();

    while (1)
    {
   
        // 控制LED灯亮
        GPIO_SetBits(GPIOB, GPIO_Pin_5);

        // 延时约1s
        Delay(1000);

        // 控制LED灯灭
        GPIO_ResetBits(GPIOB, GPIO_Pin_5);

        // 延时约1s
        Delay(1000);
    }
}

上述代码中,首先在GPIO_Init()函数中初始化了GPIOB的PB5引脚为推挽输出模式。然后,在main()函数中,通过循环控制LED灯周期性地闪烁。通过调用GPIO_SetBits()GPIO_ResetBits()函数来控制PB5引脚的电平,实现LED灯的亮和灭。通过调用Delay()函数进行软件延时,延时约1秒的时间。循环执行这个过程,就可以实现LED灯的周期性闪烁。

采用库函数编写通用GPIO控制程序,实现PB5和PE5控制的2个LED灯交替闪烁,闪烁周期约为1s。程序应包括GPIO初始化函数和主函数main()代码

以下是使用库函数编写通用GPIO控制程序,实现PB5和PE5控制的两个LED灯交替闪烁的示例代码:

#include "stm32f10x.h"  // 包含STM32F103系列的头文件

// GPIO初始化函数
void GPIO_Init(void)
{
   
    GPIO_InitTypeDef GPIO_InitStructure;

    // 使能GPIOB和GPIOE的时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOE, ENABLE);

    // 配置PB5引脚为推挽输出
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    // 配置PE5引脚为推挽输出
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
    GPIO_Init(GPIOE, &GPIO_InitStructure);
}

// 考试时可不写
// 延时函数,使用软件延时
void Delay(uint32_t nCount)
{
   
    for (volatile uint32_t i = 0; i < nCount; i++)
    {
   
        for (volatile uint32_t j = 0; j < 1000; j++)
        {
   
            // 空操作,用于延时
        
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值