2381127_ja-JP

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

2381127_ja-JP

2381127_ja-JP

s32k142 LPUART0 シングルワイヤモードではデータを送信できません

私はLPUART0をマルチプレックスUARTモードで使用しており、外部の10KΩ抵抗で3.3Vまでプルアップしています。シングルワイヤUARTとして設定した後、データを送信できなくなりました。この問題の解決にご協力ください。

void LPUART0_init(void)
{
PCC->PCCn[PCC_LPUART0_INDEX] &= ~PCC_PCCn_CGC_MASK;
  
PCC->PCCn[PCC_LPUART0_INDEX] |= PCC_PCCn_PCS(0b010) | PCC_PCCn_CGC_MASK;
 
LPUART0->BAUD = LPUART_BAUD_OSR(15) | LPUART_BAUD_SBR(52);
uint32_t ctrl_value = 0;
ctrl_value |= LPUART_CTRL_LOOPS_MASK; // LOOPS = 1
ctrl_value |= LPUART_CTRL_RSRC_MASK; // Rsrc=1
ctrl_value |= LPUART_CTRL_TE_MASK; // TE = 1
ctrl_value |= LPUART_CTRL_RE_MASK; // RE = 1
ctrl_value |= LPUART_CTRL_RIE_MASK; // RIE = 1(必要に応じて)
 
LPUART0->CTRL = ctrl_value; // 一次性赋值
 
}
 
PB1の構成:
PORTB->PCR[1] = PORT_PCR_MUX(2);
 
送信時、先にTXDIR位置を設定し、送信完了再位置:
LPUART0->CTRL |= LPUART_CTRL_TXDIR_MASK;
データを送信する
LPUART0->CTRL &= ~LPUART_CTRL_TXDIR_MASK;
Re: s32k142 LPUART0 singleWire mode cannot send data

I2Cバス波形をキャプチャし、プルアップ抵抗を4.7Kに変更すると、さらに改善される可能性があります。

Re: s32k142 LPUART0 singleWire mode cannot send data

こんにちは@sssPPP

あなたが共有してくれたコードによると、LOOPSビットとRSRCビットの設定は正しいようです。

LPUART0->CTRL |= LPUART_CTRL_LOOPS_MASK; /* Enable loop/single-wire mode */
LPUART0->CTRL |= LPUART_CTRL_RSRC_MASK; /* Select single-wire mode */

ただし、これらのビットを変更する前に、トランスミッタとレシーバの両方が無効になっていることを確認することが重要です。

LPUART0->CTRL &= ~(LPUART_CTRL_TE_MASK | LPUART_CTRL_RE_MASK);

次に、送信を開始する前に、送信方向を設定し、トランスミッタを有効にする必要があります。

LPUART0->CTRL |= LPUART_CTRL_TXDIR_MASK; /* Set transmit direction */
LPUART0->CTRL |= LPUART_CTRL_TE_MASK; /* Enable transmitter */

最後に、DATAレジスタにデータを書き込んだ後、送信完了フラグ(TC)が点灯するまで待ってから、送信データレジスタ空フラグ(TDRE)だけでなく、ピンを受信モードに戻してください。これは、バイトが完全に送信される前にLPUARTが単線ラインを解放するのを防ぐためです。

この件については、 S32K344 シングルワイヤ UART モードのスレッドでも議論されており、適切な送信を保証するためには TXDIR 信号の正しいタイミングが重要です。


BR、VaneB

标记 (1)
无评分
版本历史
最后更新:
‎06-16-2026 03:34 AM
更新人: