日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

物联网之STM32开发四(中断系统)

發(fā)布時(shí)間:2023/12/8 windows 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 物联网之STM32开发四(中断系统) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

STM32-中斷系統(tǒng)

內(nèi)容概要:

STM32中斷系統(tǒng)概述

外部中斷控制器EXTI

按鍵中斷實(shí)例

串口中斷實(shí)例

STM32中斷系統(tǒng)概述

內(nèi)容概要

中斷的基本概念

嵌套向量控制器NVIC

中斷及異常向量表

中斷優(yōu)先級(jí)

中斷的基本概念

?處理器中的中斷:在處理器中,中斷是一個(gè)過程,即CPU在正常執(zhí)行程序的過程中,遇到外部/內(nèi)部的緊急事件需要處理,暫時(shí)中止當(dāng)前程序的執(zhí)行,轉(zhuǎn)而去為處理緊急的事件,待處理完畢后再返回被打斷的程序處繼續(xù)往下執(zhí)行。中斷在計(jì)算機(jī)多任務(wù)處理,尤其是即時(shí)系統(tǒng)中尤為重要。比如uCOS,FreeRTOS等。

意義:中斷能提高CPU的效率,同時(shí)能對(duì)突發(fā)事件做出實(shí)時(shí)處理。實(shí)現(xiàn)程序的并行化,實(shí)現(xiàn)嵌入式系統(tǒng)進(jìn)程之間的切換。

中斷處理過程

進(jìn)入中斷:

? ??? 處理器自動(dòng)保存現(xiàn)場(chǎng)到堆棧里

? ? ? {PC, xPSR, R0-R3, R12, LR}

? ? ? 一旦入棧結(jié)束,ISR便可開始執(zhí)行

? ? ? 晚到的中斷會(huì)重新取ISR地址,但無需再次保存現(xiàn)場(chǎng)

退出中斷:

? ? ? 中斷前的現(xiàn)場(chǎng)被自動(dòng)從堆棧中恢復(fù)

? ? ? 一旦出棧完成,繼續(xù)執(zhí)行被中斷打斷的指令

? ? ? 出棧的過程也可被打斷,使得隨時(shí)可以響應(yīng)新的中斷,而不再進(jìn)行 ? ?

? ? ?現(xiàn)場(chǎng)保存

STM32F0中斷的體系結(jié)構(gòu)

NVIC的主要功能

中斷管理 ?

支持異常及中斷向量化處理 ?

支持嵌套中斷

中斷管理

Cortex-M0處理器中,每一個(gè)外部中斷都可以被使能或者禁止,并且可以被設(shè)置為掛起狀態(tài)或者清除狀態(tài)。處理器的中斷可以電平的形式的,也可以是脈沖形式的,這樣中斷控制器就可以處理任何中斷源。

中斷和異常向量表

STM32F0中斷和異常向量: ? ? ??

? ? Cortex-M0內(nèi)核可以處理15個(gè)內(nèi)部異常,和32個(gè)外部中斷。 ? ? ?

? ? STM32F051實(shí)際上只使用了6個(gè)內(nèi)部異常和28個(gè)外部中斷。

當(dāng)異常或中斷發(fā)生時(shí),處理器會(huì)把PC設(shè)置為一個(gè)特定地址,這一地址就稱為異常向量。每一類異常源都對(duì)應(yīng)一個(gè)特定的入口地址,這些地址按照優(yōu)先級(jí)排列以后就組成一張異常向量表。

向量化處理中斷的好處:

? ??統(tǒng)的處理方式需要軟件去完成。采用向量表處理異常,M0處理器會(huì)從存儲(chǔ)器的向量表中,自動(dòng)定位異常的程序入口。從發(fā)生異常到異常的處理中間的時(shí)間被縮減。

注:中斷和異常的區(qū)別:中斷是微處理器外部發(fā)送的,通過中斷通道送入處理器內(nèi)部,一般是硬件引起的,比如串口接收中斷,而異常通常是微處理器內(nèi)部發(fā)生的,大多是軟件引起的,比如除法出錯(cuò)異常,特權(quán)調(diào)用異常等待。不管是中斷還是異常,微處理器通常都有相應(yīng)的中斷/異常服務(wù)程序。

嵌套中斷

STM32F0中斷的優(yōu)先級(jí): ? ?

? ? 3個(gè)固定的優(yōu)先級(jí),都是負(fù)值,不能改變 ?

? ? 四個(gè)可編程優(yōu)先級(jí),用兩個(gè)bit位表示,00,01,10,11 ?

? ? 優(yōu)先級(jí)越小優(yōu)先級(jí)越高

注:不同優(yōu)先級(jí)的中斷同時(shí)發(fā)生,優(yōu)先處理優(yōu)先級(jí)編號(hào)較小的那個(gè) 同樣優(yōu)先級(jí)的中斷同時(shí)發(fā)生,中斷向量號(hào)較小的那個(gè)優(yōu)先響應(yīng)。

外部中斷控制器EXTI

內(nèi)容概要

外部中斷控制器EXTI

系統(tǒng)配置控制器SYSCFG

外部中斷/事件框圖

外部中斷控制器EXTI

在 STM32F05x 中,共有最多 28 中斷 / 事件線可用:

GPIO 口連接到 16 個(gè)外部中斷 / 事件線

系統(tǒng)配置控制器 (SYSCFG)

該器件具有一組配置寄存器。系統(tǒng)配置控制器的主要用途如下:

● 在部分 IO 口上啟用或禁用 I2C 超快模式 (Fast Mode Plus) 。

● 重映射部分從 TIM16 和 TIM17 , USART1 和 ADC 的 DMA 觸發(fā)源到其它不同的 DMA 通道上。

● 重映射存儲(chǔ)器到代碼起始區(qū)域。

● 管理連接到 GPIO 口的外部中斷。

● 管理系統(tǒng)的可靠性特性。

SYSCFG 外部中斷配置寄存器 1-4 (SYSCFG_EXTICR1—4)

外部中斷 / 事件框圖

按鍵中斷實(shí)例

內(nèi)容概要

按鍵原理圖分析

按鍵中斷編程步驟分析

按鍵中斷編程實(shí)例

按鍵原理圖分析

按鍵中斷編程步驟分析

1、使能相應(yīng)的時(shí)鐘

2、配置GPIO管腳為中斷功能

3、設(shè)置中斷優(yōu)先級(jí)

4、使能相應(yīng)的中斷

5、實(shí)現(xiàn)中斷服務(wù)程序

按鍵中斷編程實(shí)例

配置引腳功能:

設(shè)置串口:

打開中斷:

設(shè)置中斷觸發(fā)方式:

導(dǎo)出工程:

追入向量表中對(duì)應(yīng)的函數(shù):

繼續(xù)往下追相應(yīng)的函數(shù):

繼續(xù)往下追:

需要重新編寫的中斷處理程序:

重新編寫中斷處理程序并添加必要的頭文件:

串口中斷實(shí)例

內(nèi)容概要

原理圖分析

串口中斷編程步驟分析

串口中斷編程實(shí)例

串口原理圖分析

串口中斷編程步驟分析

1、使能相應(yīng)的時(shí)鐘

2、配置GPIO管腳為串口功能

3、設(shè)置中斷優(yōu)先級(jí)

4、使能相應(yīng)的中斷

5、實(shí)現(xiàn)中斷服務(wù)程序

串口中斷編程實(shí)例

引腳功能選擇為串口功能

設(shè)置通信協(xié)議

打開對(duì)應(yīng)中斷

在中斷向量表中找到對(duì)應(yīng)的向量,往里面追

串口接收中斷的實(shí)現(xiàn) ?

找到串口接收模式下的函數(shù),繼續(xù)往里面追

找到回調(diào)函數(shù)并改寫

改寫代碼如下:

main.c中定義一個(gè)全局變量用于存放字符串,并將串口接收中斷使能:

uint8_t buf[10];

?

HAL_UART_Receive_IT(&huart1, buf, 1); //串口接收中斷使能(這里設(shè)置的是接收一個(gè)字符就中斷)

在usart.c中重新編寫回調(diào)函數(shù):

??extern uint8_t buf[10]; void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {if(huart->Instance==USART1){//HAL_UART_Transmit(&huart1, "receive success!\n", 17, 100);printf("receive success : %c\n", buf[0]); //如果調(diào)用printf函數(shù),則需要重新編寫fputc函數(shù)HAL_UART_Receive_IT(&huart1, buf, 1); //每次調(diào)用中斷程序后都要重新使能} }重新編寫fputc函數(shù)如下: int fputc(int ch,FILE *f){ while((USART1->ISR&(1<<7)) == 0); USART1->TDR=(uint8_t)ch;return ch; }

測(cè)試結(jié)果:

?

串口發(fā)送中斷的實(shí)現(xiàn)

串口發(fā)送中斷使能:

HAL_UART_Transmit_IT(&huart1, "TX\n", 3);//串口發(fā)送中斷使能

追加到回調(diào)函數(shù):

重新編寫回調(diào)函數(shù):

void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) {if(huart->Instance==USART1)//判斷是否為串口1的發(fā)送中斷{printf("tx success!\n");//如果發(fā)生中斷,則打印一句話} }

測(cè)試結(jié)果:

?

?

總結(jié)

以上是生活随笔為你收集整理的物联网之STM32开发四(中断系统)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。