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入...