TrueStudioでNUCLEO-F746ZGのUART3を使おうとしています。USART3 を ST-LINK に接続して仮想 COM ポートをサポートしましたが、現在は動作しません。私はオシロスコープを持っていないので、リアルタームのようにハイパーターミナルを介して印刷メッセージを見たいと思っています。
この問題を検索したところ、多くのユーザーが苦労していることがわかりました。
最後に、次の Web サイトから STM32CubMX にある UART の例のソリューションを見つけました。syscall.c をコピーすると、UART の例で問題なく動作します。
https://community.st.com/s/question/0D50X00009XkXDcSAN/problem-with-uart-example-on-nucleof746zg
以下は、STM32CubeMX からの UART サンプル コードです。ディレクトリ: STM32Cube_FW_F7_V1.15.0\Projects\STM32F746ZG-Nucleo\Examples\UART\UART_Printf.
int main(void)
{
.....................
UartHandle.Instance = USARTx;
UartHandle.Init.BaudRate = 9600;
UartHandle.Init.WordLength = UART_WORDLENGTH_8B;
UartHandle.Init.StopBits = UART_STOPBITS_1;
UartHandle.Init.Parity = UART_PARITY_NONE;
UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
UartHandle.Init.Mode = UART_MODE_TX_RX;
UartHandle.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&UartHandle) != HAL_OK)
{
Error_Handler();
}
}
ただし、STM32CubeMX を使用してコードを生成しました。USART3 のみを使用し、syscall.c があることを確認しました。それにもかかわらず、私は印刷メッセージを見ることができません。誰かがこの問題を解決した場合は、共有していただければ幸いです。
以下は、STM32CubeMX を使用して生成したコードです。
int main(void)
{
HAL_Init();
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART3_UART_Init();
/* USER CODE BEGIN 2 */
...
}
static void MX_USART3_UART_Init(void)
{
huart3.Instance = USART3;
huart3.Init.BaudRate = 9600;
huart3.Init.WordLength = UART_WORDLENGTH_8B;
huart3.Init.StopBits = UART_STOPBITS_1;
huart3.Init.Parity = UART_PARITY_NONE;
huart3.Init.Mode = UART_MODE_TX_RX;
huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart3.Init.OverSampling = UART_OVERSAMPLING_16;
huart3.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
huart3.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
if (HAL_UART_Init(&huart3) != HAL_OK)
{
Error_Handler();
}
}