选择题 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} \, fs≥2⋅fmax(采样频率大于信号最高频率两倍以上)
例:
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(2∗r∗π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);
其他
电信号与非电信号的辨别
通过传感器将非电转换成电信号。