STM32之串列埠通訊

2021-09-06 15:36:46 字數 3728 閱讀 6379

一、rs232通訊協議

1、概念

個人計算機上的通訊介面之一,由電子工業協會(electronic industries association,eia) 所制定的非同步傳輸標準介面。     

2、電氣特性

邏輯1(mark):  -3v~-15v

邏輯0(space):

+3~+15v

3、介面

實現全雙工非同步通訊只需要三根線:rx、tx和gnd。

二、常見coms電平轉rs232電平的晶元--max3232

1、邏輯輸入與邏輯輸出特性

2、rs232介面端輸入特性

3、rs232介面端輸出特性

三、stm32串列埠硬體電路

1、晶元內部串列埠電路

2、開發板串列埠硬體電路

四、stm32串列埠程式設計

1、整體流程

① 開啟gpio時鐘和usartx時鐘

② 配置tx和rx引腳

③ 初始化usart控制器

2、細節實現

① 開啟gpio時鐘和usartx時鐘

rcc_apb2periphclockcmd(rcc_apb2periph_usart1 | rcc_apb2periph_gpioa, enable);
② 配置tx和rx引腳

/*

configure usart1 tx (pa.09) as alternate function push-pull

*/gpio_initstructure.gpio_pin =gpio_pin_9;

gpio_initstructure.gpio_mode =gpio_mode_af_pp;

gpio_initstructure.gpio_speed =gpio_speed_50mhz;

gpio_init(gpioa, &gpio_initstructure);

/*configure usart1 rx (pa.10) as input floating

*/gpio_initstructure.gpio_pin =gpio_pin_10;

gpio_initstructure.gpio_mode =gpio_mode_in_floating;

gpio_init(gpioa, &gpio_initstructure);

③ 初始化usart控制器

/*

usart1 mode config

*/usart_initstructure.usart_baudrate = 115200

; usart_initstructure.usart_wordlength =usart_wordlength_8b;

usart_initstructure.usart_stopbits =usart_stopbits_1;

usart_initstructure.usart_parity =usart_parity_no ;

usart_initstructure.usart_hardwareflowcontrol =usart_hardwareflowcontrol_none;

usart_initstructure.usart_mode = usart_mode_rx |usart_mode_tx;

usart_init(usart1, &usart_initstructure);

usart_cmd(usart1, enable);

五、stm32串列埠疑惑1、串列埠時鐘使能與控制器使能的關係為何usart時鐘使能了,還需要在配置usart控制器的時候再使能一次?

rcc_apb2periphclockcmd(rcc_apb2periph_usart1 |rcc_apb2periph_gpioa, enable);

usart_cmd(usart1, enable);

1> usart的時鐘使能apb2 peripheral clock enable register  (rcc_apb2enr)

2> usart控制器使能

3> 原因

rcc_apb2enr:  控制apb2時鐘是否**給usart控制器

usart_cr1:   控制usart控制器的分頻器和輸出是否工作

2、tdr與rdr共用乙個特殊功能暫存器位址

usart_dr功能描述:

包含了傳送或接收的資料。由於它是由兩個暫存器組成的,乙個給傳送用(tdr) ,乙個給接收用(rdr) ,該暫存器兼具讀和寫的功能。tdr暫存器提供了內部匯流排和輸出移位暫存器之間的並行介面(參見圖236 )。rdr暫存器提供了輸入移位暫存器和內部匯流排之間的並行介面。(摘自《stm32參考手冊》)

筆者的理解是:當對usart_dr進行讀操作的時候,訪問的是rdr;當對usart_dr進行寫操作的時候,訪問的是tdr。

六、串列埠除錯時需要注意的地方

1、通過mdk結合一些偵錯程式可以單步、任意斷點等等方式進行**的除錯。可是,這種除錯方法對於除錯作業系統,比如ucos-ii,還有那些必須要全速執行才能進行除錯的情況,就顯得力不從心。串列埠除錯正是用於這些地方,可以在程式全速執行的情況下,實時的列印系統的執行資訊。

2、串列埠除錯也有它的侷限性,由於串列埠的波特率相對於stm32這樣高速執行的微控制器顯得遲鈍,很多情況下不能及時的列印系統的執行資訊。甚至有些情況下,我們原本那些串列埠除錯的**會成為影響我們系統實時性最主要的因素。

stm32之串列埠通訊

1 首先對tx和rx進行配置 void init gpio void 2 對串列埠進行配置 3 對總中斷進行配置 4 傳送中斷 void usart1 it void 5 傳送位元組和字串 void usart sendbyte usart typedef pusartx,uint8 t ch vo...

STM32之串列埠

名稱 stm32之串列埠 說明 對於stm32的串列埠通訊來說,從外部看,和c51差不多。從內部看,啊。我還不了解。從使用上說,也是需要先配置usart,然後通過終端或者輪詢的方式接受或者輸出資料。由於有了韌體庫函式的幫助,stm32的串列埠配置起來比c51還要方便不少。本實驗完成的是輸入輸出重定向...

STM32之USART串列埠通訊《二》

一 簡單demo 通過232串列埠,與上位機進行通訊。首先保證微控制器232串列埠與電腦的串列埠介面相連,當然電腦是usb介面,其實usb介面的實質也是串列埠。我們實現上位機傳送乙個16進製制的資料,微控制器接受到資料後顯示,並且2倍傳送給上位機。1 usart init 串列埠初始化 void u...