STM32F10X USART傳送詳解,測試無誤

2021-07-09 18:12:11 字數 3337 閱讀 7680

硬體平台:stm32f10x  usart模組 + jlink+usb轉ttl小板

軟體平台:keil 4 

一、基礎知識

串列埠:通用同步非同步收發器(usart),支援同步單向與半雙工單線,允許多處理器通訊,可用dma。

任何usart雙向通訊至少要3個引腳:rx tx  gnd

rx:序列輸入,通過取樣技術區別資料與雜訊

tx:當傳送器被禁止時,輸出引腳恢復到i/o埠配置

當傳送器被啟用時,不發資料時,tx引腳處於高電平

二、傳送程式例程

程式涉及的模組有:

rcc:復位及時鐘控制模組,用於初始化stm32 usart外設時鐘及io口復用時鐘;

usart:通用同步非同步收發器,即串列埠,用於傳送資料至上位機顯示已傳送的資料;

gpio:通用輸入輸出口復用配置模組。

1、rcc(復位和時鐘控制 reset clock controller)配置:常規時鐘配置+usart相對應的io口時鐘+usart時鐘              + 管腳功能復用時鐘

2、gpio(通用輸出輸入口)配置 afio 復用...:傳送端推挽輸出,接收端浮空輸入

3、usart配置:通用同步非同步收發器:8bits一幀,通過快取區交換

4、nvic配置(nest vector interrupt controller):嵌入中斷向量控制器

中斷響應

中斷優先順序:優先順序編號小者優先順序高

查詢優先順序+執行優先順序

多個中斷掛起時,執行優先順序高者先執行

若執行優先順序同,先執行查詢優先順序高的,在中斷向量表的位置決定

中斷巢狀:優先順序低著被打斷,cpu先執行優先順序高者

中斷掛起:執行高的時候,低者來了,低者被掛起,等待執行

nvic 管理中斷優先順序,256個中斷分配優先順序,次佔優先順序不會造成中斷巢狀

5、傳送接收資料

rcc

//rcc時鐘配置

void rcc_cfg(void)

rcc_apb2periphclockcmd(rcc_apb2periph_gpioa | rcc_apb2periph_gpiob | rcc_apb2periph_afio , enable);

rcc_apb1periphclockcmd(rcc_apb1periph_usart3,enable);

//開啟gpio時鐘,復用功能,串列埠1的時鐘

/*void rcc_apb2periphclockcmd(u32 rcc_apb2periph, functionalstate newstate)

enable 或 disable apb2 外設時鐘

rcc_apb2periph_afio 功能復用io 時鐘

rcc_apb2periph_gpioa/b/c/d/e gpioa/b/c/d/e 時鐘

rcc_apb2periph_adc1/adc2 adc1/2 時鐘

rcc_apb2periph_tim1

rcc_apb2periph_spi1

rcc_apb2periph_usart1

rcc_apb2periph_all 全部apb2外設時鐘*/

}

gpio

//io口配置

void gpio_cfg(void)

gpio_inittypedef;*/

//函式:指向結構gpio_inittypedef的指標,待初始化

//gpio_structinit中的成員:gpio_pin/speed/mode

gpio_initstructure.gpio_pin = gpio_pin_10;

//1、選中引腳gpio_pin_0--15 or gpio_pin_all 選中全部管腳

//2、gpio_speed:gpio_speed_10mhz/_2mhz/_50mhz 最高輸出速率

gpio_initstructure.gpio_mode = gpio_mode_af_pp;

/*mode,工作狀態:gpio_mode_ain ----- 模擬輸入

_in_floating ----- 浮空輸入

_ipd ----- 上拉輸出

_ipu ----- 上拉輸入

_out_od ----- 開漏輸出

_out_pp ----- 推挽輸出

_af_od ----- 復用開漏輸出

_af_pp ----- 復用推挽輸出*/

gpio_init(gpiob , &gpio_initstructure);

//選擇a,初始化

//pa10作為us1的rx端,負責接收資料

gpio_initstructure.gpio_pin = gpio_pin_11;

//選擇10腳

gpio_initstructure.gpio_mode = gpio_mode_in_floating;

//io浮空輸入

gpio_init(gpiob, &gpio_initstructure);

//初始化

//提示標示:led顯示串列埠正在傳送資料/接收資料

gpio_initstructure.gpio_pin = gpio_pin_4;

gpio_initstructure.gpio_mode = gpio_mode_out_pp;

//推挽輸出

gpio_init(gpioa, &gpio_initstructure);

}

usart

//串列埠初始化

void usart_cfg(void)

nvic

//配置中斷

void nvic_cfg(void)

nvic_inittypedef;*/

//選擇串列埠1中斷

nvic_initstructure.nvic_irqchannelpreemptionpriority = 0;

//搶占式,先佔 中斷優先順序設定為0

nvic_initstructure.nvic_irqchannelsubpriority = 0;

//響應式,從 中斷優先順序設定為0

nvic_initstructure.nvic_irqchannelcmd = enable;

//使能中斷

nvic_init(&nvic_initstructure);

}  extern flagstatus rx_status;

void usart1_irqhandler(void)

}

歡迎討論,共同學習

STM32F30X USART串列埠初始化順序

void inituart void 在做串列埠初始化時候,務必先將串列埠的rcc時鐘開啟,後進行相對於的gpio與usart配置,否則串列埠會無法工作.rcc ahbperiphclockcmd rcc ahbperiph gpioa enable rcc apb2periphclockcmd r...

STM32F10x系列 中斷

概念問題 中斷與事件有什麼聯絡與區別?stm32之中斷與事件 中斷與事件的區別 簡單概括下。中斷 cpu單執行緒情況下只能處理單一任務,在有零時任務需要處理時,可以暫時放下當前任務,優先處理零時任務,再回過來處理之前的任務。多個中斷可以進行巢狀,比如產生了多個零時任務,那麼就可以按照優先順序處理這多...

基於stm32f407建立stm32F427工程

分為三個部分 1.啟動檔案 2.fwilib 包含兩個資料夾inc和src。src裡面是stm32資源的c檔案,inc則是32資源的h檔案 3.user這也是我不太理解的部分 ddbugconfig只包含了用於debug的初始化,則是f4的系統檔案。我是在f407的基礎上改的 總的來說 1.改了晶元...