STM32串列埠協議

2021-08-08 03:07:10 字數 2206 閱讀 8069

目前我總結了兩種串列埠通訊時用到的串列埠協議程式。均學習的原子哥的。

一、定義某個字元為一次接收資料完成,如/n/r。

二、定義兩個字元接收時間間隔,如10ms。超過即為第二次接收。

一、程式示意:

二、程式示意、

#include \"delay.h\"

#include \"usart2.h\"

#include \"stdarg.h\"

#include \"stdio.h\"

#include \"string.h\"

//

//本程式只供學習使用,未經作者許可,不得用於其它任何用途

//alientek戰艦stm32開發板

//串列埠2驅動**

//正點原子@alientek

//技術論壇:www.openedv.com

//修改日期:2013/2/22

//版本:v1.0

//

//串列埠傳送快取區

__align(8) u8 usart2_tx_buf[usart2_max_send_len]; //傳送緩衝,最大usart2_max_send_len位元組

#ifdef usart2_rx_en //如果使能了接收

//串列埠接收快取區

u8 usart2_rx_buf[usart2_max_recv_len]; //接收緩衝,最大usart2_max_recv_len個位元組.

//通過判斷接收連續2個字元之間的時間差不大於10ms來決定是不是一次連續的資料.

//如果2個字元接收間隔超過10ms,則認為不是1次連續資料.也就是超過10ms沒有接收到

//任何資料,則表示此次接收完畢.

//接收到的資料狀態

//[15]:0,沒有接收到資料;1,接收到了一批資料.

//[14:0]:接收到的資料長度

u16 usart2_rx_sta=0;

void usart2_irqhandler(void)

else

}

}

//初始化io 串列埠2

//pclk1:pclk1時鐘頻率(mhz)

//bound:波特率

void usart2_init(u32 pclk1,u32 bound)

//串列埠2,printf 函式

//確保一次傳送資料不超過usart2_max_send_len位元組

void u2_printf(char* fmt,...)

//定時器4中斷服務程式

void tim4_irqhandler(void)

}//設定tim4的開關

//sta:0,關閉;1,開啟;

void tim4_set(u8 sta)

else tim4->cr1&=~(1<<0);//關閉定時器4

}//通用定時器中斷初始化

//這裡始終選擇為apb1的2倍,而apb1為36m

//arr:自動重灌值。

//psc:時鐘預分頻數

void tim4_init(u16 arr,u16 psc)

#endif

///usart2 dma傳送配置部分//

//dma1的各通道配置

//這裡的傳輸形式是固定的,這點要根據不同的情況來修改

//從儲存器->外設模式/8位資料寬度/儲存器增量模式

//dma_chx:dma通道chx

//cpar:外設位址

//cmar:儲存器位址

void uart_dma_config(dma_channel_typedef*dma_chx,u32 cpar,u32 cmar)

//開啟一次dma傳輸

void uart_dma_enable(dma_channel_typedef*dma_chx,u8 len)

/

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函式...