STM32串列埠筆記

2021-10-08 20:33:33 字數 2119 閱讀 6768

參考原子的程式(基本照抄o(╯□╰)o)

串列埠設定的一般步驟可以總結為如下幾個步驟:

1) 串列埠時鐘使能, gpio 時鐘使能

2) 串列埠復位

3) gpio 埠模式設定

4) 串列埠引數初始化

5) 開啟中斷並且初始化 nvic(如果需要開啟中斷才需要這個步驟)

6) 使能串列埠

7) 編寫中斷處理函式

時鐘設定,埠模式等、設定初始化的部分按說明書抓藥就行~

有兩個暫存器要了解:

①串列埠資料暫存器: usart_dr ,這是個雙暫存器,分接收和傳送。這個暫存器只有低9位有效。

向串列埠暫存器寫入資料函式:void usart_senddata(usart_typedef* usartx, uint16_t data);

讀取串列埠暫存器接收資料函式:uint16_t usart_receivedata(usart_typedef* usartx);

②串列埠狀態暫存器 usart_sr

這裡我們關注一下兩個位,第 5、 6 位 rxne 和 tc。

rxne(讀資料暫存器非空),當該位被置 1 的時候,就是提示已經有資料被接收到了,並

且可以讀出來了。這時候我們要做的就是盡快去讀取 usart_dr,通過讀 usart_dr 可以將

該位清零,也可以向該位寫 0,直接清除。

tc(傳送完成),當該位被置位的時候,表示 usart_dr 內的資料已經被傳送完成了。如

果設定了這個位的中斷,則會產生中斷。該位也有兩種清零方式: 1)讀 usart_sr,寫

usart_dr。 2)直接向該位寫 0。

要判斷讀暫存器是否非空(rxne), 操

作庫函式的方法是:

usart_getflagstatus(usart1, usart_flag_rxne);

我們要判斷傳送是否完成(tc),操作庫函式的方法是:

usart_getflagstatus(usart1, usart_flag_tc);

void usart1_irqhandler(void)                	//串列埠1中斷服務程式

if((usart_rx_sta&0x4000)!=0)//接收到一次0x0d

}} }

**分析:

u16的變數 usart_rx_sta ,這是個「復用」的變數。

※第15位–可以將usart_rx_sta&0x8000整體為乙個變數,為1表明接收完成,語句usart_rx_sta|=0x8000就是給其賦值1

※第14位-- usart_rx_sta&0x4000是另乙個變數 ,當接收到0x0d時,給其賦值1;下次進串列埠中斷時,就判斷接收到的是否是0x0a;0x0d 0x0a連起來,表示按鍵的回車,即串列埠助手中的傳送新行。

※第0~13位,用來計數接收個數,2^14,最大可接收4096個。

注意:usart_rx_sta&0x8000無法直接判斷其是否為1.因為它在第15位,只能判斷==0或!=0

//注意是哪個串列埠使用printf,在下面修改就行

file __stdout;

//定義_sys_exit()以避免使用半主機模式

void _sys_exit(int x)

//重定義fputc函式

int fputc(int ch, file *f)

//迴圈傳送,直到傳送完畢

usart1->dr = (u8) ch;

return ch;

}#endif

串列埠中斷分組在主函式裡

int main(void)

printf("\r\n\r\n");//插入換行

usart_rx_sta=0;

}else

if(times%200==0)printf("請輸入資料,以回車鍵結束\n");

if(times%30==0)led0=!led0;//閃爍led,提示系統正在執行.

delay_ms(10);

} }

}

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