输入模式:
1. 浮空输入:对I/O口当前电平进行输入,通常用于读取I/O口输入,输入状态是不确定的。
2. 上拉输入:对I/O口置高电平输入。
3. 下拉输入:对I/O口置低电平输入,上拉和下拉电阻经常用于在不确定GPIO输入时确定状态。
4. 模拟输入:和另外三种输入方式不同,模拟输入的是模拟信号,一般用于AD转换。
输出模式:(值得注意的是,输出模式的输出结果可以用输入模式读取。)
1. 开漏输出:写入口与CPU相连。写入1时输出由外部上拉或下拉电阻决定电平;写入0时N-MOS管导通,电压为VSS,输出电平为低电平。
2. 复用开漏输出:与开漏输出模式类似,但写入口不与CPU相连而是和片上的外设模块相连。
3. 推挽输出:写入口与CPU相连。写入1时P-MOS管导通,N-MOS管截止,输出高电平;写入0时P-MOS管截止,N-MOS管导通,输出低电平。
4. 复用推挽输出:与推挽输出模式类似,但写入口不与CPU相连而是和片上的外设模块相连。
推挽输出和开漏输出的区别:
推挽输出:可以输出强高低电平(VSS和VDD),连接数字器件。
开漏输出:只能输出强低电平(VSS),高电平需要靠外部上拉电阻。输出相当于三极管集电极,电流吸收能力较好(20mA以内),适合做电流型的驱动。
什么是中断?
1)中断请求:
2)中断响应:
3)现场保护:
4)中断处理:
5)恢复现场:
6)中断返回:
中断的触发方式有哪些?
沿触发: 这是很最常见的触发方式,我们可以用数字电路的方法来解释它的特性。边触发应该应触发器来描述: 输入引脚(当作触发器的CLK) ----> 触发器------> 中断控制器 ,当输入引脚的相应的沿到来时,就会将触发器置1,并触发中断,触发器会一直保持电平1除非在ISR中用一条语句清0,否则会不断的触发中断,这也就是每次触发中断都要清0的原因。当有高优先级的中断运行后退出时,处理器检测到触发器的值为1,所以依然会进入中断服务程序。
电平触发: 有的时候,边沿触发很容易产生毛刺并导致误中断,这时候就要使用电平触发,电平触发是持续触发,可以用数字电路的缓冲器来描述
哪些函数不能在中断中使用?
printf,malloc,free
什么叫不可重入函数?
中断与异常有何区别?
中断的响应执行流程是什么?
写一个中断服务需要注意哪些?
1、中断服务子程序设计原则是要快进快出,printf的实现会一直调用到底层逐个字节的打印输出,
这种IO操作效率很慢,不适合放到中断里面。如果有锁机制,可能会造成死锁。
中断和轮询哪个效率高?怎样决定是采用中断方式还是采用轮询方式去实现驱动?
中断是CPU处于被动状态下来接受设备的信号,而轮询是CPU主动去查询该设备是否有请求。凡事都是两面性,所以,看效率所以,看效率不能简单的说那个效率高。如果是请求设备是一个频繁请求cpu的设备,或者有大量数据请求的网络设备,那么轮询的效率是比中断高。如果是一般设备,并且该设备请求cpu的频率比较底,则用中断效率要高一些。主要是看请求频率。
中断优先级有哪些?
一种是抢占优先级,一种是固有优先级
单片机这种没有操作系统的,中断处理函数不能有输入参数也不能有函数返回
什么是异步传输和同步传输?
异步传输是面向字符的传输,而同步传输是面向比特的传输。
UART、IIC、SPI对比的优缺点?
SPI IIC UART三种通信方式的比较
(1)UART(Universal Asynchronous Receive Transmitter):也就是我们经常所说的串口,基本都用于调试。
主机和从机之间采用三根线,RX,TX,GND。TX是用来发送数据,RX是用来接收数据,这个过程中,收和发不是同一根线,所以它是全双工进行通信,GND 是地线;
(2)IIC(Inter Integrated Circuit):
它的通信只需要两根数据线,一个时钟线SCL和一个数据线SDA。只有一根数据线,所以是半双工通信,两条线上可以挂载许多设备(不同的设备会有不同的IIC地址)
(3)SPI(Serial Peripheral Interface, 同步外设接口):
是摩托罗拉开发的全双工同步串行总线,该总线大量在EEPROM,ADC,FRAM和显示驱动器之类的外设器件通信(通信速度比较慢);
SPI是一种串行同步通讯协议,由一个主设备和一个或多个从设备组成,主设备启动一个与从设备的同步通讯,从而完成数据的交换。SPI 接口由SDI(串行数据输入),SDO(串行数据输出),SCK(串行移位时钟),CS(从使能信号)四种信号构成,CS 决定了唯一的与主设备通信的从设备,片选信号低电平有效。如没有CS 信号,则只能存在一个从设备,主设备通过产生移位时钟来发起通讯。通讯时,数据由SDO 输出,SDI 输入,数据在时钟的上升或下降沿由SDO 输出,在紧接着的下降或上升沿由SDI 读入,这样经过8/16 次时钟的改变,完成8/16 位数据的传输。
usart和uart的区别?
首先从名字上看:
UART:universal asynchronous receiver and transmitter通用异步收/发器
USART:universal synchronous asynchronous receiver and transmitter通用同步/异步收/发器
从名字上可以看出,USART在UART基础上增加了同步功能,即USART是UART的增强型,事实也确实是这样。但是具体增强到了什么地方呢?
其实当我们使用USART在异步通信的时候,它与UART没有什么区别,但是用在同步通信的时候,区别就很明显了:大家都知道同步通信需要时钟来触发数据传输,也就是说USART相对UART的区别之一就是能提供主动时钟。如STM32的USART可以提供时钟支持ISO7816的智能卡接口。 USART支持流控制
在s3c2440中看到的是uart,而在一般新的芯片手册中看到的都是usart,虽然在以前也都看到过,原本以为这俩其实是相同的,以为只是不同芯片采用不同的名称而已,其实不然,uart全名叫通用异步收发传输器,在uart上追加同步方式的序列信号变换电路则称之为usart
UART 是一种通用串行数据总线,用于异步通信,全双工,
与UART的区别是USART具有发送部分有外部时钟输入驱动和波特率发生器,发送器有一个单独的写入缓冲器(发送UDR),一个串行移位寄存器、校验位发生器和用于处理不同帧结构的控制逻辑电路构成。使用写入缓冲器,实现了连续发送多帧数据无延迟的通信。其实USART是UART的增强型,只是比UART多了个同步功能,拥有独立的时钟驱动器,可以实现无延迟的数据传输。
uart优缺点?
优点
通信只需要两条数据线;
无需时钟信号;
有奇偶校验位,方便通信的差错检查;
只需要接收端和发送端设置好数据包结构,即可稳定通信;
缺点
数据帧最大支持9位数据;
不支持多主机或多从机的主从系统;
要配置什么参数?
时序?
传输速率?
RX为什么要上拉?
RX为什么要上拉?原因分析,是因为RX不上拉,悬空的话,电路的某些信号影响(比如射频,大功率器件),就容易误触发,进入接收中断。改成上拉就可以解决。
怎么传输浮点数?
串口如何接收不定长数据?
第一种:使用中断方式 第二种使用自定义结束符
软件怎么实现自动波特率检测?
STCR51
STM32
DSP430:
1、MSP430系列单片机是美国德州仪器(TI)1996年开始推向市场的一种16 位超低功耗的混合信号处理器(Mixed Signal Processor)
。称之为混合信号处理器,主要是由于其针对实际应用需求,把许多模拟电路、数字电路和微处理器集成在一个芯片上,以提供“单片”解决方案。
2、MSP430是16位单片机,51是8位单片机
3、MSP430采用RISC精简指令集,单个时钟周期就可以执行一条指令,相同晶振,速度较51快12倍。
4、其它片上资源也是MSP较丰富。
Arudino:就是一个很方便的集成开发环境,有着各种各样的库,拥有很不错的生态,屏蔽掉了很多底层代码,不用再去头疼GPIO怎么配,
各种设备怎么初始化,让开发者专注于软件上的开发。