当前位置:首页 > 基于单片机的红外光通信系统设计(接收部分) - 图文
基于单片机的红外光通信系统设计(接收部分)
果、Acorn和VLSI三家公司的合资,现如今最流行的是基于ARMv7架构的ARM处理器,它加入了经过优化的Thumb-2指令集,这是现在最前卫的新技术。Cortex系列是v7架构的第一次亮相,其中Cortex-M3就是按款式M设计的,它不仅支持16位的Thumb指令集和基本的32位Thumb-2指令集架构,而且拥有很多新特性。与ARM7 TDMI相比,Cortex-M3拥有的性能更强劲、代码密度也更高、中断可嵌套、低功耗、位带操作、成本低等众多优势。Cortex-M3的中断处理完全基于硬件进行,可减少的时钟周期数最多可达12个,在应用中可节约70%的中断;同时Cortex-M3采用了单线调试(Single Wire)这种新型技术,能够减少非常多的调试工具费用,其中还集成了大部分存储器控制器,这样设计人员可以直接将Flash外接在MCU上,降低了应用障碍和设计难度。作为Cortex-M3内核最先尝蟹的公司之一,ST在技术支持方面都远远超过其他对手,其生产的STM32F103系列单片机拥有包括:FSMC、TIMER、SPI、IIC、USB、CAN、IIS、SDIO、ADC、DAC、RTC、DMA等外设及功能和84个中断,16级可编程优先级,非凡的功耗控制,而且它的开发成本低,具有极高的集成度。相对于传统的51单片机,它的实时性更好,功能更强大,处理速度和能力都很强。[4]
本设计处理器平台STM32F103ZET6来自于星翼电子科技有限公司所做的战舰ALIENTEK STM32开发板,该开发板将STM32的资源开发到了极致,基于所用STM32的内部资源都可以在此板上得到验证,配套的软件资料分为库函数版本和寄存器版本,将内部控制寄存器的函数打包,不用自己一点点追究每一个控制位的设置,使用起来很方便,它的最小系统原理图如图3.3所示:
图3.3 STM32F103ZET6单片机最小系统
本设计用了此单片机的外部中断、串口通信、DA转换、定时器等硬件资源,加上软件上的设计,构成了本设计的处理核心。
7
基于单片机的红外光通信系统设计(接收部分)
3.2.1 STM32单片机中断系统
STM32单片机的EXTI控制器支持多达19个外部中断事件请求,每个中断设有状态位,有独立的触发和屏蔽设置,检测脉冲宽度低于APB2时钟宽度的外部信号。
[5]
它的每一个IO口都可以设为外部中断输入,触发方式有上升沿触发、下降沿触
发两种,其外部中断/事件线路映像如图3.4所示。
图3.4 外部中断通用I/O映像
STM32单片机中断系统有很多与之相关的寄存器,包括中断屏蔽寄存器、事件屏蔽寄存器、上升沿触发选择寄存器、下降沿触发选择寄存器、软件中断事件寄存器、挂起寄存器、外部中断/事件寄存器。通过配置这些寄存器就可以使用单片机的外部中断了,本设计所应用的就是它的边沿触发方式,由单片机IO口PE2、PE3管脚输入,实时根据接收传感器输出的跳变沿控制内部IO口PA0管脚输出信号波形。
3.2.2 STM32单片机串口通信
通信有并行和串行两种方式,在单片机系统中,信息交换多采用串行通信。[6]串行通信就是将数据按字节分成一位一位的形式在一条传输线上逐个传送,对于一个字节的数据,串口通信一次只传送一位,所以最少要分八次才能传送完毕,如图3.5所示。
8
基于单片机的红外光通信系统设计(接收部分)
图3.5 串行通信方式
串行通信分为同步串行通信和异步串行通信两种方式。同步通信时要保证发送方时钟直接对接收方时钟控制的建立,使收发双方达到完全同步,保持位同步和字符同步关系;异步通信指的是通信发送与接收设备使用各自的时钟来控制数据的传输过程,如图3.6所示。
图3.6 异步串行通信方式
异步通信一帧字符信息的组成分为四个部分:起始位、数据位、奇偶校验位和停止位,如图3.7所示。
图3.7 异步串行通信数据格式
异步串行通信方式通常用于在单片机与单片机或单片机与计算机之间的通信。
STM32单片机具有通用同步异步收发器(USART)与外部设备之间进行数据交换,具有NRZ(不归零码)标准格式,可编程数组字长度8位或9位,支持1或2个的停止位。[5]任何USART双向通信至少需要两个引脚:接收数据输入(RX)和发送数据输出(TX),本设计作为红外通信系统的接收部分,使用到了USART的接收数据输入端(RXD),RX通过过采样技术来区分噪音和数据,从而恢复数据。STM32F103单片机最多包含有五路串口,有支持同步单线通信和半双工单线通讯、
9
基于单片机的红外光通信系统设计(接收部分)
分数波特率发生器、支持调制解调器操作、、具有DMA、智能卡协议、支持LIN和IrDA SIR ENDEC规范等。STM32具有一个状态寄存器(USART_SR)、一个数据寄存器(SUART_DR)、每个串口都有自己的波特率寄存器(USART_BRR),12位的整数和4位小数,可以用来设置不同的波特率。波特率的单位是bps(位/秒),被定义为每秒传输二进制代码的位数。
STM32的串口波特率计算公式如下:
fPCLKx Tx/Rx波特率?(16*USARTDIV)(1.1)
此式中,fPCLKx是给串口的时钟,USARTDIV为一个无符号定点数,只要能够得到USARTDIV的值,就可以得到串口波特率寄存器USART1->BRR值,反之,我们得到USART1->BRR的值,也就可以推导出USARTDIV的值。[7]一般我们更关心的是如何从USARTDIV的值得到USART_BRR的值,因为一般我们知道的是波特率和PCLKx的时钟,要求的就是USART_BRR的值。本设计设置STM32单片机USART波特率为115200bps,以防语音信号不能及时传输。
STM32单片机的USART接收器可以根据控制寄存器USART_CR1的M位接收8位或9位的数据字,如图3.8所示。
图3.8 字长设置
在使用其串口时要对其进行初始化,初始化是不用设置奇偶校验位的,本设计使用的是9位数据传输,设置了1位奇偶校验位和8位的数据位。在USART接收期间,数据的最低有效位首先进入RX引脚,STM32的发送与接收是由数据寄存
0 1
共分享92篇相关文档