端口復用和重映射

一、端口復用

(1)端口復用概念

????????端口復用是將一個I/O賦予多個功能,通過設置I/O的工作模式來切換不同的功能。

????????STM32有很多的內置外設,這些外設的外部引腳都是與GPIO復用的。也就是說,一個GPIO如果可以復用為內置外設的功能引腳,那么當這個GPIO作為內置外設使用的時候,就叫做復用。

????????例如串口1的發送接收引腳是PA9,PA10,當我們把PA9,PA10不用作GPIO,而用做復用功能串口1的發送接收引腳的時候,叫端口復用。

(2)端口復用設置步驟

????????串口 1 的引腳對應的 IO 為 PA9,PA10.PA9,PA10 默認功能是 GPIO,所以當PA9,PA10 引腳作為串口 1 的 TX,RX 引腳使用的時候,那就是端口復用。
復用端口初始化有幾個步驟:

1) GPIO 端口時鐘使能。要使用到端口復用,當然要使能端口的時鐘了。RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);2) 復用的外設時鐘使能。比如你要將端口 PA9,PA10 復用為串口,所以要使能串口時鐘。RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);3) 端口模式配置。 在 IO 復用位內置外設功能引腳的時候,必須設置 GPIO 端口的模式//USART1_TX PA.9 復用推挽輸出GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復用推挽輸出GPIO_Init(GPIOA, &GPIO_InitStructure);//USART1_RX ?PA.10 浮空輸入GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空輸入GPIO_Init(GPIOA, &GPIO_InitStructure);

二、重映射

(1)重映射概念

????????每個內置外設都有若干個輸入輸出引腳,一般這些引腳的輸出端口都是固定不變的,為了讓設計工程師可以更好地安排引腳的走向和功能,在STM32中引入了外設引腳重映射的概念,即一個外設的引腳除了具有默認的端口外,還可以通過設置重映射寄存器的方式,把這個外設的引腳映射到其它的端口。

(2)AFIO重映射的操作步驟:

默認情況下,串口 1 復用的時候的引腳位 PA9,PA10,同時我們可以將 TX 和 RX 重新映射到管腳 PB6 和 PB7 上面去。所以重映射我們同樣要使能復用功能的時候講解的 2 個時鐘外,還要使能 AFIO 功能時鐘,然后
要調用重映射函數。詳細步驟為:1)使能 GPIOB 時鐘:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
2)使能串口 1 時鐘:RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
3)使能 AFIO 時鐘:RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
4)開啟重映射:GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);這樣就將串口的 TX 和 RX 重映射到管腳 PB6 和 PB7 上面了。

(3)AFIO 是什么?AFIO 時鐘什么時候需要開啟?

????????我們從《STM32中文參考手冊_V10》中找到:對寄存器 AFIO_EVCR、AFIO_MAPR 和 AFIO_EXTICRX 進行讀寫操作前,應當首先打開 AFIO 的時鐘(設置 APB2 外設時鐘使能寄存器 RCC_APB2ENR)。也就是說:當你需要配置 AFIO 這些寄存器的時候,需要把RCC_APB2ENR 寄存器的 AFIO 位置‘1’打開 AFIO 時鐘。
  跟 AFIO 相關的寄存器有:
  1、 事件控制寄存器(AFIO_EVCR)
  2、 復用重映射和調試I/O 配置寄存器(AFIO_MAPR)
  3、 外部中斷配置寄存器1(AFIO_EXTICR1)
  4、 外部中斷配置寄存器2(AFIO_EXTICR2)
  5、 外部中斷配置寄存器3(AFIO_EXTICR3)
  6、 外部中斷配置寄存器4(AFIO_EXTICR4)
  看看這些寄存器的定義,我們就明白,這些寄存器是用于“事件控制”、“重映射”、“調試IO配置”、“外部中斷”的。例如 AFIO_EXTICRX 用于選擇 EXTIx 外部中斷的輸入源。
  總結:當我們需要配置這些 AFIO 寄存器的時候,就需要打開 RCC_APB2ENR 寄存器的 AFIO 時鐘,而不是用到引腳復用功能的時候打開。

(4)部分重映射 & 完全重映射

a)部分重映射:功能外設的部分引腳重新映射,還有一部分引腳是原來的默認引腳。

b)完全重映射:功能外設的所有引腳都重新映射。

例如:部分重映射就是 PB10,PB11,PB12 重映射到 PC10,PC11,PC12 上。而 PB13 和 PB14 和沒有重映射情況是一樣的,都是 USART3_CTS 和 USART3_RTS 對應管腳。完全重映射就是將這兩個腳重新映射到 PD11 和 PD12 上去。我們要使用 USART3 的部分重映射,我們調用函數方法為:GPIO_PinRemapConfig(GPIO_PartialRemap_USART3, ENABLE);

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

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

相關文章

《PySpark大數據分析實戰》圖書上線啦

《PySpark大數據分析實戰》圖書上線啦 《PySpark大數據分析實戰》圖書上線啦特殊的日子關于創作關于數據關于Spark關于PySpark關于圖書/專欄 《PySpark大數據分析實戰》圖書上線啦 特殊的日子 不知不覺一轉眼入駐CSDN已經滿一年了,這真是一個充滿意義的特殊的日子&…

Linux命令詳解./configure、make、make install 命令學習

文章來自Linux命令詳解./configure、make、make install 命令-CSDN博客 文章目錄 1 編譯安裝命令詳解 1.1 簡介 1.2 詳細解釋 1.2.1 configure命令 1.2.2 make 1.2.3 make insatll 1.2.4 configure和make中的DESTDIR和PREFIX區別 1.2.4.1 configure中的PREFIX 1.2.4.2 make ins…

sfp8472學習CDR

1,cdr名稱解釋 因為光信號傳輸至一定距離的時候,通常是長距離傳輸,其波形會出現一定程度的失真,接收端接收到的信號是一個個長短不一的脈沖信號,這個時候在接收端,我們就無法得到我們需要的數據。所以,這個時候就需要有信號的再生,信號的再生功能為再放大、再整形和再…

[足式機器人]Part2 Dr. CAN學習筆記-自動控制原理Ch1-2穩定性分析Stability

本文僅供學習使用 本文參考: B站:DR_CAN Dr. CAN學習筆記-自動控制原理Ch1-2穩定性分析Stability 0. 序言1. 穩定的分類2. 穩定的對象3. 穩定的系統4. 系統穩定性的討論5. 補充內容——Transfer Function(傳遞函數) - nonzero Initial Condition(非零初始…

高防IP防御效果怎么樣,和VPN有區別嗎

高防IP主要是用于防御網絡攻擊,可以抵御各種類型的DDoS攻擊,隱藏源IP地址,提高網絡安全性和用戶體驗。主要目的是解決外部網絡攻擊問題,保護網絡安全,避免因攻擊而導致的業務中斷和數據泄露等問題。 而VPN則是一種可以…

ubuntu20 安裝docker

一.官網安裝文檔 (基本按官方文檔安裝) Install Docker Engine on Ubuntu | Docker Docs 二.安裝步驟 1.docker 需要64位操作系統、linux內核要在3.1以上 #uname -r 2.卸載可能存在的舊版本 #sudo apt-get remove docker docker-engine docker-ce …

《Mamba: Linear-Time Sequence Modeling with Selective State Spaces》閱讀筆記

論文標題 《Mamba: Linear-Time Sequence Modeling with Selective State Spaces》 作者 Albert Gu 和 Tri Dao 初讀 摘要 Transformer 架構及其核心注意力模塊 地位:目前深度學習領域普遍的基礎模型。 為了解決 Transformers 在長序列上的計算效率低下的問題…

【193】Java8調用POI 5.2.5生成帶圖片的Excel文件

本文假定 Excel 文件中保存的是員工數據,并且數據中帶有員工的頭像。代碼支持的圖片格式有png、bmp、jpg、gif。但是這里需要注意,有些網站上下載的圖片雖然后綴名是 jpg,但是文件二進制內容的格式是 WebP 的。Java8 目前官方api不支持 WebP …

【代碼隨想錄算法訓練營-第四天】【鏈表】24,19, 面試題 02.07,142

24. 兩兩交換鏈表中的節點 第一遍-遞歸-小看了一下題解 思路: 讀了兩遍題目才理解…相鄰節點的交換,這個操作很容易實現,但需要一個tmpNode因為是鏈表的題目,沒開始思考之前先加了dummyNode,還真管用把dummyNode作為…

空氣質量數據和氣象數據

1、北京、上海、廣州的空氣質量數據和氣象數據 要素如下: 逐日數據 時間跨度:2014.1.1-2022.3.31,共3012條數據 數據質量:98% 城市:只有北京、上海、廣州 可以用作論文數據 數據來源:中國環境監測總站…

23. 合并 K 個升序鏈表 --力扣 --JAVA

題目 給你一個鏈表數組,每個鏈表都已經按升序排列。 請你將所有鏈表合并到一個升序鏈表中,返回合并后的鏈表。 解題思路 對每個鏈表的首節點進行比較,獲取當前的最小節點;將每個階段的最小節點進行鏈接; 代碼展示 c…

亞馬遜云科技re_Invent 2023產品體驗:亞馬遜云科技產品應用實踐 國賽選手帶你看Elasticache Serverless

拋磚引玉 講一下作者背景,曾經參加過國內世界技能大賽云計算的選拔,那么在競賽中包含兩類,一類是架構類競賽,另一類就是TroubleShooting競賽,對應的分別為AWS GameDay和AWS Jam,想必也有朋友玩過此類競賽&…

4.權限特權轉移代碼

核心文件用戶文件引導文件 核心文件 ;------------------------新增--------------------------------; 本文件涉及了權限, 將使用調用門描述符來處理 低權限到高權限的轉移;------------------------權限---------------------------- ;此文件延用上個CORE.asm. 并做出一些修…

[linux] 解壓縮xz

在Linux命令行中解壓縮.xz文件,你可以使用以下幾種方法: 使用unxz工具: unxz filename.xz 這個命令會將filename.xz解壓縮為一個同名的未壓縮文件。如果原文件有其他的擴展名(如.tar.xz),那么這個擴展名會被…

關于洛谷P1007最快的方法

P1007 獨木橋 - 洛谷 | 計算機科學教育新生態 (luogu.com.cn) 題目背景 戰爭已經進入到緊要時間。你是運輸小隊長,正在率領運輸部隊向前線運送物資。運輸任務像做題一樣的無聊。你希望找些刺激,于是命令你的士兵們到前方的一座獨木橋上欣賞風景&#xf…

智能儀表板DevExpress Dashboard v23.1 - 支持自定義樣式創建

使用DevExpress Analytics Dashboard,再選擇合適的UI元素(圖表、數據透視表、數據卡、計量器、地圖和網格),刪除相應參數、值和序列的數據字段,就可以輕松地為執行主管和商業用戶創建有洞察力、信息豐富的、跨平臺和設…

STM32 配置TIM定時中斷常用庫函數

單片機學習! 目錄 ?編輯 1. 函數TIM_DeInit 2. 函數TIM_TimeBaseInit 配置時基單元 3. 函數TIM_TimeBaseStructInit 4. 函數TIM_Cmd 運行控制 5. 函數TIM_ITConfig 中斷輸出控制 6. 時基單元的時鐘選擇函數 6.1 函數TIM_InternalClockConfig 6.2 函數 TIM…

Configuring environment||ROS2環境配置

Goal: This tutorial will show you how to prepare your ROS 2 environment. Tutorial level: Beginner Time: 5 minutes ROS 2 relies on the notion (concept)of combining workspaces using the shell environment. “Workspace” is a ROS term …

C++進階篇8---智能指針

一、引言 為什么需要智能指針? 在上一篇異常中,關于內存釋放,我們提到過一個問題---當我們申請資源之后,由于異常的執行,代碼可能直接跳過資源的釋放語句到達catch,從而造成內存的泄露,對于這種…

C# Winform 日志系統

目錄 一、效果 1.刷新日志效果 2.單獨日志的分類 3.保存日志的樣式 二、概述 三、日志系統API 1.字段 Debug.IsScrolling Debug.Version Debug.LogMaxLen Debug.LogTitle Debug.IsConsoleShowLog 2.方法 Debug.Log(string) Debug.Log(string, params object[]) …