请问STM32的串口IrDA如何配合硬件来实现红外通讯?

2019-07-14 14:29发布

首先抛出楼主的疑问:
1、        STM32串口的IrDA一般应用在什么场合?
2、        如何配合硬件来实现?比如RX直接连接到红外接收头么(现在的红外头自带解码啊,收到38KHz的脉冲输出 高,没收到脉冲信号输出 低。)接收头都能自己解码了,还需要IrDA做什么呢?
3、        针对于38KHz的信号,IrDA是怎么实现的呢?即串口要发送一个字节时,irDA是怎么实现的呢?
4、另外提个问题:针对于38KHz的红外调制有什么好的解决方案么?(38KHz的载波PWM可以解决,如何对其进行开关控制呢?)
楼主的目的是进行红外通讯来着,看到STM32有这个IrDA,索性了解下。
首先来点理论的解释,楼主看了一遍表示依旧茫然一片:
IrDA是一个半双工通信协议。如果发送器忙(也就是UART正在送数据给IrDA编码器),IrDA接收线上的任何数据都将被IrDA解码器所忽略。如果接收器忙即:UART正在接收从IrDA解码器来的解码数据,从UART的TX上到IrDA的数据将不会被IrDA编码。
IrDA SIR物理层规定使用反相归零调制方案(RZI),该方案用一个红外光脉冲代表逻辑'0'。
SIR发送编码器对从UART输出的NRZ(非归零)比特流进行调制。输出脉冲流被传送到一个外部输出驱动器和红外LED。
SIR接收解码器对来自红外接收器的归零位比特流进行解调,并将接收到的NRZ串行比特流输出到UART。在空闲状态里,解码器输入通常是高。
发送编码器输出的极性和解码器的输入相反。当解码器输入低时,检测到一个起始位。
SIR解码器把接收到的IrDA信号转变成比特流后发送给UART。
SIR接收逻辑把高电平状态解释为'1',把低脉冲解释为'0'。
SIR发送逻辑把'0'作为高脉冲发送,把'1'作为低电平发送。
发送编码器输出与解码器输入有着相反的极性。当空闲时,SIR输出处于低状态。
在IrDA模式里,UART_CR2寄存器上的STOP位必须配置成1个停止位。
IrDA红外低功耗模式
IrDA可以工作在正常模式,也可以工作在低功耗模式。选择低功耗模式需要把UART_CR5寄存器的IRLP位置1。

USART功能概述
接口通过三个引脚与其他设备连接在一起(见图248)。任何USART双向通信至少需要两个脚:接收数据输入(RX)和发送数据输出(TX)。
RX:接收数据串行输。通过过采样技术来区别数据和噪音,从而恢复数据。
TX:发送数据输出。当发送器被禁止时,输出引脚恢复到它的I/O端口配置。当发送器被激活,并且不发送数据时,TX引脚处于高电平。在单线和智能卡模式里,此I/O口被同时用于数据的发送和接收。
● 总线在发送或接收前应处于空闲状态
● 一个起始位
● 一个数据字(8或9位),最低有效位在前
● 0.5,1.5,2个的停止位,由此表明数据帧的结束
● 使用分数波特率发生器 —— 12位整数和4位小数的表示方法。
● 一个状态寄存器(USART_SR)
● 数据寄存器(USART_DR)
● 一个波特率寄存器(USART_BRR),12位的整数和4位小数
● 一个智能卡模式下的保护时间寄存器(USART_GTPR)

关于以上寄存器中每个位的具体定义,请参考寄存器描述第节:USART寄存器描述。
在同步模式中需要下列引脚:
● CK:发送器时钟输出。此引脚输出用于同步传输的 时钟, (在Start位和Stop位上没有时钟脉冲,软件可选地,可以在最后一个数据位送出一个时钟脉冲)。数据可以在RX上同步被接收。这可以用来控制带有移位寄存器的外部设备(例如LCD驱动器)。时钟相位和极性都是软件可编程的。在智能卡模式里,CK可以为智能卡提供时钟。
在IrDA模式里需要下列引脚:
● IrDA_RDI: IrDA模式下的数据输入。
● IrDA_TDO: IrDA模式下的数据输出。
下列引脚在硬件流控模式中需要:


● nCTS: 清除发送,若是高电平,在当前数据传输结束时阻断下一次的数据发送。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。