360建站的应用场景,做网站宣传费用记什么科目,网站解析 cname,吉安网站制作公司STM32面试相关问题#xff1a;
STM32的内核型号#xff0c;主频#xff0c;传感器和单片机总线类型#xff0c;IIC,SPI,RS485UART数据帧项目中一些参数的设置
STM32 系统移植 ARM编译 常用的驱动编写方式
自己写过哪些方面驱动
其实如果问32的问题#xff0c…STM32面试相关问题
STM32的内核型号主频传感器和单片机总线类型IIC,SPI,RS485UART数据帧项目中一些参数的设置
STM32 系统移植 ARM编译 常用的驱动编写方式
自己写过哪些方面驱动
其实如果问32的问题他一般试看项目提问的
1.串口
2.总线
3.中断
4.项目流程
5.保证你项目中提到的都要会
嵌入式面试知识点总结 -- STM32相关
一、MCU对比
问题
问题一STM32F1和F4的区别
解答
参看STM32开发 – STM32初识内核不同F1是Cortex-M3内核F4是Cortex-M4内核 主频不同F1主频72MHzF4主频168MHz 浮点运算F1无浮点运算单位F4有 功能性能F4外设比F1丰富且功能更强大比如GPIO翻转速率、上下拉电阻配置、ADC精度等 内存大小F1内部SRAM最大64KF4有192K(1126416)。
二、STM32 启动过程
问题
问题一介绍以下STM32启动过程
解答
参看STM32开发 – 启动流程通过Boot引脚设定,寻找初始地址 初始化栈指针 __initial_sp 指向复位程序 Reset_Hander 设置异常中断 HardFault_Handler 设置系统时钟 SystemInit 调用C库函数 _main
三、GPIO
问题
问题一介绍以下GPIO
解答
参看STM32开发 – GPIO详解GPIO 8种工作模式gpio_init.GPIO_Mode1 GPIO_Mode_AIN 模拟输入 2 GPIO_Mode_IN_FLOATING 浮空输入 3 GPIO_Mode_IPD 下拉输入 4 GPIO_Mode_IPU 上拉输入 5 GPIO_Mode_Out_OD 开漏输出 6 GPIO_Mode_Out_PP 推挽输出 7 GPIO_Mode_AF_OD 复用开漏输出 8 GPIO_Mode_AF_PP 复用推挽输出
APB2负责 ADI/O高级TIM串口1。APB1负责 DAUSBSPII2CCAN串口2345普通TIMPWR
GPIO框图剖析参看STM32-GPIO详解
四、UART
问题
问题一串行通信方式介绍同步通信I2C 半双工SPI 全双工 异步通信RS485 半双工、RS232 全双工问题二串口配置串口设置的一般步骤可以总结为如下几个步骤 1串口时钟使能GPIO时钟使能 2串口复位 3GPIO端口模式设置 TX的GPIO工作模式为GPIO_Mode_AF_PP;//复用推挽输出 RX的GPIO工作模式为GPIO_Mode_IN_FLOATING;//浮空输入
4串口参数初始化 主要包含波特率设置115200、8个数据位、1个停止位、无奇偶校验位、无硬件数据流控制、收发模式。 5开启中断并且初始化NVIC如果需要开启中断才需要这个步骤 6使能串口 7编写中断处理函数问题二USART主要特点1全双工操作相互独立的接收数据和发送数据 2同步操作时可主机时钟同步也可从机时钟同步 3独立的高精度波特率发生器不占用定时/计数器 4支持5、6、7、8和9位数据位1或2位停止位的串行数据帧结构 5由硬件支持的奇偶校验位发生和检验 6数据溢出检测 7帧错误检测 8包括错误起始位的检测噪声滤波器和数字低通滤波器 9三个完全独立的中断TX发送完成、TX发送数据寄存器空、RX接收完成 10支持多机通信模式 11支持倍速异步通信模式。
解答
参看STM32开发 – 串口详解应用场景GPS、蓝牙、4G模块
五、I2C
问题
问题一I2C 总线在传送数据过程中共有三种类型信号1开始信号SCL 为高电平时SDA 由高电平向低电平跳变开始传送数据。 2结束信号SCL 为高电平时SDA 由低电平向高电平跳变结束传送数据。 3应答信号接收数据的 IC 在接收到 8bit 数据后向发送数据的 IC 发出特定的低电平脉冲表示已收到数据。CPU 向受控单元发出一个信号后等待受控单元发出一个应答信号CPU 接收到应答信号后根据实际情况作出是否继续传递信号的判断。若未收到应答信号由判断为受控单元出现故障。问题二I2C配置主机模式端口该怎么配置硬件模式复用开漏输出、既不上拉也不下拉。快速模式400 Kbit/s 软件模拟推挽输出、配置上拉电阻。问题三I2C仲裁机制参看S5PV210开发 – I2C 你知道多少三I2C 仲裁机制理解了 线“与”Wired-AND就一目了然了。 简单说它遵循“低电平优先”的原则即谁先发送低电平谁就会掌握对总线的控制权。
解答
参看STM32开发 – PMIC、I2C详解硬件模式 是有通信速率设置的 /* STM32 I2C 快速模式 */ #define I2C_Speed 400000
/* 通信速率 */ I2C_InitStructure.I2C_ClockSpeed I2C_Speed;
软件模拟 没有设置通信速率该怎么计算呢通过I2C总线位延迟函数 i2c_Delay
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 code classprism language-cppspan classtoken keywordstatic/span span classtoken keywordvoid/span span classtoken functioni2c_Delay/spanspan classtoken punctuation(/spanspan classtoken keywordvoid/spanspan classtoken punctuation)/span span classtoken punctuation{!-- --/span span classtoken keyworduint8_t/span ispan classtoken punctuation;/span span classtoken comment/* 下面的时间是通过安富莱AX-Pro逻辑分析仪测试得到的。 CPU主频72MHz时在内部Flash运行, MDK工程不优化 循环次数为10时SCL频率 205KHz 循环次数为7时SCL频率 347KHz SCL高电平时间1.5usSCL低电平时间2.87us 循环次数为5时SCL频率 421KHz SCL高电平时间1.25usSCL低电平时间2.375us IAR工程编译效率高不能设置为7 *//span span classtoken keywordfor/span span classtoken punctuation(/spani span classtoken operator/span span classtoken number0/spanspan classtoken punctuation;/span i span classtoken operator/span span classtoken number10/spanspan classtoken punctuation;/span ispan classtoken operator/spanspan classtoken punctuation)/spanspan classtoken punctuation;/span span classtoken punctuation}/span /code
应用场景PMIC、加速度计、陀螺仪
六、SPI
问题
问题一SPI需要几根线SPI 接口一般使用 4 条线通信 MISO 主设备数据输入从设备数据输出。 MOSI 主设备数据输出从设备数据输入。 SCLK 时钟信号由主设备产生。 CS 从设备片选信号由主设备控制。问题二SPI通信的四种模式SPI 有四种工作模式各个工作模式的不同在于 SCLK 不同, 具体工作由 CPOLCPHA 决定。 1CPOL: (Clock Polarity)时钟极性 SPI的CPOL表示当SCLK空闲idle的时候其电平的值是低电平0还是高电平1 CPOL0时钟空闲idle时候的电平是低电平所以当SCLK有效的时候就是高电平就是所谓的active-high CPOL1时钟空闲idle时候的电平是高电平所以当SCLK有效的时候就是低电平就是所谓的active-low
2CPHA:(Clock Phase)时钟相位 相位对应着数据采样是在第几个边沿edge是第一个边沿还是第二个边沿 0对应着第一个边沿1对应着第二个边沿。对于 CPHA0表示第一个边沿 对于CPOL0idle时候的是低电平第一个边沿就是从低变到高所以是上升沿 对于CPOL1idle时候的是高电平第一个边沿就是从高变到低所以是下降沿 CPHA1表示第二个边沿 对于CPOL0idle时候的是低电平第二个边沿就是从高变到低所以是下降沿 对于CPOL1idle时候的是高电平第一个边沿就是从低变到高所以是上升沿 问题三该如何确定使用哪种模式1先确认从机需求的 SCLK 极性不工作时是在低电位还是高电位由此确认 CPOL 为 0 或 1。 看原理图我们设置串行同步时钟的空闲状态为高电平所以我们选择 SPI_CPOL_High。也就是CPOL为1 2再由slave芯片 datasheet 中的时序图确认 slave 芯片是在 SCLK 的下降沿采集数据还是在SCLK的上升沿。
翻译一下 W25Q32JV通过SPI兼容总线访问包括四个信号:串行时钟(CLK)芯片选择(/CS)串行数据输入(DI)和串行数据输出(DO)。标准SPI指令使用DI输入引脚串行地将指令、地址或数据写入CLK上升沿上的设备。DO输出引脚用于从CLK下降沿上的设备读取数据或状态。支持模式0(0,0)和3(1,1)的SPI总线操作。模式0和 模式3关注的是当SPI总线主端处于待机状态数据没有被传输到串行Flash时CLK信号的正常状态。对于模式0在下降和上升时CLK信号通常是低的 边缘/ CS。对于模式3在/CS的下降和上升边缘上CLK信号通常是高的。 既然串行同步时钟的空闲状态为高电平这里我们选择第二个跳变沿所以选择 SPI_CPHA_2Edge。也就是CPHA为1 即我们选择的是模式3(1,1)。
解答
参看STM32开发 – W25Q32JV SPI FlASH详解参看详解SPI中的极性CPOL和相位CPHA应用场景SPI FlashW25Q32 存储器容量 32Mb (4M x 8)即4M byte
七、CAN
问题
问题一CAN总结介绍一下CAN控制器根据 CAN_L 和 CAN_H上 的电位差来判断总线电平。总线电平分为显性电平和隐性电平二者比居其一。发送方通过使总线电平发生变化将消息发送给接收方。问题二CAN初始化配置步骤?1配置相关引脚的复用功能使能CAN时钟 2设置CAN工作模式及波特率等CAN初始化环回模式,波特率500Kbps 3设置滤波器问题三CAN发送数据格式?CanTxMsg TxMessage; TxMessage.StdId0x12; // 标准标识符 TxMessage.ExtId0x12; // 设置扩展标示符 TxMessage.IDECAN_Id_Standard; // 标准帧 TxMessage.RTRCAN_RTR_Data; // 数据帧 TxMessage.DLClen; // 要发送的数据长度 发送8个字节 for(i0;ilen;i) TxMessage.Data[i]msg[i]; //数据
解答
参看STM32开发 – CAN总线详解
八、DMA
问题
问题一DMA介绍直接存储器存取(DMA) 用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU干预数据可以通过DMA快速地移动这就节省了CPU的资源来做其他操作。问题一DMA传输模式有几种DMA_Mode_Circular 循环模式 DMA_Mode_Normal 正常缓存模式 应用场景GPS、蓝牙都是用的循环采集DMA_Mode_Circular模式。
解答
参看STM32开发 – DMA详解
一个比较重要的函数获取当前剩余数据量大小根据设置的接收buff大小减去当前剩余数据量 得到当前接收数据大小。
九、中断
问题
问题一描述一下中断的处理流程1初始化中断设置触发方式是上升沿/下降沿/双沿触发。 2触发中断进入中断服务函数问题二STM32的中断控制器支持多少个外部中断STM32的中断控制器支持19个外部中断/事件请求从图上来看GPIO 的管脚 GPIOx.0~GPIOx.15(xABCDEFG)分别对应中断线 0 ~ 15。 另外四个EXTI线的连接方式如下 ● EXTI线16连接到PVD输出 ● EXTI线17连接到RTC闹钟事件 ● EXTI线18连接到USB唤醒事件 ● EXTI线19连接到以太网唤醒事件(只适用于互联型产品)中断服务函数列表 IO口外部中断在中断向量表中只分配了7个中断向量也就是只能使用7个中断服务函数。 EXTI0_IRQHandler EXTI1_IRQHandler EXTI2_IRQHandler EXTI3_IRQHandler EXTI4_IRQHandler EXTI9_5_IRQHandler EXTI15_10_IRQHandler
解答
参看STM32开发 – 外部中断详解
十、时钟系统
问题
问题一STM32有几个时钟源STM32 有5个时钟源: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。
解答
参看STM32开发 – 时钟系统详解
十一、UCOSII任务调度
问题
问题一RTOS的任务是怎么写的如何切出这个任务
解答
一个任务也称作一个线程。 UCOS有一个任务调度机制根据任务的优先级进行调度。一个是硬件中断 那么系统会将当前任务有关变量入栈然后执行中断服务程序执行完成后出栈返回. 另一个是任务之间的切换使用的方法就是任务调度每一个任务有自己的栈顺度也是一样的入栈然后执行另一个程序然后出线返回。
并非是每一任务按优先级顺序轮流执行的而是高优先级的任务独占运行除非其主动放弃执行否则低优先级任务不能抢占同时高优先级可以把放出去给低优先级任务使用的CPU占用权抢回来。所以ucos的任务间要注意插入等待延时以便ucos切出去让低优先级任务执行。
十二、UCOSII中任务间的通信
问题
问题一UCOSII中任务间的通信方式有哪几种
解答
在UCOSII中是使用信号量、邮箱消息邮箱和消息队列这些被称作事件的中间环节来实现任务间的通信的还有全局变量。信号量 参看ucosII 信号量使用总结(举例讲解) 信号量用于 1.控制共享资源的使用权满足互斥条件 2.标志某时间的发生 3.使2个任务的行为同步
应用实例互斥信号量 作为互斥条件信号量初始化为1。 实现目标调用串口发送命令必须等待返回“OK”字符过后才能发送下一条命令。每个任务都有可能使用到此发送函数不能出现冲突
邮箱消息邮箱
消息队列概念 1消息队列实际上就是邮箱阵列。 2任务和中断都可以将一则消息放入队列中任务可以从消息队列中获取消息。 3先进入队列的消息先传给任务(FIFO)。 4每个消息队列有一张等待消息任务的等待列表如果消息列中没有消息则等待消息的任务就被挂起直到消息到来。
应用场景 串口接收程序中的接收缓冲区。 储存外部事件。
十三、通信协议
问题
问题一项目使用了自定义协议是什么结构
解答
了解过Modbus协议。 结构为帧头SDTC帧长度指令流水号数据CRC校验。
十四、uCOSII和Linux的差异
问题
问题一uCOSII和Linux的差异
解答
μC/OS-II是专门为计算机的嵌入式应用设计的μC/OS-II 具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点 最小内核可编译至 2KB 。μC/OS-II 已经移植到了几乎所有知名的CPU 上。 linux 免费安全稳定应用范围广在嵌入式上服务器上家用机都有广泛应用。 μC/OS-II Linux 都适合用在嵌入式上。但μC/OS-II 是专为嵌入式而设计这样的结果是运行效率更高占用资源更少。 linux 都可以用作服务器上使用率高。linux 虽然不是专门针对服务器而开发但其源码公开完全可以修改使得两者差异不大最主要的发行版redhat linux 就是在服务器上用得很多的系统。
十五、Git提交代码
问题
问题一Git提交代码过程
解答
1、显示工作路径下已修改的文件
? 1 2 code$ git status /code
2、进入修改文件目录
? 1 2 code$cd - /code
3、显示与上次提交版本文件的不同
? 1 2 code$ git diff /code
4、把当前所有修改添加到下次提交中
? 1 2 code$ git add . /code
5、添加相关功能说明第一次提交使用这个
? 1 2 code$ git commit -s /code
其中还要注明: Fuction: 修改代码的功能 Ticket: 对应Bug号 注意 每一个文件夹下都要重新提一次。 6、查看提交代码
? 1 2 code$ tig . /code
7、请勿修改已发布的提交记录! 以后提交使用这个
? 1 2 code$git commit --amend /code
命令模式下 x ( 写入文件并退出) 8、推送到服务器
? 1 2 code$ git push origin HEAD:refs/for/master /code
十六、ucosii和ucosiii和freeRTOS比较
问题
问题一三者比较
解答
ucosii和freeRTOS比较1freeRTOS只支持TCP/IP uCOSii则有大量外延支持比如FS USB GUI CAN等的支持。我们用于tbox要用到CAN所以选择uCOSii 2freeRTOS 是在商业上免费应用。uCOSii在商业上的应用是要付钱的。 3任务间通讯freeRTOS只支持队列 信号量 互斥量。 uCOSii除这些外还支持事件标志组邮箱。 4理论上讲freeRTOS 可以管理超过64个任务而uCOSii只能管理64个。
ucosii和ucosiii比较那么从μC/OS-II到μC/OS-III有哪些不同的地方呢增加了什么我们看改动还是很大的。一个是原来只有0~63个优先级而且优先级不能重复现在允许几个任务使用同一个优先级在同一个优先级里面支持时间片调度法第二个是允许用户在程序运行中动态配置实时操作系统内核资源比如任务、任务栈、信号量、事件标志组、消息队列、消息数、互斥型信号量、存储块划分和定时器可以在程序运行中变更。这样用户可以避免在程序编译过程中出现资源不够分配的问题。在资源复用上也做了一些改进。μC/OS-II中最多任务数有64个到了版本2.82以后是256个μC/OS-III中用户可以由任意多的任务、任意多的信号量、互斥型信号量、事件标志、消息列表、定时器和任意分配的存储块容量仅受限于用户CPU可以使用的RAM量。这个也是一个很大的扩展。问邵老师它的这个数是启动时就固定的还是启动后随便定它是配置的时候可以自由定义的只有你的RAM足够大的话。第四点是增加了很多功能功能总是越来越多的大伙可以看一下的。原来这些功能在μC/OS-II里面是没有的。