本帖最后由 陳聖文 于 2018-4-13 09:35 编辑
未命名.png (95.63 KB, 下载次数: 0)
下载附件
2018-4-13 09:23 上传
小弟我正在研究STM32F030R8的USART
用STM32cubeMX輸出的範例
剛剛看到 oversampling 有一絲不解,過採樣是啥?
咱認為是一個位元內同時取樣多次,可以提升精準度
只是...實在看不懂阿@@
還請各位大大幫忙解惑
另外想問下...是不是和OneBitSampling有關?
-
- huart2.Instance = USART2;
- huart2.Init.BaudRate = 115200;//鮑率
- huart2.Init.WordLength = UART_WORDLENGTH_8B;//位元數,這裡選取8位元
- huart2.Init.StopBits = UART_STOPBITS_1;//停止位元,這裡選擇1個停止位元
- huart2.Init.Parity = UART_PARITY_NONE;//校準位元,這裡選擇不校準
- huart2.Init.Mode = UART_MODE_TX_RX;//模式,這裡選擇TXRX,也就是雙向模式
- huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;//是否啟用量控制,就是RS232的交握協定用的那個,這裡選擇不用
- huart2.Init.OverSampling = UART_OVERSAMPLING_16;//過採樣設定,一個位元內採樣幾次,以提高精度,因為有可能一個bit的理論時間內,實際出現了短暫的異常電位,這可能是時鐘容差或是電容效應
- huart2.Init.OneBitSampling = UART_ONEBIT_SAMPLING_DISABLED ;
- huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
- HAL_UART_Init(&huart2);
复制代码
大家混淆了 oversampling...
Oversampling 是指:採樣某一頻率的信號要用更高頻率的時脈來採樣,譬如採樣 1Mbps 的串口信號通常要用至少 4、5 倍的頻率譬如 5MHz 的時脈來採樣。
而圖片中是 16 倍於目標信號的時脈來採樣。
之所以用這麼高倍數,是爲了可以在一個 bit 中間位置採樣多次,因爲串口通訊最小單位就是 byte, 而大多時候人們又不願意使用奇偶校驗,所以爲了防止干擾出錯,連續檢測 3 次數據全部相同才予以採納。是否連續檢測 3 次用戶可以選擇使用,對應 OneBitSampling:
- Control register 3( USART_CR3)
- ……
- (1) ONEBIT: One sample bit method enable
- This bit allows the user to select the sample method. When the one sample bit method is
- selected the noise detection flag (NF) is disabled.
- 0: Three sample bit method
- 1: One sample bit method
复制代码如果關閉連續 3 次採樣的功能,只採樣單次,那麼就可以降低 oversampling 的倍數,反過來說是可以支持更高的 baud rate.
譬如用戶的協議已經自己添加了 CRC 校驗,譬如 MODBUS 或者 CDBUS,那麼就沒太大必要使用連續 3 次採樣來檢驗錯誤。
一周热门 更多>