串列埠的時序和工作原理就不寫了,主要寫如何應用
串列埠的設定除了gpio外,需要設定的引數有波特率、資料位、停止位,校驗方式;
gpio輸出配置af_pp復用推挽輸出
gpio出入配置in_flaoting浮空輸入
usart的配置為115200的波特率,8位資料長度,1位停止位,無校驗,無硬體流控制
gpio_inittypedef gpio_initstructure;
usart_inittypedef usart_initstructure;
/* config usart1 clock */
rcc_apb2periphclockcmd
(rcc_apb2periph_usart1 | rcc_apb2periph_gpioa, enable)
;//開啟gpio和usart1時鐘
/* 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_in_floating;
//浮空輸入
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)
;/*使能串列埠1的接收中斷 */
usart_itconfig
(usart1, usart_it_rxne, enable)
;//使能串列埠1
usart_cmd
(usart1, enable)
;
nvic_inittypedef nvic_initstructure;
/* configure the nvic preemption priority bits */
nvic_prioritygroupconfig
(nvic_prioritygroup_0)
;/* enable the usarty interrupt */
nvic_initstructure.nvic_irqchannel = usart1_irqn;
nvic_initstructure.nvic_irqchannelpreemptionpriority =0;
nvic_initstructure.nvic_irqchannelsubpriority =1;
nvic_initstructure.nvic_irqchannelcmd = enable;
nvic_init
(&nvic_initstructure)
;
void
usart1_irqhandler
(void
)}
/* 傳送乙個位元組到串列埠 */
usart_senddata
(usart1,
(uint8_t) ch)
;/*等待傳送完成*/
while
(usart_getflagstatus
(usart1, usart_flag_txe)
== reset)
;
實現printf和scanf函式必須要重寫,幷包含#include
/// 重定向c庫中printf到usart1
intfputc
(int ch, file *f)
/// 重定向c庫中scanf到usart1
intfgetc
(file *f)
STM32 串列埠 通訊 中斷
一 資料傳送與接收。1 stm32 的傳送與接收是通過資料暫存器usart dr來實現的,這是乙個雙暫存器,包含了 tdr 和 rdr。當向該暫存器寫資料的時候,串列埠就會自動傳送 當收到資料的時候,也是存在該暫存器內。1 stm32 庫函式操作 usart dr 暫存器傳送資料的函式是 void ...
STM32串列埠接收中斷BUG
除錯串列埠時,發現串列埠會出現頻繁跳中斷,導致無法執行主迴圈的問題!除錯發現是串列埠中斷硬體bug 1.usart itconfig usart 1,usart it rxne,enable 使能了接收中斷,那麼ore中斷也同時被開啟了。2.ore中斷只能使用usart getflagstatus ...
stm32串列埠通訊
通訊方式 1 同步通訊 帶時鐘同步訊號傳輸 spi,iic等 2 非同步通訊 不帶時鐘用途訊號 usrt,單匯流排 stm32串列埠引腳表 串口號 rxd txd 1 pa10 pa9 2 pa3pa2 3 pb11 pb10 4 pc11 pc10 5 pd2pc12 通訊過程 接收過程 由rx入...