ST意法半导体
直播中

陈飞

7年用户 1179经验值
私信 关注
[问答]

STM32H735 UART2将第一个字节放入不存在的缓冲区中会有什么后果

我对 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 生成的代码重现。



回帖(1)

王颖

2022-12-5 15:27:26
> 查看UART开启瞬间的RX线。
+1
您可能看不到任何噪音,但在启用 Rx 之后 *从 0 到 1 的转换,仅此而已。在启用 UART_Rx 之前,该线路需要处于高电平。在启用 UART_Rx 之前使用内部或外部上拉电阻。在奇怪的 Cube/HAL 世界中,UART 的 GPIO 可能设置在某些 MSP 中,但也许您只是使用一些点击,我不使用 Cube。给定容性负载,内部上拉可能导致转换速度不够快。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分