嵌入式筆記 | 正點原子STM32F103ZET6 4 | 中斷補充

1. 外設引腳重映射

1.1 定義

在STM32中,每個外設的引腳都有默認的GPIO端口,但有些引腳可以通過重映射寄存器將功能映射到其他端口。這種機制稱為引腳重映射,主要用于解決引腳復用沖突或優化PCB布線。

1.2 重映射的類型

  • 部分重映射(Partial Remap):某些外設引腳被重新映射,而部分仍使用默認引腳。
  • 完全重映射(Full Remap):外設的所有相關引腳都被重新映射到新的端口。

1.3 引腳重映射的配置過程(以串口1為例)

為了實現串口1的引腳重映射,需要按照以下步驟進行:

  1. 使能GPIO時鐘(針對重映射后的IO端口):
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 使能GPIOA時鐘
    
  2. 使能功能外設時鐘(例如串口1):
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); // 使能USART1時鐘
    
  3. 使能AFIO時鐘(復用輔助功能時鐘)。
    重映射必須使能AFIO時鐘
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
    
  4. 開啟重映射
    GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);
    
    其中,第一個參數決定了是部分重映射還是完全重映射

1.4 什么時候需要開啟AFIO輔助功能時鐘?

在對以下寄存器進行讀寫操作前,必須先打開AFIO時鐘

  • AFIO_MAPR:配置復用功能重映射。
  • AFIO_EXTICRx:配置外部中斷線映射。
  • AFIO_EVCR:配置EVENTOUT事件輸出。

2. STM32 中斷優先級管理

2.1 STM32 中斷概述

STM32 具有 84 個中斷,其中:

  • 16 個內核中斷(系統級中斷)。
  • 68 個可屏蔽中斷(外部中斷)(STM32F103 系列只有 60 個可屏蔽中斷,而 STM32F107 才有 68 個)。

這些外部中斷可以被屏蔽,并且支持可編程的優先級管理。

2.2 NVIC(嵌套向量中斷控制器)

STM32 的 NVIC 支持 16 級中斷優先級,用于管理不同外設和系統的中斷響應順序。

2.3 NVIC 中斷優先級分組

STM32 的 NVIC 允許對中斷優先級進行分組,每個中斷都有:

  • 主優先級(Preempt Priority):決定是否可以搶占低優先級中斷。
  • 子優先級(Sub Priority):決定在相同主優先級情況下,哪個中斷先被執行。

STM32 提供了 5 種優先級分組模式(由 SCB->AIRCR 配置):

分組模式主優先級位數子優先級位數
00 位4 位
11 位3 位
22 位2 位
33 位1 位
44 位0 位

2.4 設置 NVIC 優先級

使用 NVIC_PriorityGroupConfig() 設置 NVIC 分組:

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 設置 2 級搶占優先級,2 級子優先級

設置某個外設中斷的優先級:

NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;    // 選擇串口1中斷
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; // 搶占優先級 1
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;        // 子優先級 2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;    // 使能該中斷
NVIC_Init(&NVIC_InitStructure); // 配置 NVIC
  • **搶占優先級(Preemption Priority)**越小,優先級越高,可以打斷低優先級的中斷。
  • **子優先級(Sub Priority)**決定相同搶占優先級的情況下,哪個中斷先執行。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/74043.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/74043.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/74043.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何選擇合適的 AI 模型?(開源 vs 商業 API,應用場景分析)

1. 引言 在 AI 迅猛發展的今天,各類 AI 模型層出不窮,從開源模型(如 DeepSeek、Llama、Qwen)到商業 API(如 OpenAI 的 ChatGPT、Anthropic 的 Claude、Google Gemini),每種方案都有其優勢與適用…

攻克 3D 模型網站建設難題,看迪威系統優勢

在當今數字化時代,3D 模型廣泛應用于建筑設計、游戲開發、工業制造、文化創意等諸多領域。擁有一個功能強大的 3D 模型網站,對于企業展示產品、設計師分享作品、教育機構開展教學等都具有重要意義。然而,構建這樣一個網站卻并非易事&#xff…

使用uniapp的vite版本進行微信小程序開發,在項目中使用mqtt連接、訂閱、發布信息

1、保證在微信公眾平臺配置socket合法域名 2、項目中使用mqtt 建議在package.json中配置"mqtt": “4.1.0”,使用這個版本的依賴 頁面中引入mqtt并配置連接 // ts-ignoreimport * as mqtt from mqtt/dist/mqtt.js; //要使用這里面的const state reacti…

【FAQ】HarmonyOS SDK 閉源開放能力 —Map Kit(6)

1.問題描述: 使用華為內置的MapComponent, 發現顯示不出來。查看日志, MapRender底層有報錯。 解決方案: 麻煩按以下步驟檢查下地圖服務,特別是簽名證書指紋那部分。 1.一般沒有展示地圖,可能和沒有配置…

現代復古像素風品牌海報游戲排版設計裝飾英文字體 Psygen — Modern Pixel Font

Psygen 是一種像素化等寬字體,具有強烈的復古未來主義和網絡風格美學。塊狀的、基于網格的字體采用了早期的計算機界面、街機游戲排版和 ASCII 藝術。 該字體支持拉丁文、西里爾文和希臘文腳本,使其適用于多語言設計。擴展的字符集還具有唯一的符號和方…

小科普《DNS服務器》

DNS服務器詳解 1. 定義與核心作用 DNS(域名系統)服務器是互聯網的核心基礎設施,負責將人類可讀的域名(如www.example.com)轉換為機器可識別的IP地址(如192.0.2.1),從而實現設備間的…

lunar是一款無第三方依賴的公歷 python調用

lunar是一款無第三方依賴的公歷(陽歷)、農歷(陰歷、老黃歷)、佛歷和道歷工具,支持星座、儒略日、干支、生肖、節氣、節日、彭祖百忌、吉神(喜神/福神/財神/陽貴神/陰貴神)方位、胎神方位、沖煞、納音、星宿、八字、五行、十神、建除十二值星、青龍名堂等十二神、黃道…

力扣hot100——三數之和(雙指針)

題目:三數之和 排序 雙指針 本題的難點在于如何去除重復解。 算法流程: 1、特判,對于數組長度 n,如果數組為 null 或者數組長度小于 3,返回 []。 2、對數組進行排序。 3、遍歷排序后數組: &#xff08…

操作系統為ubantu的服務器上部署nginx軟件基礎步驟總結

今天在這里,我們總結一下ubantu的服務器上部署nginx軟件,請按照以下步驟進行安裝: 1、更新包列表: 首先更新你系統中的可用軟件包列表,以確保你可以安裝最新版本。 sudo apt update2、 Ubuntu上更新已安裝軟件包&…

記錄一次,rabbitmq開啟stomp插件之后,還是連不上15674端口的問題

原因是裝在docker 里面的rabbitmq 沒有映射15674端口,需重新刪除容器之后重新運行 docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 -p 15674:15674 -p 1883:1883 -p 15675:15675 rabbitmq:版本號 進入docker容器開啟插件 docker exec -it rabbitm…

MATLAB 控制系統設計與仿真 - 27

狀態空間的標準型 傳遞函數和狀態空間可以相互轉換,接下來會舉例如何有傳遞函數轉成狀態空間標準型。 對角標準型 當 G(s)可以寫成: 即: 根據上圖可知: 約當標準型 當 G(s)可以寫成: 即: 根據上圖…

1.FastAPI簡介與安裝

文章目錄 為什么選擇FastAPI?FastAPI支持的功能FastAPI的安裝第一個FastAPI應用運行應用 為什么選擇FastAPI? python web開發: Django: 適合大型復雜項目;Flask:適合靈活開發,搭建小型項目;FastAPI: 兼具開…

【MyDB】一個仿照MySQL的輪子項目系列文章匯總

迄今所有系列文章內容如下: 代碼位于xianghua-2/MYDB: 一個仿MySQL的簡易數據庫 1 項目環境配置以及整體項目結構 【MyDB】1-MyDB環境配置及項目結構-CSDN博客 2 TransactionManager事務管理模塊 【MyDB】2-TransactionManager 事務管理-CSDN博客 3 DataManage…

2025年汽車加氣站操作工考試精選題庫

汽車加氣站操作工題庫中題目及答案: 單項選擇題 1、按壓力容器的設計壓力分為( )個壓力等級。 A. 3 B. 4 C. 5 答案:B 2、緩沖罐的安裝位置在天然氣壓縮機( )。 A. 前 B. 后 C. 中間 答案&#…

【Unity Bug 隨記】使用Rider debug功能時Unity Reload Domain卡死問題

使用Rider debug功能時Unity Reload Domain卡死 檢查是否使用unity version control版本控制系統(VCS),使用的話刪除這個包,再嘗試,如果能正常斷點調試,說明確實是VCS的問題。 我和幾個網友都是這個原因…

麒麟銀河V10服務器RabbitMQ安裝

安裝步驟 rabbitMQ依賴于erlang的環境,所以需要先安裝erlang,erlang跟rabbitMQ是有版本之間的關聯關系的,根據對應的版本去安裝下載,保證少出問題。 可以通過官網來查看RabbitMQ和erlang之間的版本對應關系 rabbitMQ和erlang之間…

springboot操作redis集群,注意事項

整合redis可查看博文 springboot 整合redis_springboot整合redis csdn-CSDN博客 集群中操作注意事項 1 多鍵操作失敗: 當使用multiGet等需要同時訪問多個鍵的方法時,如果沒有使用Hash Tags,這些鍵可能會被分配到不同的槽中。如果這些槽位于…

優選算法訓練篇07--力扣LCR179.查找總價格為目標值的兩個商品

目錄 1.題目鏈接:LCR179.查找總價格為目標值的兩個商品 2.題目描述: 3.解法一(暴力解法,會超時): 4.解法二(雙指針-對撞指針): 1.題目鏈接:LCR179.查找總價格為目標值的兩個商品 2.題目描述: 購物車…

KMP-子串匹配算法-關鍵點理解

1.理解next[]數組的使用與來歷 2.求解next[]數組 一、kmp算法的原理 首先觀察暴力解法:假設主串為:abdxxabc,模式串為abxxabd。 暴力解法,就是對主串每個字符作為第一個字符,開始和模式串比較。 比如:從…

Flutter 學習之旅 之 flutter 使用 SQLite(sqflite) 實現簡單的數據本地化 保存/獲取/移除/判斷是否存在 的簡單封裝

Flutter 學習之旅 之 flutter 使用 SQLite(sqflite) 實現簡單的數據本地化 保存/獲取/移除/判斷是否存在 的簡單封裝 目錄 Flutter 學習之旅 之 flutter 使用 SQLite(sqflite) 實現簡單的數據本地化 保存/獲取/移除/判斷是否存在…