STM32F1 端口復用、端口(部分和完全)重映射

端口復用功能
????????STM32 有很多的內置外設(比如:串口、ADC、DAC等是獨立的模塊和內核連接在一起),這些外設的外部引腳都是與 GPIO 復用的。也就是說,一個 GPIO如果可以復用為內置外設的功能引腳,那么當這個 GPIO 作為內置外設使用的時候,就叫做復用。
????????大家都知道,MCU 都有串口,STM32 有好幾個串口。比如說 STM32F103ZET6 有 5 個串口,我們可以查手冊知道,串口 1 的引腳對應的 IO 為 PA9,PA10.PA9,PA10 默認功能是 GPIO,所以當PA9,PA10 引腳作為串口 1 的 TX,RX 引腳使用的時候,那就是端口復用。查看芯片資料可知道那些口是復用端口。

復用端口初始化有幾個步驟:

  • GPIO 端口時鐘使能。要使用到端口復用,當然要使能端口的時鐘了。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  • 復用的外設時鐘使能。比如你要將端口 PA9,PA10 復用為串口,所以要使能串口時鐘。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
  • 端口模式配置。 在 IO 復用為內置外設功能引腳的時候,必須設置 GPIO 端口的模式,至于 在復用功能下 GPIO 的模式是怎么對應的,這個可以查看手冊《STM32 中文參考手冊 V10》 P110 的表格“8.1.11 外設的 GPIO 配置”。這里我們拿 Usart1 舉例:
    在這里插入圖片描述從表格中可以看出,我們要配置全雙工的串口 1,那么 TX 管腳需要配置為推挽復用輸出,RX 管腳配置為浮空輸入或者帶上拉輸入。

代碼如下:

//USART1_TX PA.9 復用推挽輸出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
GPIO_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;//PA10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空輸入
GPIO_Init(GPIOA, &GPIO_InitStructure);

我們在使用復用功能的是時候,最少要使能 2 個時鐘:

  • GPIO 時鐘使能
  • 復用的外設時鐘使能同時要初始化 GPIO 以及復用外設功能

端口重映射
????????為了使不同器件封裝的外設 IO 功能數量達到最優,可以把一些復用功能重新映射到其他一些引腳上。STM32 中有很多內置外設的輸入輸出引腳都具有重映射(remap)的功能。我們知道每個內置外設都有若干個輸入輸出引腳,一般這些引腳的輸出端口都是固定不變的,為了讓設計工程師可以更好地安排引腳的走向和功能,在 STM32 中引入了外設引腳重映射的概念,即一個外設的引腳除了具有默認的端口外,還可以通過設置重映射寄存器的方式,把這個外設的引腳映射到其它的端口。
????????簡單的講就是把管腳的外設功能映射到另一個管腳,但不是可以隨便映射的,具體對應關系《STM32 中文參考手冊 V10》的 P116 頁“8.3 復用功能和調試配置”有講解。這里我們同樣拿串口 1 為例來講解。
在這里插入圖片描述 ????????上圖是截取的中文參考手冊中的重映射表,從表中可以看出,默認情況下,串口 1 復用的時候的引腳位 PA9,PA10,同時我們可以將 TX 和 RX 重新映射到管腳 PB6 和 PB7 上面去。
????????所以重映射我們同樣要使能復用功能的時候講解的 2 個時鐘外,還要使能 AFIO 功能時鐘,然后要調用重映射函數。詳細步驟為:

  • 使能 GPIOB 時鐘:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  • 使能串口 1 時鐘:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
  • 使能 AFIO 時鐘:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

PS: 在對寄存器AFIO_MARR,AFIO_EXTICRX和AFIO_EVCP進行讀寫操作前,應首先打開AFIO時鐘。
1、 AFIO_MARR:配置復用功能映射
2、 AFIO_EXTICRX:配置外部中斷線映射
3、 AFIO_EVCP:配置EVENTOUT事件輸出

  • 開啟重映射:
GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);

這樣就將串口的 TX 和 RX 重映射到管腳 PB6 和 PB7 上面了。至于有哪些功能可以重映射,大家除了查看中文參考手冊之外,還可以從 GPIO_PinRemapConfig 函數入手查看第一個入口參數的取值范圍可以得知。在stm32f10x_gpio.h 文件中定義了取值范圍為下面宏定義的標識符,這里我們貼一小部分:

#define GPIO_Remap_SPI1 ((uint32_t)0x00000001) 
#define GPIO_Remap_I2C1 ((uint32_t)0x00000002) 
#define GPIO_Remap_USART1 ((uint32_t)0x00000004) 
#define GPIO_Remap_USART2 ((uint32_t)0x00000008) 
#define GPIO_PartialRemap_USART3 ((uint32_t)0x00140010) 
#define GPIO_FullRemap_USART3 ((uint32_t)0x00140030)

從上面可以看出,USART1 只有一種重映射,而對于 USART3,存在部分重映射和完全重映射。所謂部分重映射就是部分管腳和默認的是一樣的,而部分管腳是重新映射到其他管腳。而完全重映射就是所有管腳都重新映射到其他管腳。看看手冊中的 USART3 重映射表:
在這里插入圖片描述部分重映射就是 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/272335.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/272335.shtml
英文地址,請注明出處:http://en.pswp.cn/news/272335.shtml

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

相關文章

docker啟動容器后容器狀態為Exited (137) 5 seconds ago

1:因為容器里的運行的代碼報錯了,然后容器 Exited (1) 3 seconds ago 了,通過 docker logs -f container_id 能看到哪里錯了 容器樁體為exited,說明容器已經退出停止 先查看查看鏡像id ps images 在后臺運行一個容器 為了保證提…

ReflectionClass與Closure

<?php /*** Class A*/ class A{}$obj new ReflectionClass(A); var_export($obj.PHP_EOL); 類后面加上PHP_EOL會把當前類的詳細接口文檔打印出來。 ReflectionClass 可以利用這個動態創建類&#xff0c;動態使用類方法參數。 try{ //如果存在控制器名字的類 if(class_exis…

STM32中斷優先級的管理(NVIC)

STM32 NVIC 中斷優先級管理 CM3 內核支持 256 個中斷&#xff0c;其中包含了 16 個內核中斷和 240 個外部中斷&#xff0c;并且具有 256級的可編程中斷設置。STM32 并沒有使用 CM3 內核的全部東西&#xff0c;而是只用了它的一部分。STM32 有 84 個中斷&#xff0c;包括 16 個…

docker修改容器名字

查看一下容器的名字 這個laughing_elion是下載es時候默認的名字 修改容器名字 docker rename 容器原來名 要改為的名字 最后可以看到容器名已經修改成功

STM32 串行通信原理

處理器與外部設備通信的兩種方式&#xff1a; 并行通信 傳輸原理&#xff1a;數據各個位同時傳輸。優點&#xff1a;速度快缺點&#xff1a;占用引腳資源多 串行通信 傳輸原理&#xff1a;數據按位順序傳輸。優點&#xff1a;占用引腳資源少缺點&#xff1a;速度相對較慢 …

linus下centos7防火墻設置

CentOS7 默認使用firewalld防火墻&#xff0c;如果想換回iptables防火墻&#xff0c;可關閉firewalld并安裝iptables。 1:安裝firewalld服務 yum install firewalld 2、firewalld的基本使用 啟動&#xff1a; systemctl start firewalld &#xff08;關閉后顯示notrunning&a…

串口通信寄存器/庫函數配置、實例編寫

常用的串口相關寄存器 USART_SR狀態寄存器USART_DR數據寄存器USART_BRR波特率寄存器 串口操作相關庫函數&#xff08;省略入口參數&#xff09;&#xff1a; void USART_Init(); //串口初始化&#xff1a;波特率&#xff0c;數據字長&#xff0c;奇偶校驗&#xff0c;硬件流…

使用docker安裝Mongodb

下載mongo3.2的docker鏡像&#xff1a; docker pull mongo:3.2 使用docker命令啟動&#xff1a; docker run -p 27017:27017 --name mongo \ -v /mydata/mongo/db:/data/db \ -d mongo:3.2 查看已經成功啟動

移動端meta標簽

現在的手機或平板電腦等移動設備上的瀏覽器默認都有雙擊放大的設置&#xff0c;如何阻止雙擊放大&#xff1f;user-scalableno <!-- 禁止縮放 --> <meta name”viewport” content”widthdevice-width,initial-scale1.0,maximum-scale1.0,user-scalableno”> <!…

正點原子stm32--串口通信實驗講解里關于USART_RX_STA的問題與思考

這篇博文講的挺詳細的可以參考以下&#xff1a; USART_RX_STA詳解

什么是真正的程序員?

什么是真正的程序員 這篇文章的原文來自&#xff1a;A Little Printf Story作者仿照《小王子》中的情節&#xff0c;通過小printf遇見的不同類型的程序員&#xff0c;最后悟出什么才是真正的程序員&#xff01;第一次翻譯有很多不妥&#xff0c;歡迎留言指正。 文章略長&#x…

為什么會出現docker

docker鏡像&#xff0c;一次構建&#xff0c;到處運行

docker和虛擬機的區別

虛擬機缺點&#xff1a; docker和虛擬機的不同之處&#xff1a;

獨立看門狗實驗

為什么要看門狗 在由單片機構成的微型計算機系統中&#xff0c;由于單片機的工作常常會受到來自外界電磁場的干擾&#xff0c;造成程序的跑飛&#xff0c;而陷入死循環&#xff0c;程序的正常運行被打斷&#xff0c;由單片機控制的系統無法繼續工作&#xff0c;會造成整個系統…

Manthan, Codefest 16

暴力 A - Ebony and Ivory import java.util.*; import java.io.*;public class Main {public static void main(String[] args) {Scanner cin new Scanner (new BufferedInputStream (System.in));int a cin.nextInt ();int b cin.nextInt ();int c cin.nextInt ();for…

docker資源

Docker資源 Docker官方英文資源&#xff1a; docker官網&#xff1a;http://www.docker.com Docker windows入門&#xff1a;https://docs.docker.com/windows/ Docker Linux 入門&#xff1a;https://docs.docker.com/linux/ Docker mac 入門&#xff1a;https://docs.do…

ios apple pay 證書配置

一 環境配置 需要開發者賬號 開發者中心https://developer.apple.com/membercenter/index.action 添加一個APP IDs二&#xff0e;配置Merchant IDs商業ID 下面進行appids和商業id的綁定 之后在回到appids中查看id中的apple pay&#xff0c;發現已經變為可使用狀態了 接下來是為…

STM32 通用定時器基本原理

STM32F10x系列總共最多有8個定時器&#xff1a; 三種STM32定時器區別&#xff1a; 通用定時器功能特點描述&#xff1a; ①、 STM32 的通用 TIMx (TIM2、TIM3、TIM4 和 TIM5)定時器功能特點包括&#xff1a; 位于低速的APB1總線上(時鐘來源可以是APB1的時鐘) 16 位向上、向…