請問各位有關於STM32 的 USART 的 oversampling 功能及應用

2020-01-10 19:39发布

本帖最后由 陳聖文 于 2018-4-13 09:35 编辑

未命名.png (95.63 KB, 下载次数: 0) 下载附件 2018-4-13 09:23 上传

小弟我正在研究STM32F030R8的USART
用STM32cubeMX輸出的範例
剛剛看到 oversampling 有一絲不解,過採樣是啥?
咱認為是一個位元內同時取樣多次,可以提升精準度
只是...實在看不懂阿@@
還請各位大大幫忙解惑

另外想問下...是不是和OneBitSampling有關?


  1.   huart2.Instance = USART2;
  2.   huart2.Init.BaudRate = 115200;//鮑率
  3.   huart2.Init.WordLength = UART_WORDLENGTH_8B;//位元數,這裡選取8位元
  4.   huart2.Init.StopBits = UART_STOPBITS_1;//停止位元,這裡選擇1個停止位元
  5.   huart2.Init.Parity = UART_PARITY_NONE;//校準位元,這裡選擇不校準
  6.   huart2.Init.Mode = UART_MODE_TX_RX;//模式,這裡選擇TXRX,也就是雙向模式
  7.   huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;//是否啟用量控制,就是RS232的交握協定用的那個,這裡選擇不用
  8.   huart2.Init.OverSampling = UART_OVERSAMPLING_16;//過採樣設定,一個位元內採樣幾次,以提高精度,因為有可能一個bit的理論時間內,實際出現了短暫的異常電位,這可能是時鐘容差或是電容效應
  9.   huart2.Init.OneBitSampling = UART_ONEBIT_SAMPLING_DISABLED ;
  10.   huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  11.   HAL_UART_Init(&huart2);
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
5条回答
dukelec
2020-01-11 07:41
本帖最后由 dukelec 于 2018-6-13 00:32 编辑

大家混淆了 oversampling...

Oversampling 是指:採樣某一頻率的信號要用更高頻率的時脈來採樣,譬如採樣 1Mbps 的串口信號通常要用至少 4、5 倍的頻率譬如 5MHz 的時脈來採樣。
而圖片中是 16 倍於目標信號的時脈來採樣。

之所以用這麼高倍數,是爲了可以在一個 bit 中間位置採樣多次,因爲串口通訊最小單位就是 byte, 而大多時候人們又不願意使用奇偶校驗,所以爲了防止干擾出錯,連續檢測 3 次數據全部相同才予以採納。是否連續檢測 3 次用戶可以選擇使用,對應 OneBitSampling:

  1. Control register 3( USART_CR3)
  2. ……

  3. (1) ONEBIT: One sample bit method enable
  4. This bit allows the user to select the sample method. When the one sample bit method is
  5. selected the noise detection flag (NF) is disabled.
  6. 0: Three sample bit method
  7. 1: One sample bit method
复制代码

如果關閉連續 3 次採樣的功能,只採樣單次,那麼就可以降低 oversampling 的倍數,反過來說是可以支持更高的 baud rate.
譬如用戶的協議已經自己添加了 CRC 校驗,譬如 MODBUS 或者 CDBUS,那麼就沒太大必要使用連續 3 次採樣來檢驗錯誤。

一周热门 更多>