我对 USART2 有点失望,它连接到UART9 TX9-RX2 和 TX2-RX9。因此,从 TX9 发送到 RX2 一切正常,但反之,接收缓冲区内的第一个字节 = 254d。huart2 和 huart9 完全等同于默认的 CubeIDE 配置异步初始化。
- huart9.Instance = UART9;
- huart9.Init.BaudRate = 115200;
- huart9.Init.WordLength = UART_WORDLENGTH_8B;
- huart9.Init.StopBits = UART_STOPBITS_1;
- huart9.Init.Parity = UART_PARITY_NONE;
- huart9.Init.Mode = UART_MODE_TX_RX;
- huart9.Init.HwFlowCtl = UART_HWCONTROL_NONE;
- huart9.Init.OverSampling = UART_OVERSAMPLING_16;
- huart9.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
- huart9.Init.ClockPrescaler = UART_PRESCALER_DIV1;
- huart9.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_TXINVERT_INIT;
在 Init 之后,我在 main() 例程中执行此操作:
- uint8_t cnt = 0u;
- uint8_t strU9Sent[6u];
- uint8_t strU2Received[6u];
- sprintf((char *)strU9Sent, "hello", cnt);
- HAL_UART_Receive_IT(&huart2, strU2Received, sizeof(strU2Received));
- HAL_UART_Transmit(&huart9 , strU9Sent, sizeof(strU9Sent), 100u);
执行 HAL_UART_Receive_IT() 后,可以在第 6 行(上面的代码)设置断点,strU2Received 中立即有一个字符。阻塞 HAL_UART_Receive() 也会造成该问题。在示波器上没有字符或可见的东西。
为什么?
这可以用 CubeIDE 10.0.1 生成的代码重现。