STM32串列埠通訊練習

2021-10-11 10:57:52 字數 2342 閱讀 1765

兩者之間的差異主要體現在如下方面:

使用韌體庫:目前比較多的例程是使用韌體庫編寫的。官方的例子也都採用韌體庫方式。特點就是簡單,易於理解,資料多。如果你沒有cortexm系列核心的開發基礎,建議從韌體庫開始玩起。等有一定基礎,或是特別需要時再用暫存器。

使用暫存器:想要深入理解cortexm3核心或是需要為了獲得更好的可移植性,學習暫存器程式設計會比較有幫助。但是從專業的角度上看,暫存器更貼近底層,對外設的工作原理和執行機理會有更深的理解。

*stm32系統給上位機(win10)連續傳送「hello windows!」,

*當上位機給stm32傳送「stop stm32!」後,stm32停止傳送,並返回資訊「收到」。

int i=0;

uint8_t uctemp[50]

;void

debug_usart_irqhandler

(void)if

(uctemp[i]

=='!')}

i++;}

再次修改main.c檔案

#include

"stm32f10x.h"

#include

"bsp_usart.h"

void

delay

(uint32_t count)

intmain

(void

)}

編譯完成,生成hex檔案

開啟多功能串列埠除錯工具,開啟串列埠,就能看見我們剛才stm32發給電腦的資訊。

乙個由c/c++編譯的程式占用的記憶體分為以下幾個部分

1、棧區(stack)— 程式執行時由編譯器自動分配,存放函式的引數值,區域性變數的值等:

其操作方式類似於資料結構中的棧。

2、堆區(heap) — 在記憶體開闢另一塊儲存區域:

一般由程式設計師分配釋放, 若程式設計師不釋放,程式結束時可能由os** 。

注意它與資料結構中的堆是兩回事,分配方式倒是類似於鍊錶。

3、全域性區(靜態區)(static)—編譯器編譯時即分配記憶體:

全域性變數和靜態變數的儲存是放在一塊的,

初始化的全域性變數和靜態變數在一塊區域,

未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。

程式結束後由系統釋放

4、文字常量區 —常量字串就是放在這裡的。 程式結束後由系統釋放。

5、程式**區—存放函式體的二進位制**。

1、首先我們先用vim命令建立乙個test.c的檔案並進入編寫如下程式

原始碼:

2.編譯生成可執行檔案

3.執行命令./test

4.結果分析

棧存放區域是由高位址到低位址向下增長

堆存放區是由低位址到高位址像上增長

靜態變數位址從高位址到低位址向下增長

函式位址是從低位址到高位址向上增長

stm32串列埠通訊

通訊方式 1 同步通訊 帶時鐘同步訊號傳輸 spi,iic等 2 非同步通訊 不帶時鐘用途訊號 usrt,單匯流排 stm32串列埠引腳表 串口號 rxd txd 1 pa10 pa9 2 pa3pa2 3 pb11 pb10 4 pc11 pc10 5 pd2pc12 通訊過程 接收過程 由rx入...

STM32串列埠通訊

1.常用的串列埠相關暫存器 1 usart sr狀態暫存器,對應的庫函式 flagstatus usart getflagstatus usart typedef usartx,uint16 t usart flag 2 usart dr資料暫存器,對應的庫函式 void usart senddat...

STM32串列埠通訊

串列埠作為mcu最重要的外部介面,同時也是軟體開發重要的除錯手段,其重要性不言而喻。在這裡我們主要從庫函式的角度來講述如何設定串列埠,來達到最基本的通訊功能。串列埠的設定一般可以歸結為以下幾個步驟 1 串列埠時鐘使能,gpio時鐘使能。2 設定引腳復用器對映,呼叫gpio pinafconfig函式...