首先抛出楼主的疑问: 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: 清除发送,若是高电平,在当前数据传输结束时阻断下一次的数据发送。 |
STM32F107+LWIP---如何检查tcp通讯断开?并重新连接
有没有用过数字式mems麦克风的,想问下SPI通讯的问题
stm32f103 CAN通讯多帧发送问题?
STM32F107作为USB主机模拟串口通讯不成功(采用PL2303芯片)
STM32F103C8 LIN通讯例程
求助,丐版J-Link通讯不上
ethernet可以与ethercat通讯吗?
LIS3DH SPI 通讯问题
STM32F373 CAN通讯问题CAN_FLAG_LEC
请教高手看看,STM32F1的多机通讯,地址匹配唤醒问题
即:如何将串口发送的数据加载上去呢?串口波特率为2400,楼主目前想到的是通过硬件来实现,加个 与门 将UART的Tx与38Khz的PWM进行 “与”处理。
但是觉得这样发挥不到软件工程师的优势,不知道大家一般怎么处理串口红外通讯?
请教采用多少波特率相对稳定些,谢谢