2157956_ja-JP

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

2157956_ja-JP

2157956_ja-JP

S32K3 を初期化するときに、MCU_SetMode(0) を呼び出した後に Uart_Init を呼び出すと、HardFault がトリガーされます。

S32K312の電源が投入され初期化されると、まずMcu_SetMode(0)を呼び出し、次にUart_Initを呼び出してUart0を初期化します。この時点ではUart0レジスタ(IP_LPUART_0:0x40328000u)は読み取りも書き込みもできないため、HardFault状態になります。

呼び出しスタックは次のとおりです。
Uart_Init(NULL_PTR);
Uart_Ipw_Init(チャネル、Uart_apConfig[CoreId]->Configs[u8ChLoop]->UartChannelConfig);
Lpuart_Uart_Ip_Init(HwUnit、Config->UserConfig->LpuartUserConfig);
Lpuart_Uart_Ip_SetOversamplingRatio(Base、(uint32)UserConfig->BaudOverSamplingRatio -1U);
Base->BAUD = (Base->BAUD & ~LPUART_BAUD_OSR_MASK) | LPUART_BAUD_OSR(OverSamplingRatio);

Mcu_SetMode(0)をコメントアウトすると、Uart0を正常に初期化でき、システムは正常に動作します。

公式の Uart デモである Uart_Example_S32K312 と比較したところ、Uart3 が使用されている一方で、Uart0 も読み取りおよび書き込みが不可能な状態であることがわかりました。
MCU_SetMode(0) によって Uart0 のレジスタがアクセス不能になるのはなぜですか?
Mcu_SetMode(0)をコメントアウトするとシステムの動作に影響がありますか?


Re: S32K3,初始化时调用Mcu_SetMode(0)后,再调用Uart_Init就会进HardFault

私のシナリオでは、システムは電源投入時に初期化され、スリープモードではなくRUNモードに入り、スタンバイモードに入ります。Mcu_SetMode(0)は0 = McuModeSettingConf_Runに設定されています。

LPUARTのPeripheral Clock Enableオプションを有効にしていない場合、Mcu_SetMode(0)行をコメントアウトするだけでUart_InitでHardFaultが発生しません。なぜでしょうか?

Re: S32K3,初始化时调用Mcu_SetMode(0)后,再调用Uart_Init就会进HardFault

Mcu_SetMode は電源モードを切り替えるために使用されます。通常、低電力モードに入る前に呼び出され、低電力モードで不要な周辺機器をオフにします。

How Mcu_SetMode works when entering Low Power mode.png

S32K3 低消費電力管理 AN とデモ
[RTD400 & 500 MCAL & IP] S32K3 低消費電力管理 AN とデモ

これらのプロジェクトには、さまざまな電源モード構成の例が含まれています。

Re: S32K3,初始化时调用Mcu_SetMode(0)后,再调用Uart_Init就会进HardFault

こんにちは、ロビン。

RTDはS32DS3.4 + RTDS32K3XX 2.0.0を使用しています。問題はMcuPeripheral -> Peripheral Clock Enableを有効にしていなかったことでしたが、有効にすることで問題は解決しました。

Mcu_SetMode(0)をコメントアウトするとなぜこの問題は解決するのでしょうか?Uartも正常に動作します。

Mcu_SetMode(0)をコメントアウトするとシステム動作に影響しますか? 正常に動作するようです。

Re: S32K3,初始化时调用Mcu_SetMode(0)后,再调用Uart_Init就会进HardFault

こんにちは

どのバージョンの S32K3 RTD を使用していますか? S32K3 RTD 3.0.x 以降のバージョンには、S32K312 の例は含まれません。

S32K3 RTD 6.00の例Uart_Example_S32K344を確認したところ、Mcu_SetMode(0)の後にUart_Initが呼び出されています。

    /* Initialize the Mcu driver */
    Mcu_Init(NULL_PTR);

    Mcu_InitClock(0);
#if (MCU_NO_PLL == STD_OFF)
    while ( MCU_PLL_LOCKED != Mcu_GetPllStatus() )
    {
        /* Busy wait until the System PLL is locked */
    }

    Mcu_DistributePllClock();
#endif
    Mcu_SetMode(0);
    /* Initialize Mcl module */
    Mcl_Init(NULL_PTR);

    /* Initialize all pins using the Port driver */
    Port_Init(NULL_PTR);

    /* Initialize IRQs */
    Platform_Init(NULL_PTR);

    /* Initializes an UART driver*/
    Uart_Init(NULL_PTR);

S32K312EVB-Q172 UARTの A2 の応答セクションでLPUART0が有効になっているかどうかを確認してください。例が機能していません: McuPeripheral -> Peripheral Clock Enable。

よろしくお願いします、
ロビン
---------------------------------------------------------------------------------
注記:
- この投稿があなたの質問への回答である場合は、「解決策として承認」ボタンをクリックしてください。ありがとう!

- スレッドは最後の投稿から7週間フォローされます。それ以降の返信は無視されます。
後ほど関連する質問がある場合は、新しいスレッドを開いて、閉じたスレッドを参照してください。
---------------------------------------------------------------------------------

标记 (1)
无评分
版本历史
最后更新:
‎11-21-2025 12:33 AM
更新人: