STM32F1的UART4串列埠配置

2021-07-23 23:40:57 字數 4070 閱讀 8739

注意是uart4,不是usart4

在stm32中uart和usart是不相同的

usart是通用同步/非同步序列接收/傳送器

uart是通用非同步收發傳輸器

簡單區分同步和非同步就是看通訊時需不需要對外提供時鐘輸出,我們平時用的串列埠通訊基本都是 uart。

usart支援同步模式,因此usart 需要同步時鐘訊號usart_ck(如stm32 微控制器),通常情況同步訊號很少使用,因此一般的微控制器uart和usart使用方式是一樣的,都使用非同步模式。

uart需要固定的波特率,就是說兩位資料的間隔要相等。 uart匯流排是非同步串列埠,一般由波特率產生器(產生的波特率等於傳輸波特率的16倍)、uart接收器、uart傳送器組成,硬體上有兩根線,一根用於傳送,一根用於接收。 顯然,如果用通用io口模擬uart匯流排,則需乙個輸入口,乙個輸出口。

uart是乙個並行輸入成為序列輸出的晶元,通常整合在主機板上,多數是16550afn晶元。因為計算機內部採用並行資料,不能直接把資料發到modem,必須經過uart整理才能進行非同步傳輸,其過程為:cpu先把準備寫入序列裝置的資料放到uart的暫存器(臨時記憶體塊)中,再通過fifo(first input first output,先入先出佇列)傳送到序列裝置,若是沒有fifo,資訊將變得雜亂無章,不可能傳送到modem。

作為介面的一部分,uart還提供以下功能:將由計算機內部傳送過來的並行資料轉換為輸出的序列資料流。將計算機外部來的序列資料轉換為位元組,供計算機內部使用並行資料的器件使用。在輸出的序列資料流中加入奇偶校驗位,並對從外部接收的資料流進行奇偶校驗。在輸出資料流中加入啟停標記,並從接收資料流中刪除啟停標記。處理由鍵盤或滑鼠發出的中斷訊號(鍵盤和滑鼠也是序列裝置)。可以處理計算機與外部序列裝置的同步管理問題。

usart收發模組一般分為三大部分:時鐘發生器、資料傳送器和接收器。控制暫存器為所有的模組共享。時鐘發生器由同步邏輯電路(在同步從模式下由外部時鐘輸入驅動)和波特率發生器組成。傳送時鐘引腳xck僅用於同步傳送模式下,傳送器部分由乙個單獨的寫入緩衝器(傳送udr)、乙個序列移位暫存器、校驗位發生器和用於處理不同湞結構的控制邏輯電路構成。使用寫入緩衝器,實現了連續傳送多湞資料無延時的通訊。接收器是usart模組最複雜的部分,最主要的是時鐘和資料接收單元。資料接收單元用作非同步資料的接收。除了接收單元,接收器還包括校驗位校驗器、控制邏輯、移位暫存器和兩級接收緩衝器(接收udr)。接收器支援與傳送器相同的幀結構,同時支援楨錯誤、資料溢位和校驗錯誤的檢測。usart是乙個全雙工通用同步/非同步序列收發模組,該介面是乙個高度靈活的序列通訊裝置。

綜上可以看出,usart相對uart來說是在非同步通訊的基礎上還有同步的功能,usart能夠提供主動時鐘。

uast4的配置

注意:在使用uart4之前,首先要確保你的微控制器是支援uart4的(我用到的微控制器是stm32f103vet6),具體是否支援uart4,可以參考資料手冊。同時要注意,uart4是掛載到apb1匯流排上的!

初始化程式:

為了方便除錯輸出,我將usart1也進行了初始化,對比一下不難發現uasrt1的初始化和uart4的初始化幾乎相同

gpio_inittypedef gpio_initstructure;

usart_inittypedef usart_initstructure;

/* config usart1 clock */

rcc_apb2periphclockcmd(rcc_apb2periph_usart1 | rcc_apb2periph_gpioa, enable);

rcc_apb2periphclockcmd(rcc_apb2periph_gpioc,enable);

rcc_apb2periphclockcmd(rcc_apb2periph_afio,enable);

rcc_apb1periphclockcmd(rcc_apb1periph_uart4,enable); //注意uart4是掛載在apb1匯流排上的,用rcc_apb1periphclockcmd()函式初始化!

/* usart1 gpio config */

/* 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_ipu;

gpio_init(gpioa, &gpio_initstructure);

/* 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);

//³õê¼»¯uart4-tx-pc10

gpio_initstructure.gpio_pin = gpio_pin_10;

gpio_initstructure.gpio_mode = gpio_mode_af_pp;

gpio_initstructure.gpio_speed = gpio_speed_50mhz;

gpio_init(gpioc, &gpio_initstructure);

// //uart-rx-pc11

gpio_initstructure.gpio_pin=gpio_pin_11;

gpio_initstructure.gpio_mode = gpio_mode_ipu;

usart_initstructure.usart_baudrate = 9600;

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(uart4, &usart_initstructure);

usart_cmd(uart4, enable);

usart_clearflag(uart4,usart_flag_tc);

STM32F1開發指南筆記10 串列埠通訊

串列埠設定的一般步驟可以總結為如下幾個步驟 串列埠時鐘使能,gpio 時鐘使能 串列埠復位 gpio 埠模式設定 串列埠引數初始化 開啟中斷並且初始化 nvic 如果需要開啟中斷才需要這個步驟 使能串列埠 編寫中斷處理函式 插入換行 usart rx sta 0 else if times 200 ...

STM32F4與STM32F1的區別

作為cortex m3市場的最大佔有者,st公司在2011年又推出基於cortex m4核心的stm32f4系列產品,相對與stm32f1 f2等cortex m3產品,stm32f4最大的優勢,就是新增了硬體fpu單元以及dsp指令,同時,stm32f4的主頻也提高了很多,達到168mhz 可獲得...

STM32F1和F4的區別

stm32f1和f4的區別 第一點區別 核心不一樣 stm32f1是cortex m3的核心。stm32f4是cortex m4的核心。晶元工藝不一樣。因為stm32最早2010年左右就出來的mcu,而f4比f1晚幾年研發出來,在設計製成上要優良一些 系統構架也不一致,f4的主系統有多層ahb匯流排...