STM32串列埠接收粉塵感測器資料

2021-07-23 12:23:18 字數 1091 閱讀 5191

本文章主要記錄stm32實現對粉塵感測器的資料採集及簡單處理。

主要設計思路:

1、串列埠初始化,包括gpio,外設時鐘,nvic等配置;

2、串列埠中斷處理函式編寫,即通過接收中斷獲取資料並且儲存到陣列,同時注意判斷相關資料位;

3、傳送資料,使用到了printf函式,需要重定向;

4、主程式初始化。

主要函式編寫:

1、串列埠初始化,pa.2->usart2_tx,pa.3->usart2_rx,pa.9->usart1_tx, pa.10->usart1_rx,下面的程式是把串列埠1也配置了的,主要是熟悉一下串列埠1和串列埠2配置的區別,串列埠2是apb1上的,頻率最大為36mhz,而串列埠1在apb2上,頻率最大72mhz.

void uart_init(u32 bound)   //初始化串列埠1和串列埠2,函式的引數是波特率

2、串列埠中斷處理函式

void usart2_irqhandler(void)                    //串列埠2中斷服務程式

if(start == 1)

}

}}

3、串列埠重定向

/* 重寫fputc()這個函式,使得printf()函式重定向到串列埠中,當聯結器檢查到使用者編寫了和c庫函式相同名字的函式時優先

採用使用者編寫的函式

下面這個函式就重定向c庫函式printf到usart2串列埠*/

int fputc(int ch, file *f)

開發板的串列埠2 rx2接收感測器傳送的資料,接收之後經過晶元內部處理資料,得到想要的pm2.5數值,然後通過串列埠2 的tx2 用printf列印出來,所以這裡用乙個串列埠來實現是不會衝突的,串列埠通訊只需要兩條或三條線即可完成的,分別是gnd&tx(只向一端傳送)、gnd&rx(只一端接收)、gnd&rx&tx(雙機通訊,即要傳送資料又要接收資料時要用3條線連線)

4、主函式

int main(void)

}

STM32串列埠接收策略

如果我們需要接收乙個序列協議,怎麼做呢?先放到緩衝區然後再檢查標誌位是一種思路。道理簡單,關鍵要看怎麼設計。這裡介紹的方法是巧妙利用定時器,與串列埠中斷進行耦合,得到一種魯棒的接收方法。具體 開啟定時器與串列埠中斷 首先用示波器檢視完整幀所需要的時間,並且設定為timmax。定時器以適當的中斷頻率開...

STM32串列埠接收中斷BUG

除錯串列埠時,發現串列埠會出現頻繁跳中斷,導致無法執行主迴圈的問題!除錯發現是串列埠中斷硬體bug 1.usart itconfig usart 1,usart it rxne,enable 使能了接收中斷,那麼ore中斷也同時被開啟了。2.ore中斷只能使用usart getflagstatus ...

STM32與感測器串列埠通訊問題

stm32f407zgt6使用串列埠通訊傳送指令給感測器,讓感測器返回測得的資料。大家看我這個程式,在main函式前面我定義了乙個read instruction陣列,存放讀取感測器的指令,在while迴圈中有乙個按鍵檢測,當按下key0的時候,微控制器傳送這個指令給感測器,理論上感測器接收到指令會...