ad的本身速率最大可以達到1m,去取樣乙個1khz的正弦訊號,乙個週期內按說可以採集1000個點,但是你去採集然後採集乙個輸出乙個你就會發現乙個週期內才取樣了10個點,這是為什麼呢?
是因為你的串列埠太慢了,我們知道串列埠本身是有乙個波特率屬性的,當你把波特率慢慢調大的時候,你會發現還是那個ad速率,但是乙個週期內取樣的點變多了,也就是說並不是ad採集的慢,而是我ad採集了你串列埠呢並不能及時傳送,那就是木桶原理了,乙個團隊的工作速率不是看最快的那個人,而是看最慢的那個人!所以我們怎麼樣才能獲得真實的取樣值呢?
首先不能ad取樣一次串列埠輸出一次,那也即是說我要一下子採集很多很多個點然後一起通過串列埠輸出出來,有三種方式可供選擇:
1、開啟ad中斷,在中斷中把本次取樣值存到陣列裡,當取樣次數達到所需要時,在通過串列埠一次性輸出。
2、開啟定時器中斷,ad設定為連續轉換,讓ad以他自己的1mhz去取樣,然後我控制定時器的頻率,每次定時器進入中斷我就把目前正在進行的一次ad取樣的值取出來放入陣列,這樣也能靈活的獲取到所需要的值,當然這種方法的優點在於可以降低ad取樣的最小速率(fft變換時,我們要讓ad速率盡可能的小)缺點就是不能把所有ad取樣的值全部獲取到。
3、開啟dma中斷,把每次ad取樣的值通過dma存放到陣列中,然後設定dma的快取大小,當存放的資料達到快取大小時進入dma中斷,一次性輸出所有ad取樣資料。
歡迎各位大佬前來指正!
Stm32定時器中斷觸發AD取樣
stm32的adc有dma功能這都毋庸置疑,也是我們用的最多的!然而,如果我們要對乙個訊號 比如脈搏訊號 進行定時取樣 也就是隔一段時間,比如說2ms 有三種方法 1 使用定時器中斷每隔一定時間進行adc轉換,這樣每次都必須讀adc的資料暫存器,非常浪費時間!2 把adc設定成連續轉換模式,同時對應...
STM32 的串列埠
一 串列埠使用 原則 盡量中斷中不要有延時 比如自定義delay 和自定義printf串列埠列印,明顯找事啊這麼慢能不發生溢位error嘛 接收和傳送盡量分開處理 1.串列埠傳送資料丟失 1 通常是因為傳送之前未檢測tc狀態位之前是否處於傳送完成標誌導致,關於stm32之 的測試程式來講會導致第乙個...
STM32之串列埠
名稱 stm32之串列埠 說明 對於stm32的串列埠通訊來說,從外部看,和c51差不多。從內部看,啊。我還不了解。從使用上說,也是需要先配置usart,然後通過終端或者輪詢的方式接受或者輸出資料。由於有了韌體庫函式的幫助,stm32的串列埠配置起來比c51還要方便不少。本實驗完成的是輸入輸出重定向...