ST意法半导体
直播中

李艺银

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

使用Uart时在调试模式下出现字符差异和噪声问题要如何处理?

我正在使用 STM32F072、ADC DMA、USB、定时器和 Uart 创建应用程序。
最后一个用于与 PC 通信,但我验证了一个奇怪的行为。
首先是一般信息:
  • 使用 STM32cubeMx 生成此软件。
  • 使用 IDE openstm32
  • 优先级 USB = 0
  • 优先级 tiM3 = 1
  • 优先级 DMA = 2
  • 优先级 UART = 3
当我调试用于检查 uart 外围设备的应用程序时,出现了奇怪的行为。
我将字符从 MCU 发送到 PC,当这些字符到达 minicom 时看到字符差异。
当 PC 向 MCU 发送字符时,MCU 因噪声而出错。
这发生在调试模式下。
在运行模式(相同的配置调试)下,此行为尚未出现。
你能解释一下我错过了什么吗?









回帖(1)

杨福林

2023-1-13 11:03:02
我解决了这个问题。
我发现问题出在 USART 初始化参数和时钟源中。
时钟源变化:
有问题之前
PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1;
没有问题后
PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_HSI;
USART 初始化参数更改:
问题之前:
huart1.Instance = USART1;
huart1.Init.BaudRate = 38400;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
没有问题后:
huart1.Instance = USART1;
huart1.Init.BaudRate = 38400;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_RXOVERRUNDISABLE_INIT|UART_ADVFEATURE_DMADISABLEONERROR_INIT;
huart1.AdvancedInit.OverrunDisable = UART_ADVFEATURE_OVERRUN_DISABLE;
huart1.AdvancedInit.DMADisableonRxError = UART_ADVFEATURE_DMA_DISABLEONRXERROR;
现在在调试中,我可以在 PC 上看到正确的字节传输和接收,并在调试中观察实时 IDE 表达式。
举报

更多回帖

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