公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
lock attach
Attachments are accessible only for community members.
Translation_Bot
Community Manager
Community Manager
Community Manager

你好,

 

我打开这个问题是为了解决之前在这里解释过的问题:

https://community.infineon.com/t5/XMC/XMC-usic-end-of-transmission/m-p/670732#M14418

 

根据要求,我附上我正在使用的项目。

最诚挚的问候,

着陆器

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/XMC-usic-end-of-transmission/td-p/743200

0 点赞
10 回复数
Translation_Bot
Community Manager
Community Manager
Community Manager

@Lander

感谢您分享这个项目。

请稍等片刻,我将尝试在我这边重新解决这个问题。

有什么具体步骤可以让我重新解决这个问题吗?

最好的问候
Pradeep。

 

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/XMC-usic-end-of-transmission/m-p/743938

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

@Lander

请尝试以下两点,并告诉我是否有效。

请尝试以下两种解决方案。

1) 请添加以下代码并尝试是否有效。

int count1 =0 ;
while((XMC_UART_CH_GetStatusFlag(&UART_CONSOLE)& XMC_UART_CH_STATUS_FLAG_TRANSMIT_SHIFT_INDICATION )== 1)
{
count1++;
if(count1>=8)
{

for(uint32_t i=0 ; i<0xFFFF;i++)
{
__NOP();
__NOP();
}
break;
}

}

2)也请尝试这个解决方案

int count2 = 0;
while((XMC_UART_CH_GetStatusFlag(&UART_CONSOLE)& XMC_UART_CH_STATUS_FLAG_TRANSMITTER_FRAME_FINISHED )== 1)
{
count2++;
if(count2>=8)
{

break;
}

}

请注意,要在读取数据前清除标记,请在上述代码中添加此项。


谨致
Pradeep。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/XMC/XMC-usic-end-of-transmission/m-p/745356

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

@Lander

有什么改进吗?

如果问题仍然存在,请告诉我,我将在我这边重新解决这个问题。

最好的问候
Pradeep。

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager
你好@Pradeep_PN
 
我尝试了您的解决方案,但结果是一样的,在 UART_KEYPAD_DOUT 引脚设置为接收模式后发送的最后一个字节。
 
代码如下
 
DIGITAL_IO_SetOutputHigh(&UART_KEYPAD_DOUT);
sendTXbuffer[0] = 0x55;
sendTXbuffer[1] = 0x55;
sendTXbuffer[2] = 0x55;
sendTXbuffer[3] = 0x55;
sendTXbuffer[4] = 0x55;
sendTXbuffer[5] = 0x55;
sendTXbuffer[6] = 0x55;
sendTXbuffer[7] = 0x55;
UART_Transmit(&UART_KEYPAD,sendTXbuffer,8);
 
ulTaskNotifyTake(pdTRUE, 200);
 
while((XMC_UART_CH_GetStatusFlag(UART_KEYPAD.channel)& XMC_UART_CH_STATUS_FLAG_TRANSMIT_SHIFT_INDICATION )== 1)
{
count1++;
if(count1>=8)
{
 
for(uint32_t i=0 ;i<0xFFFF;i++)
{
__NOP();
__NOP();
}
休息;
}
 
}
 
while((XMC_UART_CH_GetStatusFlag(UART_KEYPAD.channel)& XMC_UART_CH_STATUS_FLAG_TRANSMITTER_FRAME_FINISHED )== 1)
{
count2++;
if(count2>=8)
{
 
休息;
}
 
}
// 将输出设置为接收模式
DIGITAL_IO_SetOutputLow(&UART_KEYPAD_DOUT);

 

结果是这样的

Lander_0-1714028661268.png

 

最诚挚的问候,

着陆器

 

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

@Lander

要重现您的问题,我需要进行哪些硬件设置?

最好的问候
Pradeep。

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

你好@Pradeep_PN

我使用" UART_KEYPAD" UART 线路通过 RS485 协议进行通信。该协议需要一个流量控制位UART_KEYPAD_DOUT。如果将该引脚设置为低电平,RS485 端口将设置为接收模式。

 

Lander_2-1714032655217.png

如果不使用 RS485 Tranceiver,则可以使用 UART_KEYPDA_DOUT 引脚作为 TX 线路的下拉电阻来模拟相同的结果。 这样,如果 UART_KEYPAD_DOUT 引脚设置为高电平,传输就会正常,但当该引脚设置为低电平时,下拉将把 TX 引脚设置为 "0",从而模拟错误。

 

我希望这个例子能得到很好的解释,但正确的方法应该是使用 UART 转 RS485 收发器。

 

最诚挚的问候,

着陆器

 

 

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

@Lander

我有一个 RS 485 收发器模块,但问题是 DE(驱动器输出使能)已经在内部上拉,而且该引脚没有在模块上填充,因此我无法从外部对其进行控制。

我用该模块测试了您的代码,效果与预期相符。

请参考下图。

Pradeep_PN_0-1714115985184.png

就你的情况而言,我认为问题也出在将 DOUT 引脚设置为低电平时。

因此,请在发送后和设置为接收模式前增加一个较大的延迟,看看是否有效。

我将尝试订购一个装有 DE 的模块,并在我这里进行测试。

最好的问候
Pradeep。

 

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

@Lander

您能否停止将 DE 更改为高阻抗,即在传输后不要将收发器更改为接收模式,并查看数据传输是否符合预期?

您提到" UART_KEYPAD_DOUT 引脚设置为接收模式后发送的最后一个字节" 这是否意味着只有在收发器设置为接收模式后才发送最后一个字节?

从我之前的帖子中可以看出,我这边的工作符合预期。

最好的问候
Pradeep。

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

你好,

我进行了您提出的测试,传输结果与预期相符。 变速器正常工作。

"这是否意味着只有将收发器设置为接收模式后才会传输最后一个字节?"

否,传输配置为在传输完成时产生中断。 在该中断中,会向主线程发送通知,并在该线程中将收发器设置为接收模式。

但结果(如附图所示)表明,中断是在发送完成之前产生的。

 

最好的问候

 

 

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

@Lander

添加以下代码,看看是否有效。

while(UART_IsTxBusy(&UART_0));
 
我相信这应该能解决您的问题,而无需增加大量延迟。
 
 
最好的问候
Pradeep。

0 点赞