STM32基礎設計(3) 中斷串列埠通訊

2021-08-17 08:10:17 字數 1614 閱讀 4088

本文介紹,通過中斷方式運用stm32串列埠usart1。

首先,總結全文,設計步驟主要如下:

1,初始化gpio

2,初始化usart1

3,初始化nvic(巢狀向量中斷控制器)

4,編寫中斷服務函式

5,編寫主函式

詳細步驟如下:

void io_init()

以上**不在詳細介紹,前參看stm32基礎設計(1)---點亮led燈、sem32基礎設計(2)---查詢串列埠通訊

void usart1_init()

以上**不在詳細介紹,具體請參看stm32基礎設計(2)---查詢串列埠通訊

首先,讓我們來了解庫函式中的nvic結構體:

typedef struct

nvic_inittypedef;

了解了這個結構體後,就可以在初始化函式中定義這個變數了

nvic_inittypedef nvic;
另外在nvic初始化中還設定優先順序分組(哪怕只有乙個中斷也要分組,這是規定)。具體使用這個庫函式:

void nvic_prioritygroupconfig(uint32_t nvic_prioritygroup)

接下來,設定結構體中變數的值:

nvic.nvic_irqchannelpreemptionpriority = 1;//搶占優先順序

nvic.nvic_irqchannelsubpriority = 0;//子優先順序

nvic.nvic_irqchannel = usart1_irqn;//中斷通道

nvic.nvic_irqchannelcmd = enable;//通道使能

nvic_init(&nvic);//nvic暫存器初始化

先貼**,在解釋

void usart1_irqhandler(void)//注意,這個函式名必須這樣寫,否則進不了usart1中斷。詳見庫函式中的  irqn_type 結構體

else if(temp == 'k')//開燈

}if(usart_getflagstatus(usart1,usart_flag_txe) && temp != '0')//如果傳送暫存器為空,即可以傳送資料

}

老規矩,先貼**再解釋:

int main()

}

額。。。突然發現沒什麼好解釋的。

中斷串列埠通訊介紹到此完畢。

#include#define uint unsigned int

#define uchar unsigned char

void delay(uint n)

}void usart1_irqhandler(void)

else if(temp == 'k')

}if(usart_getflagstatus(usart1,usart_flag_txe) && temp != '0')

}

stm32中斷優先順序 STM32中斷系統

stm32 中斷非常強大,幾乎每個外設都可以產生中斷,因此這裡我們單獨使用一章來介紹它,為後面介紹外設中斷做鋪墊。學習本章可以參考 stm32f10x中文參考手冊 9 中斷和事件章節,cortex m3 權威指南 中文 chpt08 nvic與中斷控制章節。中斷概念 在學習 51 微控制器時,我們就...

STM32中斷巢狀

cortex m3核心支援256個中斷,其中包括16個核心中斷和240個外部中斷,且具有256級的可程式設計中斷設定,而stm32只用了其中一部分。stm32有84個中斷,包括16個核心中斷和68個可遮蔽中斷,具有16級可程式設計中斷優先順序。而我所使用的103系列只有60個可遮蔽中斷。優先順序的判...

STM32 中斷使用

stm32中斷有時候用多了容易亂,特此記錄一下,因為之前一直是m3 m0交叉用,韌體庫有些區別容易弄混,這裡說一下m3外部中斷的配置 步驟 1.將對應的io配置為輸入 2.將io對應的中斷的優先等級用nvic配置好 3.設定好對應io的中斷模式和觸發方式 4.將io所屬的中斷線設為中斷輸入源 1 以...