2017-11-30 50 views
0

MCUプログラミングの初心者です。私は、HALを使用してUARTループバック(ミラー)をテストしたいと思います。 IARプロジェクトは、CubeMXによってSTM32L071RZT6用に生成されました。このコードは、メインの永遠のループである:STM32L0にHALを使用したUARTループバックテスト

HAL_UART_Transmit(&huart2, str1, 5, 1000); HAL_UART_Receive(&huart2, str2, 5, 1000);

私はSTR2(ヌルで終了する文字列)に充填のみ第一の要素を取得します。どうすれば修正できますか?

/* USART2 init function */ 
static void MX_USART2_UART_Init(void) 
{ 

    huart2.Instance = USART2; 
    huart2.Init.BaudRate = 115200; 
    huart2.Init.WordLength = UART_WORDLENGTH_8B; 
    huart2.Init.StopBits = UART_STOPBITS_1; 
    huart2.Init.Parity = UART_PARITY_NONE; 
    huart2.Init.Mode = UART_MODE_TX_RX; 
    huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; 
    huart2.Init.OverSampling = UART_OVERSAMPLING_16; 
    huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE; 
    huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT; 
    if (HAL_UART_Init(&huart2) != HAL_OK) 
    { 
    _Error_Handler(__FILE__, __LINE__); 
    } 

} 
+0

完全な例は次のとおりです。https://stackoverflow.com/a/43411114/3820025 –

答えて

2

&を同時に受信することはできません。 HAL_UART_Transmitはブロッキング関数なので、関数が返すとデータが送信されます。 HAL_UART_Receiveに電話すると、データが受信されました。

HAL_UART_Receive_IT(&huart2, str2, 5); 
HAL_UART_Transmit(&huart2, str1, 5, 1000); 

割り込みやDMAによって実行できますが、送信する前に受信を開始する必要があります。

関連する問題