STM32 不斷進入串列埠中斷問題 解決方法

2021-08-31 23:36:46 字數 2392 閱讀 7240

stm32 有時候會不斷進入中斷,解決方法如下

1.串列埠初始化配置時,需要開啟ore 溢位中斷,如下紅色**所示

void usart_init(void)

gpio_inittypedef gpio_initstructure;

nvic_inittypedef nvic_initstructure;

usart_inittypedef usart_initstructure;

rcc_apb2periphclockcmd(rcc_apb2periph_usart1, enable);                            // 開啟串列埠時鐘

gpio_pinafconfig(gpioa,gpio_pinsource9,gpio_af_1);

gpio_pinafconfig(gpioa,gpio_pinsource10,gpio_af_1);

gpio_initstructure.gpio_pin     = gpio_pin_9 | gpio_pin_10;

gpio_initstructure.gpio_speed    = gpio_speed_50mhz;

gpio_initstructure.gpio_mode    = gpio_mode_af;

gpio_initstructure.gpio_otype     = gpio_otype_pp;

gpio_initstructure.gpio_pupd     = gpio_pupd_up;

gpio_init(gpioa,&gpio_initstructure);

usart_initstructure.usart_baudrate = 57600;                        // 配置波特率為115200

usart_initstructure.usart_stopbits = usart_wordlength_8b;        // 配置資料長度為8

usart_initstructure.usart_stopbits = usart_stopbits_1;            //設定停止位

usart_initstructure.usart_parity     = usart_parity_no;            // 配置奇偶校驗為none

usart_initstructure.usart_hardwareflowcontrol = usart_hardwareflowcontrol_none;    // 配置硬體流為none    

usart_initstructure.usart_mode = usart_mode_rx | usart_mode_tx;    // 開啟rx接收和tx傳送功能

usart_init(usart1,&usart_initstructure);                        // 配置

usart_cmd(usart1,enable);    

nvic_initstructure.nvic_irqchannel = usart1_irqn;                // 選擇中斷通道

nvic_initstructure.nvic_irqchannelpriority = 2;                    // 搶斷優先1

nvic_initstructure.nvic_irqchannelcmd = enable;                    // 使能中斷

nvic_init(&nvic_initstructure);

usart_itconfig(usart1, usart_it_rxne, enable);                    // 開啟中斷

usart_itconfig(usart1, usart_it_ore, enable);                    // 開啟中斷

void usart1_irqhandler(void)

u8 dat;

if (usart_getitstatus(usart1, usart_it_ore) == set)

usart_clearitpendingbit(usart1,usart_it_ore);    

usart_receivedata( usart1 );

if( usart_getitstatus(usart1,usart_it_rxne) != reset )                // 等價於if( !ri ) 檢查串列埠資料是否已就位

usart_clearitpendingbit(usart1,usart_it_rxne);

dat = usart_receivedata( usart1 );

uart_rec_buf[uart_len++]=dat;

rx_tim=uart_init_tim;

}這樣就可以解決,串列埠不斷進入中斷的問題

STM32串列埠中斷方式接收

經過除錯在stm32f101cbt6中實現通訊。注意還要配乙個ttl轉usb介面,才能進行通訊。實現字串回發 include stm32f10x it.h include stm32f10x conf.h void rcc configuration void 時鐘配置 void usart con...

STM32 串列埠中斷裡面使用printf 出現錯誤

串列埠收發中斷處理函式 void uart trxover interrupt void if usart getitstatus usart1,usart it rxne set 就是在這個裡面,包含了printf就無法全部回傳傳送的資訊 但是將printf 注釋掉以後,傳送什麼資訊過去,就會回傳...

STM32 一直進入串列埠接收中斷

串列埠初始化配置時,需要開啟ore 溢位中斷,否則串列埠中斷沒有及時讀取資料會觸發溢位中斷 開啟接收中斷預設開啟溢位中斷,但是為了讀取溢位標誌位還需要明確執行以下開啟溢位中斷 如果沒有清溢位中斷就會一直進串列埠中斷。usart itconfig usart2,usart it ore,enable ...