STM32 串列埠通訊USART(學習筆記)

2021-09-29 15:37:23 字數 1989 閱讀 5398

tx/

rx=f

pclk

x/(16

∗usa

rtdi

v)tx/rx =fpclkx/(16*usartdiv)

tx/rx=

fpcl

kx/(

16∗u

sart

div)

f pc

lkxfpclkx

fpclkx

是給串列埠的時鐘

其中usart2,3,4,5 用pclk1,usart1 用pclk2

通過公式計算出值然後轉換為16進製制。

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

注:usart_tx對應pa9,usart_rx對應pa10

rcc_apb2periphclockcmd

(rcc_apb2periph_usart1|rcc_apb2periph_gpioa, enable)

;//使能gpioa usart1

串列埠復位

gpio 埠模式設定

[**來自stm32中文參考手冊]

①usart_tx(pa9)

gpio_inittypedef gpio_initstruct1;

gpio_initstruct1.gpio_mode=gpio_mode_af_pp;

//推挽復用輸出

gpio_initstruct1.gpio_pin=gpio_pin_9;

gpio_initstruct1.gpio_speed=gpio_speed_50mhz;

gpio_init

(gpioa,

&gpio_initstruct1)

;

②usart_rx(pa10)

gpio_inittypedef gpio_initstruct1;

gpio_initstruct1.gpio_mode=gpio_mode_in_floating;

//浮空輸入

gpio_initstruct1.gpio_pin=gpio_pin_10;

gpio_init

(gpioa,

&gpio_initstruct1)

;

串列埠引數初始化

typedef

struct

usart_clockinittypedef;

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

nvic_initstructure.nvic_irqchannel = usart1_irqn;

nvic_initstructure.nvic_irqchannelpreemptionpriority=3;

//搶占優先順序 3

nvic_initstructure.nvic_irqchannelsubpriority =3;

//子優先順序 3

nvic_initstructure.nvic_irqchannelcmd = enable;

//irq 通道使能

nvic_init

(&nvic_initstructure)

;//中斷優先順序初始

//⑤開啟中斷

usart_itconfig

(usart1, usart_it_rxne, enable)

;//開啟中斷

使能串列埠

usart_cmd

(usart1, enable)

;//使能串列埠

編寫中斷處理函式

STM32 串列埠USART 通訊

通過stm32向串列埠傳送資料顯示在串列埠終端上 我用的是串列埠除錯工具 並且在除錯工具上傳送認識字元,然後在終端上顯示出來,就是這樣了,分別驗證了usart1和usart2,雖說只是乙個1和2,但是初始化時鐘的時候,並不一樣的,我們先來看卡下圖中 各個模組,io口時鐘分布 在系統初始化各個模組前,...

stm32串列埠通訊(usart1)

參考 gpio inittypedef gpio initstructure 24 usart inittypedef usart initstructure 25 nvic inittypedef nvic initstructure 初始化gpio 30 gpio initstructure.g...

stm32串列埠通訊

通訊方式 1 同步通訊 帶時鐘同步訊號傳輸 spi,iic等 2 非同步通訊 不帶時鐘用途訊號 usrt,單匯流排 stm32串列埠引腳表 串口號 rxd txd 1 pa10 pa9 2 pa3pa2 3 pb11 pb10 4 pc11 pc10 5 pd2pc12 通訊過程 接收過程 由rx入...