一、stm32f1和f4的区别?
解答:
内核不同: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启动过程?
解答:
通过boot引脚设定,寻找初始地址 初始化栈指针 __initial_sp 指向复位程序 reset_hander 设置异常中断 hardfault_handler 设置系统时钟 systeminit 调用c库函数 _main
三、介绍以下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
gpio框图剖析:
四、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)支持倍速异步通信模式。
五、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 i2c 快速模式 */#define i2c_speed 400000/* 通信速率 */i2c_initstructure.i2c_clockspeed = i2c_speed; 软件模拟: 没有设置通信速率,该怎么计算呢?
通过i2c总线位延迟函数 i2c_delay:
static void i2c_delay(void){ uint8_t i; /* 下面的时间是通过安富莱ax-pro逻辑分析仪测试得到的。 cpu主频72mhz时,在内部flash运行, mdk工程不优化 循环次数为10时,scl频率 = 205khz 循环次数为7时,scl频率 = 347khz, scl高电平时间1.5us,scl低电平时间2.87us 循环次数为5时,scl频率 = 421khz, scl高电平时间1.25us,scl低电平时间2.375us iar工程编译效率高,不能设置为7 */ for (i = 0; i < 10; i++);} 应用场景:pmic、加速度计、陀螺仪
六、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时候的是高电平,第一个边沿就是从低变到高,所以是上升沿;
问题三:该如何确定使用哪种模式?
(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)。
七、can
问题一:can总结介绍一下?
can控制器根据 can_l 和 can_h上 的电位差来判断总线电平。总线电平分为显性电平和隐性电平,二者比居其一。发送方通过使总线电平发生变化,将消息发送给接收方。
问题二:can初始化配置步骤?
(1)配置相关引脚的复用功能,使能can时钟(2)设置can工作模式及波特率等(can初始化环回模式,波特率500kbps )(3)设置滤波器
问题三:can发送数据格式?
cantxmsg txmessage;txmessage.stdid=0x12; // 标准标识符txmessage.extid=0x12; // 设置扩展标示符txmessage.ide=can_id_standard; // 标准帧txmessage.rtr=can_rtr_data; // 数据帧txmessage.dlc=len; // 要发送的数据长度 发送8个字节for(i=0;icfsr和scb->hfsr)
二十四、tts语音合成方法
问题一:sim7600 tts语音使用什么方法?
解答:
(1)使用unicode编码合成声音
at+ctts=1,”
6b228fce4f7f75288bed97f3540862107cfb7edf”
内容是“欢迎使用语音合成系统”,模块收发中文短信就是unicode编码,所以很容易将短信朗读出来;
(2)直接输入文本,普通字符采用asiic码,汉字采用gbk编码。
at+ctts=2,”欢迎使用语音合成系统”
二十五、定时器
问题一:已知stm32的系统时钟为72mhz,如何设置相关寄存器,实现20ms定时?
通过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),又称有限状态自动机,简称状态机。
假设状态机的状态转换由下表所示:
实现:(使用switch语句)
//横着写void event0func(void){ switch(cur_state) { case state0: action0; cur_state = state1; break; case state1: action1; cur_state = state2; break; case state2: action1; cur_state = state0; break; default:break; }}void event1func(void){ switch(cur_state) { case state0: action4; cur_state = state1; break; default:break; }}void event2func(void){ switch(cur_state) { case state0: action5; cur_state = state2; break; case state1: action6; cur_state = state0; break; default:break; }} 二十八、器件选型
问题一:stm32f407 vs stm32f103 主要功能及资源对比?
解答:
单调谐回路中频放大器
IBM公布乐观预期并实施裁员
特斯拉的自动驾驶纯视觉方案设计解读
dfrobotIR kit红外遥控简介
国内首座大型构网型储能电站成功送电、并网运行
STM32 嵌入式面试28个知识点分享
物联网(IoT)正在多个行业脱颖而出
宁德时代麒麟电池已正式量产
百度自动驾驶出租车服务在北京全面开放,可免费试乘服务
通过单片机来设计自由摆的平板控制系统
近距离探访和洞察SICK全新战略背景下的转型之道
怎么去选择使用gm的三种表达式呢?
滚珠螺杆螺母的加工方法
高压玻璃釉电阻简介
CI520读卡芯片兼容CV520支持ISO/IEC14443
简单的开关电源电路图分享 六款简单的开关电源电路设计方案
红米Note8评测 “宇宙良心”同价位无槽点
全志R128应用开发案例—适配SPI驱动ST7789V2.4寸LCD
基于ATECLOUD新能源汽车电机驱动电路测试方案
怎样去确保云存储的安全