嵌入式考试复习

选择题 20
填空题 30
判断 10
简答 10
程序分析 30

(更新中。。。)

时政热点

神舟十四号女航天员–刘洋,冬奥会;
2022年大事记

STM32基础知识

STC系列-8位-国产;
STM32系列-32位-意法半导体公司生产-进口;
与STC相比,多了DMA功能;

C 语言:高级语言、可读性强、可移植性强、结构性好、更易于维护,面向过程;

微控制器: 主要由运算器控制器存储器总线输入输出接口等组成;

最小系统:
电源电路、晶振电路、复位电路(RST,低电平复位)、下载电路;
时钟:
作用:降低功耗
APB1:36MHz
APB2:72MHz

DMA

(直接内存访问)

数据传输流程:CPU -> 寄存器 -> cache高速缓存器(提高内存的访问速度) -> 内存(存储器)-> 外设。(提高内存与外设间访问速度=>DMA)
(两个选择题,一个简答题,一个程序分析题)

IO口(外设)与内存的交互方式查询中断DMA

DMA代码

内存地址、外设地址、方向(SRC/DST)、增量模式、数据传输量、数据位宽(Byte八位,HalfWord十六位,Word32位)、发送模式;

DMA_InitStruct.DMA_PeripheralBaseAddr = ( uint32_t ) ( & ( USART2->DR ) ); //外设地址
DMA_InitStruct.DMA_MemoryBaseAddr = (u32)SendBuff; //存储器地址
DMA_InitStruct.DMA_DIR = DMA_DIR_PeripheralDST; //方向(DST目的/SRC源):外设为目的,即存储器到外设模式
DMA_InitStruct.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外设地址保持不变
DMA_InitStruct.DMA_MemoryInc = DMA_MemoryInc_Enable;//存储器地址递增
DMA_InitStruct.DMA_BufferSize = BufferSize;//数据传输量
DMA_InitStruct.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;//外设数据位宽:8位
DMA_InitStruct.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; //存储器数据位宽:8位
DMA_InitStruct.DMA_Mode = DMA_Mode_Normal;//普通模式(与循环模式对应)
DMA_InitStruct.DMA_Priority = DMA_Priority_Medium; //中等优先级
DMA_InitStruct.DMA_M2M = DMA_M2M_Disable;//关闭
DMA_Init(DMA1_Channel7, &DMA_InitStruct);
DMA_Cmd(DMA1_Channel7 , ENABLE);

中断

NVIC中断嵌套
高优先级可以打断低优先级;
同级不能互相打断;
简述中断响应流程:中断源发出中断请求,CPU暂停当前工作(中断响应)进行中断处理,完成中断后回到之前的工作(中断返回)。

ADC

模拟转数字;
四个步骤采样保持量化编码
采样频率:频率越大,精度越高
  f s ≥ 2 ⋅ f max ⁡   \ f_s\ge2\cdot f_{\max} \,  fs2fmax(采样频率大于信号最高频率两倍以上)
例:
  sin ⁡ ( 100 π t ) + sin ⁡ ( 500 π t )   \ \sin\left(100\pi t\right)+\sin\left(500\pi t\right) \,  sin(100πt)+sin(500πt)的采样频率,最少是500.
  sin ⁡ ( 2 ∗ r ∗ π t )   \ \sin\left(2*r*\pi t\right) \,  sin(2rπt)
三个指标转换速率分辨率(位数(12位)),量化误差
精度位数:x/pow(2,n) <= 1mv.

串口

(通用同步 / 异步串行接收 / 发送器)

全双工、单工、半双工
Rx(接收),Tx(发送);

void USART2_Init(unsigned long ulBaud)
{
    
    
  GPIO_InitTypeDef GPIO_InitStruct;
  USART_InitTypeDef USART_InitStruct;
  NVIC_InitTypeDef NVIC_InitStruct;
  // 允许GPIOA和USART2时钟
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);//USART2在APB1总线上
  // PA2-TX2复用推挽输出
  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2;
  GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStruct);
  // PA3-RX2浮空输入(复位状态,可以省略)
  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3;
  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, &GPIO_InitStruct); 
  // 初始化USART2(波特率ulBaud,默认8个数据位,1个停止位,无校验,允许Rx和Tx)
  USART_InitStruct.USART_BaudRate = ulBaud;//波特率
  USART_InitStruct.USART_WordLength = USART_WordLength_8b;//八位数据位
  USART_InitStruct.USART_StopBits = USART_StopBits_1;//一位停止位
  USART_InitStruct.USART_Parity = USART_Parity_No;//无校验位
  USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//允许Rx和Tx模式
  USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//没有硬件触发
  USART_Init(USART2, &USART_InitStruct);
  // 允许USART2
  USART_Cmd(USART2, ENABLE);//使能
  USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开中断
  // 配置USART2中断
  NVIC_InitStruct.NVIC_IRQChannel = USART2_IRQn;
  NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStruct);
}

定时器

功能:定时、计数、输出比较、输入捕获;
定时器计数:T(周期) = t(时钟源)*c(计数个数);

void TIM3_Init(void)
{
    
    
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	NVIC_InitTypeDef NVIC_InitStructure;

	/* Enable the TIM3 global Interrupt */
	NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

	NVIC_Init(&NVIC_InitStructure);
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);	
	/* Time base configuration */
	TIM_TimeBaseStructure.TIM_Period = 999;//周期				
	TIM_TimeBaseStructure.TIM_Prescaler = 71;//预分频数				
	TIM_TimeBaseStructure.TIM_ClockDivision = 0;//分频因子
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数

	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
	
	/* TIM IT enable */
	TIM_ITConfig(TIM3, TIM_IT_Update , ENABLE);

	/* TIM3 enable counter */
	TIM_Cmd(TIM3, ENABLE);
}

补考题

程序题:串口初始化;串口开启了什么中断?波特率及其单位(bps);

其他

电信号与非电信号的辨别

通过传感器将非电转换成电信号。

猜你喜欢

转载自blog.csdn.net/weixin_55374353/article/details/125161108