STM32 MCU

UART傳輸使用STM32 HAL實作TX/RX(STM32F401RE)

前言 因這邊需要寫一個UI介面去操控STM32 進而控制sensor,因此這邊開始去了解STM32UART傳輸 但本身也不是很喜歡使用UART去控制元件,原因在於傳輸不好寫,寫不好容易有data last或造成MCU流程卡死問題 因此這邊傳輸長度是已知,接收長度也是已知的狀態下去Coding UART傳輸,針對不定長度接收會放下最底下欄位供參考 環境 STM32CubeIDE Nucleo F401RE Board STM32CubeMX 設定步驟 STM32CUBEMX設定UART,關鍵是要打開UART中斷,以及打開TX/RX的DMA Enable UART IRQ Enable UART DMA channels PS:這邊會選擇DMA開啟的原因為避免Data lost與程式因為中斷而卡死,因如果單用IT中斷來說在中段接收時候如果程式運行太快 會導致資料lost,但DMA的缺點為你必須知道資料長度不然會無法順利執行下一步(因這邊UI與MCU撰寫都是由我編輯因此長度都是已知不會有例外) 涵式庫差異 傳輸 接收 輪詢(Polling):就是阻塞式詢問,CPU都不幹別的事了,就整天在那邊問你說:「現在有沒有要傳資料啊?」沒有要傳我就繼續等,總是在那邊詢問、等待。這種方最土法煉鋼、這就是輪詢的缺點,效率太低,占用cpu時間。 中斷(Interrupt):沒有收到數據時,執行其他的程序,收到數據後,進入中斷處理通訊。與輪詢相對來說,不用循環查詢狀態暫存器,可以有更多的時間運行其他程序。 DMA(Direct Memory Access):直接記憶體存取。串列數據的接收與發送由DMA處理,DMA說:「我把接收、傳送的資料放在記憶體的某個位置,你如果需要就自己去那個位置提取」。DMA也可以分為輪詢與中斷方式。資料的發送與接收都不用CPU干預,通過DMA進行。 CPU有更多的時間運行其他程序。 Coding sample 這邊照上面步驟CubeMX在宣告部分會多這3個 初始化 這邊選用的接收為HAL_UARTEx_ReceiveToIdle_DMA(&huart2, &uRx_Data1,14),主要原因為HAL_UARTEx_ReceiveToIdle_DMA,算是裡面比較進階的函數。他會在收滿資料,或是UART IDLE一個字元以後呼叫callback 這邊&uRx_Data1是宣告unsigned char uRx_Data1[14];去接收資料,因這邊傳輸近來資料為ASCII 非int 宣告成int接收部分需要在自己轉換 PS:轉換再UI端實現轉換或在STM32 MCU內都可以 這邊因為已知傳輸data格式為:x,x,xx……中間以逗號做為區隔分號為最後一碼確認結束且第一碼是分辨哪種模式 因此這邊接收到資料會先做第一碼判別,確認模式 字串連結 這邊因為使用”,”做為每個數字分隔”;”作為最後字元接收,過程中都是數字。這邊要注意因為進來的DATA為ASCII所以一定要扣除 ‘0’ 去使其轉變成INT格式 這邊輸出部分因為寫入下列範例printf資料UI部分就可以接收到了因此這邊沒再額外撰寫 參考資料 […]

UART傳輸使用STM32 HAL實作TX/RX(STM32F401RE) Read More »

SPI introduction and Coding on STM32

目錄 前言 一、SPI協議簡介 SPI物理層 SPI協議層 一、基本通訊程序 2. 通訊的攔截和停止信號 3.資料有效性 4. CPOL/CPHA 及通訊模式 二、STM32cubeMX設定 三、STM32 HAL庫中的SPI 1.SPI初始化結構體 一、SPI協議簡介 SPI 協議是由摩托羅拉公司提出的通訊協議(Serial Peripheral Interface),即通訊外圍設備面是全高速雙工的通訊協議,它被廣泛地在通訊設備與MCU之間使用,它被廣泛地在ADC、LCD等設備與MCU之間使用,3 條總線分別為SCK、MOSI、MISO,觸發選用SS SPI物理層 SS(Slave Select) SS(從設備選擇信號線,常稱為選片信號線,也稱為NSS、CS,以下用NSS表示,當有多個SPI從設備與SPI主機連接時,設備的選擇其他信號線) SCK 及任何一條信號線,我在每一個設備的SPI、MISO 線上,即從設備上,都共同使用這3 條信號;而從設備本身的這個NS NS 上有多少條信號線,本協議的多少個設備通過路由,有多少個從設備上選址,即線路上的設備地址,即上的設備並進行通訊協議;沒有設備地址,使用NSS信號線來探測,當主機要選擇從設備的時候,該從設備的信號線設置為低調它,即從該設備被選中有效片選,接著開始與被人的設備進行SPI通訊,所以SPI通訊以NSS線置NSS低作為被線信號,以簡單的說此PIN是主人使用Slave要接收訊號以及Master去跟Slave要數據需要觸發的腳位(類似I2C的地址概念) SCK(Serial Clock):信號線時鐘,用於通訊數據同步,它由通訊主機設備產生,決定通訊的頻率,不同的支持的最高頻率不一樣,如STM32的SPI時鐘頻率最大為fpclk/2 ,兩個設備之間通訊時,通訊設備之間的通訊低速 MOSI(主設備輸出/從輸入)主輸出:主設備輸出線,主機資源的資料設備從鏈路信號,從機由線索線輸入讀入發送的資料,即這條線索的方向為主機到從機 MISO Master Input,,Slave Output):從主設備輸出的資料輸入(從線索輸入設備,從線索輸入)方向為從機到主機 二、SPI協議層 一、基本通訊程序 是一個機器與信號源的信號源都來自主機,NSS、CK、MOS I 由主機控制產生而 MISO 的由主機產生,通過信號線讀取從機的信號線,MOSI (SS) 為各種稀有的 MISO 時間段才有效,我和 MISO 傳輸一個短期的資料 CPOL/CPHA 及通訊模式

SPI introduction and Coding on STM32 Read More »

Shopping Cart