STM32串列埠通訊中斷接收

2021-09-28 17:18:43 字數 2693 閱讀 6117

串列埠的時序和工作原理就不寫了,主要寫如何應用

串列埠的設定除了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入...