使用SDK5.0.4,我试图使用UART2通过红外收发器发送IrDa,但设置有困难。
程序是什么?我只改变了两件事:
1)改变了这一行:GPIO_ConfigurePin(UART2_GPIO_PORT, UART2_TX_PIN, OUTPUT, PID_UART2_IRDA_TX, false);/ /更改为发送
2)改变了这个:SetWord32(UART2_MCR_REG, UART_AFCE|UART_RTS|0x40);// |0x40设置UART_SIRE位为1。
我还需要做什么吗?谢谢!
设备:
嗨Krixen,
不幸的是,没有使用IrDA的例子,我可以给你作为参考,尽管你已经完成的配置是足够的,你已经正确设置MCR寄存器,其余的配置是类似于标准UART配置,IrDA的问题是在580的UART有一个相当显著的波特率错误,所以如果你试图建立一个通信,你应该尝试以较低的波特率低于115200或甚至低于57600。
由于MT_dialog
你好,
谢谢你的反馈,我离开办公室很久了,现在回来了。
问题是,当我切换到UART IrDa时,我在传输线路上看到任何东西。我还能看到0到VCC的波动吗,它看起来像红外线收发器发射的方波吗?
嗨Krixen,
是的,如果你设置了IrDa功能,你应该看到脉冲在TX线上,只要你发送数据偏离航向。
由于MT_dialog
你仍然使用uart写(或printf)函数,它应该吐出IrDa SIR数据格式?或者我需要调用其他函数吗?
我问这个的原因是因为当我改变两个寄存器(从原来的帖子)时,我看到Tx行上什么都没有。它看起来像一条稍微嘈杂的线但是它几乎总是0伏。我也没有看到什么在接收方,尽管这是预期与Tx方没有什么。
嗨Krixen,
没有,没有专用的API来使用IrDa,与UART的驱动程序,hw能够在IrDa模式下运行,没有任何额外的配置。也许你已经错误配置了UART本身,例如,如果你使用任何已经UART的例子,如uart2_async的例子,你做这些改变(上面提到的),你仍然看到只是0伏在线路上没有脉冲?
由于MT_dialog
你好再次,
我使用common_uart.c,这里是我的UART设置:
//选择UART设置
#define UART_BAUDRATE_115K2 // Baudrate in bits/s: {9K6, 14K4, 19K2, 28K8, 38K4, 57K6, 115K2}
#define UART2_DATALENGTH UART_CHARFORMAT_8 //数据长度:{5,6,7,8}
#define UART2_PARITY UART_PARITY_NONE //奇偶校验:{UART_PARITY_NONE, UART_PARITY_EVEN, UART_PARITY_ODD}
#define UART2_STOPBITS UART_STOPBITS_1 //停止位:{UART_STOPBITS_1, UART_STOPBITS_2}
#define uart2_flowcontrol_disabled //流量控制:{UART_FLOWCONTROL_DISABLED, UART_FLOWCONTROL_ENABLED}
我使用这个函数每次打印一个字节:
空白printf_byte (char ch)
{
//以十六进制格式打印一个字节
字符b;
b = ((0xF0 & ch) >> 4);
B += (B < 10) ?48: 55;
uart2_write ((uint8_t *)和乙1 NULL);
uart2_finish_transfers ();
b = (0xF & ch);
B += (B < 10) ?48: 55;
uart2_write ((uint8_t *)和乙1 NULL);
uart2_finish_transfers ();
}
我也尝试激活流量控制,但那也不工作,所以我再次禁用它。看到我遗漏了什么或做对了什么吗?
嗨Krixen,
是否能够看到数据打印在UART(正常UART没有IrDa)与您正在使用的fw ?
由于MT_dialog
是的,我能够看到正常的UART,只有当我切换这两个寄存器时,我看不到任何东西。
附注:我是否需要流控制?
你好,
再来看看我们能不能解决这个问题。谢谢你!
嗨Krixen,
否您不需要使用流量控制,只需使用相应的位设置的UART的常规设置(以上面提到的原因为低波特率),以使IRDA和相应的引脚能够成为适当的功能。如果您这样做并使用打印功能,请使用示波器看到TX线上的脉冲(不是噪声),如果不是,那么我假设您的设置应该存在电气问题。
由于MT_dialog