一、STM32F1和F4的区别?
解答:参看:STM32开发 – STM32初识
内核不同:F1是Cortex-M3内核,F4是Cortex-M4内核;
主频不同:F1主频72MHz,F4主频168MHz;
浮点运算:F1无浮点运算单位,F4有;
功能性能:F4外设比F1丰富且功能更强大,比如GPIO翻转速率、上下拉电阻配置、ADC精度等;
内存大小:F1内部SRAM最大64K,F4有192K(112+64+16)。二、介绍以下STM32启动过程?解答:参看:STM32开发 – 启动流程
通过Boot引脚设定,寻找初始地址
初始化栈指针 __initial_sp
指向复位程序 Reset_Hander
设置异常中断 HardFault_Handler

三、介绍以下GPIO?解答:参看:STM32开发 – GPIO详解
GPIO 8种工作模式(gpio_init.GPIO_Mode):
(1) 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负责 AD,I/O,高级TIM,串口1。
APB1负责 DA,USB,SPI,I2C,CAN,串口2345,普通TIM,PWR

四、UART问题一:串行通信方式介绍?

同步通信:I2C 半双工,SPI 全双工异步通信:RS485 半双工、RS232 全双工问题二:串口配置?

串口设置的一般步骤可以总结为如下几个步骤:(1)串口时钟使能,GPIO时钟使能(2)串口复位(3)GPIO端口模式设置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详解

硬件模式: 是有通信速率设置的

六、SPI问题一:SPI需要几根线?
SPI 接口一般使用 4 条线通信:MISO 主设备数据输入,从设备数据输出。MOSI 主设备数据输出,从设备数据输入。SCLK 时钟信号,由主设备产生。CS 从设备片选信号,由主设备控制。问题二:SPI通信的四种模式?
SPI 有四种工作模式,各个工作模式的不同在于 SCLK 不同, 具体工作由 CPOL,CPHA 决定。(1)CPOL: (Clock Polarity),时钟极性:
SPI的CPOL,表示当SCLK空闲idle的时候,其电平的值是低电平0还是高电平1:CPOL=0,时钟空闲idle时候的电平是低电平,所以当SCLK有效的时候,就是高电平,就是所谓的active-high;CPOL=1,时钟空闲idle时候的电平是高电平,所以当SCLK有效的时候,就是低电平,就是所谓的active-low;(2)CPHA:(Clock Phase),时钟相位:

相位,对应着数据采样是在第几个边沿(edge),是第一个边沿还是第二个边沿,

0对应着第一个边沿,1对应着第二个边沿。对于:

CPHA=0,表示第一个边沿:

对于CPOL=0,idle时候的是低电平,第一个边沿就是从低变到高,所以是上升沿;

对于CPOL=1,idle时候的是高电平,第一个边沿就是从高变到低,所以是下降沿;

CPHA=1,表示第二个边沿:

对于CPOL=0,idle时候的是低电平,第二个边沿就是从高变到低,所以是下降沿;

对于CPOL=1,idle时候的是高电平,第一个边沿就是从低变到高,所以是上升沿;

 

十、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。

十一、RTOS的任务是怎么写的?如何切出这个任务?解答:一个任务,也称作一个线程。
UCOS有一个任务调度机制,根据任务的优先级进行调度。
一个是硬件中断, 那么系统会将当前任务有关变量入栈,然后执行中断服务程序,执行完成后出栈返回.
另一个是任务之间的切换,使用的方法就是任务调度,每一个任务有自己的栈,顺度也是一样的入栈,然后执行另一个程序,然后出线返回。并非是每一任务按优先级顺序轮流执行的,而是高优先级的任务独占运行,除非其主动放弃执行,否则低优先级任务不能抢占,同时高优先级可以把放出去给低优先级任务使用的CPU占用权抢回来。所以ucos的任务间要注意插入等待延时,以便ucos切出去让低优先级任务执行。十二、UCOSII中任务间的通信方式有哪几种?解答:在UCOSII中,是使用信号量、邮箱(消息邮箱)和消息队列这些被称作事件的中间环节来实现任务间的通信的,还有全局变量。

信号量:

参看:ucosII 信号量使用总结(举例讲解)

信号量用于:

1.控制共享资源的使用权(满足互斥条件)

2.标志某时间的发生

3.使2个任务的行为同步应用实例:互斥信号量

作为互斥条件,信号量初始化为1。

实现目标:调用串口发送命令,必须等待返回“OK”字符过后,才能发送下一条命令。每个任务都有可能使用到此发送函数,不能出现冲突!邮箱(消息邮箱):消息队列:

概念:

(1)消息队列实际上就是邮箱阵列。

(2)任务和中断都可以将一则消息放入队列中,任务可以从消息队列中获取消息。

(3)先进入队列的消息先传给任务(FIFO)。

(4)每个消息队列有一张等待消息任务的等待列表,如果消息列中没有消息,则等待消息的任务就被挂起,直到消息到来。应用场景:

串口接收程序中的接收缓冲区。

储存外部事件。十三、项目使用了自定义协议,是什么结构?解答:了解过Modbus协议。

结构为:帧头(SDTC)+帧长度+指令+流水号+数据+CRC校验。十四、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、显示工作路径下已修改的文件:

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里面是没有的。

十八、物联网的架构问题一:物联网的架构分为几层?每一层都负责哪些功能?解答:分三层,物联网从架构上面可以分为感知层、网络层和应用层,

(1)感知层: 负责信息采集和物物之间的信息传输,信息采集的技术包括传感器、条码和二维码、 RFID射频技术、音视频等多媒体信息,信息传输包括远近距离数据传输技术、自组织组网技术、协同信息处理技术、信息采集中间件技术等传感器网络。感知层是实现物联网全面感知的核心能力,是物联网中包括关键技术、标准化方面、产业化方面亟待突破的部分,关键在于具备更精确、更全面的感知能力,并解决低功耗、小型化和低成本的问题。

(2)网络层: 是利用无线和有线网络对采集的数据进行编码、认证和传输,广泛覆盖的移动通信网络是实现物联网的基础设施,是物联网三层中标准化程度昀高、产业化能力昀强、昀成熟的部分,关键在于为物联网应用特征进行优化和改进,形成协同感知的网络。

(3)应用层: 提供丰富的基于物联网的应用,是物联网发展的根本目标,将物联网技术与行业信息化需求相结合,实现广泛智能化应用的解决方案集,关键在于行业融合、信息资源的开发利用、低成本高质量的解决方案、信息安全的保障以及有效的商业模式的开发。十九、内存管理问题一:UCOS中内存管理的方法有哪些?解答:系统通过与内存分区相关联的内存控制块来对内存分区进行管理。动态内存管理函数有:

创建动态内存分区函数OSMemCreate();

请求获得内存块函数OSMemGet();

释放内存块函数OSMemPut();二十、Ucos中任务状态哪几种?任务状态之间的关系图?解答:有5种状态:

睡眠状态、就绪状态、运行状态、等待状态(等待某一事件发生)和中断服务状态。UCOSII任务的5个状态转换关系:

二十一、ADC问题一:简述STM32的ADC系统的功能特性?
(1)12bit分辨率(2)自动校准(3)可编程数据对齐(转换结果支持左对齐或右对齐方式存储在16位数据寄存器)(4)单次和连续转换模式解答:参考文章:详解STM32中的ADC二十二、系统时钟问题一:简述设置系统时钟的基本流程?
(1)打开HSE,等待就绪后,设置Flash等待操作。(2)设置AHB,APB1,APB2分频系数,确定他们各自和系统时钟的关系。(3)设置CFGR寄存器确定PLL的时钟来源和倍频系数(HSE外部8M*9倍=72MHz)。(4)使能PLL,将系统时钟源切换到PLL.解答:二十三、HardFault_Handler处理问题一:造成原因?
(1)数组越界操作;(2)内存溢出,访问越界;(3)堆栈溢出,程序跑飞;(4)中断处理错误;问题二:处理方式?
(1)在startup_stm32f10x_cl.s里找到HardFault_Handler的地址重映射,并重新编写,让其跳转到HardFaultHandle函数。
(2)打印查看R0、R1、R2、R3、R12、LR、PC、PSR寄存器。(3) 查看Fault状态寄存器组(SCB->CFSR和SCB->HFSR)
二十四、TTS语音合成方法问题一:sim7600 TTS语音使用什么方法?解答:(1)使用unicode编码合成声音
AT+CTTS=1,”
6B228FCE4F7F75288BED97F3540862107CFB7EDF”
内容是“欢迎使用语音合成系统”,模块收发中文短信就是unicode编码,所以很容易将短信朗读出来;
(2)直接输入文本,普通字符采用ASIIC码,汉字采用GBK编码。
AT+CTTS=2,”欢迎使用语音合成系统”二十五、定时器问题一:已知STM32的系统时钟为72MHz,如何设置相关寄存器,实现20ms定时?解答:参考文章:STM32入门系列-SysTick系统定时器
通过SysTick_Config(SystemCoreClock / OS_TICKS_PER_SEC))//1ms定时器其中:uint32_t SystemCoreClock         = SYSCLK_FREQ_72MHz;        /*!< System Clock Frequency (Core Clock) */#define SYSCLK_FREQ_72MHz  72000000#define OS_TICKS_PER_SEC       1000    /* Set the number of ticks in one second如果需要20ms则,可以通一设置一个全局变量,然后定初值得为20,这样,每个systick中断一次,这个全局变量减1,减到0,即systick中断20次,时间为:1ms*20=20ms。从而实现20ms的定时。二十六、优先级问题一:如果是两个优先级相同的任务怎么运行?解答:使获得信号量任务的优先级在使用共享资源期间暂时提升到所有任务最高优先级的高一个级别上,以使该任务不被其他任务所打断,从而能尽快地使用完共享资源并释放信号量,然后在释放信号量之后,再恢复该任务原来的优先级别。二十七、状态机问题一:使用的什么状态机?解答:参考文章:谈谈单片机编程思想——状态机有限状态机,(英语:Finite-state machine, FSM),又称有限状态自动机,简称状态机。假设状态机的状态转换由下表所示:

更多推荐