h1_key

當前位置:首頁 >新聞資訊 > 產(chǎn)品資訊>意法半導體>STM32F103單片機IO不夠用應該這么來
STM32F103單片機IO不夠用應該這么來
2022-06-23 644次


 

先說為什么會不夠用

  一般在項目開發(fā)階段需求都是慢慢的添加的,預計需要18IO結果20個還不夠,甚至有的時候已經(jīng)全部用完了現(xiàn)有的資源,還需要多出一個或者兩個IO來做一個系統(tǒng)運行指示燈這樣的功能,就沒必要換一款更高性能的單片機來做了,這時候就會想能不能再壓榨一下單片機把多余的資源釋放出來。其實STM32F103單片機JTAG端口重映射可以完成這樣的事情。

  STM32F103單片機JTAG端口重映射

  JTAG接口

  簡單理解這是一個下載程序用的接口使用的工具是Jlink

  SWD接口

  簡單理解就是一個下載程序的接口使用的工具是STlink

  IO

  簡單理解就是一個可以進行輸入輸出的普通接口

  STM32IO

  STM32有很多IO口,IO口占據(jù)了絕大多數(shù)的管腳,但是有的管腳天生就不平凡被安排了更牛逼的工作那就是下載程序用,如果想要它由牛逼變成普通就要對本事下載接口的管腳進行功能重新映射。

  映射的關系由寄存器進行控制也可以庫函數(shù)來實現(xiàn),但是映射的方式不多,也就三種

  §全功能 SWJJTAG沒有JTRST。

  §禁用JTAG,啟用SWJ。(PB3/PB4/PA15 可重映射為其他功能)

  §完全禁用 SWJJTAG。(PB3/PB4/PA13/PA14/PA15 均可重映射為其他功能)

  §為什么要這樣搞?

  因為這樣設計可以允許更多的GPIO被解放出來。

  比如

  第一種可以解放PB4

  第二種可以解放PB3 PB4 PA15

第三種可以解放PB3 PB4 PA13 PA14 PA15

 

 

為什么可以這樣搞?

  

7.png8.png

  

如何解放對應的IO?

    STM32F103單片機IO不夠用應該這么來

  先說為什么會不夠用

  一般在項目開發(fā)階段需求都是慢慢的添加的,預計需要18IO結果20個還不夠,甚至有的時候已經(jīng)全部用完了現(xiàn)有的資源,還需要多出一個或者兩個IO來做一個系統(tǒng)運行指示燈這樣的功能,就沒必要換一款更高性能的單片機來做了,這時候就會想能不能再壓榨一下單片機把多余的資源釋放出來。其實STM32F103單片機JTAG端口重映射可以完成這樣的事情。

  STM32F103單片機JTAG端口重映射

  JTAG接口

  簡單理解這是一個下載程序用的接口使用的工具是Jlink

  SWD接口

  簡單理解就是一個下載程序的接口使用的工具是STlink

  IO

  簡單理解就是一個可以進行輸入輸出的普通接口

  STM32IO

  STM32有很多IO口,IO口占據(jù)了絕大多數(shù)的管腳,但是有的管腳天生就不平凡被安排了更牛逼的工作那就是下載程序用,如果想要它由牛逼變成普通就要對本事下載接口的管腳進行功能重新映射。

  映射的關系由寄存器進行控制也可以庫函數(shù)來實現(xiàn),但是映射的方式不多,也就三種

  §

  全功能 SWJ,JTAG沒有JTRST

  §

  §

  禁用JTAG,啟用SWJ。(PB3/PB4/PA15 可重映射為其他功能)

  §

  §

  完全禁用 SWJJTAG。(PB3/PB4/PA13/PA14/PA15 均可重映射為其他功能)

  §

  §

  為什么要這樣搞?

  因為這樣設計可以允許更多的GPIO被解放出來。

  比如

  第一種可以解放PB4

  第二種可以解放PB3 PB4 PA15

  第三種可以解放PB3 PB4 PA13 PA14 PA15

  為什么可以這樣搞?

  

9.png10.png 

 

如何解放對應的IO?

 

進行端口復用

  ·

  ·

  ·

  ·

  ·

  ·

  ·

  ·

  ·

  ·

  ·

  AFIO -> MAPR &= ~(0x7 << 24); //1、清除[26 : 24]AFIO -> MAPR |= (0x4 << 24); //2、關閉JTAG-DP,關閉SW-DP

  AFIO -> MAPR &= ~(0x7 << 24); //1、清除[26 : 24]AFIO -> MAPR |= (0x2 << 24) ; //2、關閉JTAG-DP,開啟SW-DP

  AFIO -> MAPR &= ~(0x7 << 24); //1、清除[26 : 24]AFIO -> MAPR |= (0x1 << 24) ; //2、JTAG-DP + SW-DP NOJNRST

  AFIO -> MAPR &= ~(0x7 << 24); //1、清除[26 : 24]AFIO -> MAPR |= (0x0 << 24) ; //2、都被占用

  庫函數(shù)寫法

  

 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

AFIO -> MAPR &=  ~(0x7 << 24);   //1、清除[26 : 24]AFIO -> MAPR |=   (0x4 << 24);   //2、關閉JTAG-DP,關閉SW-DP
AFIO -> MAPR &=  ~(0x7 << 24);   //1、清除[26 : 24]AFIO -> MAPR |=   (0x2 << 24) ;  //2、關閉JTAG-DP,開啟SW-DP
AFIO -> MAPR &=  ~(0x7 << 24);   //1、清除[26 : 24]AFIO -> MAPR |=   (0x1 << 24) ;  //2、JTAG-DP + SW-DP NOJNRST
AFIO -> MAPR &=  ~(0x7 << 24);   //1、清除[26 : 24]AFIO -> MAPR |=   (0x0 << 24) ;  //2、都被占用

 

庫函數(shù)寫法

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

//開啟AFIO時鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //Full SWJ Disabled (JTAG-DP + SW-DP)GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
 //開啟AFIO時鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//JTAG-DP Disabled and *SW-DP Enabled*GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //開啟AFIO時鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRSTGPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE);

 

  ·

  ·

  ·

  ·

  ·

  ·

  ·

  ·

  ·

  ·

  ·

  AFIO -> MAPR &= ~(0x7 << 24); //1、清除[26 : 24]AFIO -> MAPR |= (0x4 << 24); //2、關閉JTAG-DP,關閉SW-DP

  AFIO -> MAPR &= ~(0x7 << 24); //1、清除[26 : 24]AFIO -> MAPR |= (0x2 << 24) ; //2、關閉JTAG-DP,開啟SW-DP

  AFIO -> MAPR &= ~(0x7 << 24); //1、清除[26 : 24]AFIO -> MAPR |= (0x1 << 24) ; //2、JTAG-DP + SW-DP NOJNRST

  AFIO -> MAPR &= ~(0x7 << 24); //1、清除[26 : 24]AFIO -> MAPR |= (0x0 << 24) ; //2、都被占用

  庫函數(shù)寫法

  

 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

AFIO -> MAPR &=  ~(0x7 << 24);   //1、清除[26 : 24]AFIO -> MAPR |=   (0x4 << 24);   //2、關閉JTAG-DP,關閉SW-DP
AFIO -> MAPR &=  ~(0x7 << 24);   //1、清除[26 : 24]AFIO -> MAPR |=   (0x2 << 24) ;  //2、關閉JTAG-DP,開啟SW-DP
AFIO -> MAPR &=  ~(0x7 << 24);   //1、清除[26 : 24]AFIO -> MAPR |=   (0x1 << 24) ;  //2、JTAG-DP + SW-DP NOJNRST
AFIO -> MAPR &=  ~(0x7 << 24);   //1、清除[26 : 24]AFIO -> MAPR |=   (0x0 << 24) ;  //2、都被占用

庫函數(shù)寫法

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

//開啟AFIO時鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //Full SWJ Disabled (JTAG-DP + SW-DP)GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
 //開啟AFIO時鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//JTAG-DP Disabled and *SW-DP Enabled*GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //開啟AFIO時鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//Full SWJ Enabled (JTAG-DP + SW-DP) but without JTRSTGPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE);

 

  • ST LIS331DLH:高性能超低功耗三軸MEMS加速度計詳解
  • ST意法半導體推出的LIS331DLH是一款超低功耗高性能三軸線性加速度計,屬于其著名的“nano”系列MEMS傳感器產(chǎn)品。這款器件采用先進的微機電系統(tǒng)技術,在微型化封裝中實現(xiàn)了卓越的運動感知能力。其3×3×1mm的超緊湊尺寸和僅20mg的重量,使它在消費電子和工業(yè)控制領域獲得了廣泛應用。
    2025-05-29 100次
  • ?意法半導體STM32N657Z0H3Q:重新定義高性能嵌入式系統(tǒng)的未來?
  • 在物聯(lián)網(wǎng)(IoT)、工業(yè)自動化及人工智能(AI)技術飛速發(fā)展的今天,嵌入式系統(tǒng)的性能、能效與集成度成為開發(fā)者關注的核心。意法半導體(STMicroelectronics)作為全球半導體行業(yè)的領軍企業(yè),近期推出的?STM32N657Z0H3Q?微控制器,以其突破性的架構設計、多領域適應性及卓越的能效表現(xiàn),為下一代智能設備樹立了全新標桿。本文將深入剖析這款產(chǎn)品的核心優(yōu)勢與技術亮點。
    2025-05-06 100次
  • 意法半導體STM32N657L0H3Q:集成專用AI加速單元,專為高效計算
  • 意法半導體STM32N657L0H3Q是STM32N6系列中的一款高性能微控制器(MCU),專為需要高效計算與人工智能加速的場景設計。作為ST首款集成專用AI加速單元的產(chǎn)品,其融合了Cortex-M55內核、Neural-ART NPU及多項創(chuàng)新技術,推動工業(yè)自動化、智能硬件等領域的邊緣計算能力升級。
    2025-05-06 132次
  • 意法半導體STM32N657B0H3Q:專為?邊緣AI與高性能計算場景?設計
  • STM32N657B0H3Q是意法半導體(STMicroelectronics)推出的?STM32N6系列旗艦級微控制器?,專為?邊緣AI與高性能計算場景?設計。其核心亮點包括集成?NPU(神經(jīng)處理單元)?、大容量片上SRAM、以及多媒體處理引擎,目標應用涵蓋智能眼鏡、工業(yè)視覺、車載電子等領域。
    2025-05-06 115次
  • 意法半導體STM32N657I0H3Q微控制器深度解析
  • STM32N657I0H3Q是意法半導體(STMicroelectronics)推出的高性能ARM Cortex-M55內核微控制器(MCU),屬于STM32N6系列中的旗艦型號。該芯片采用16nm FinFET先進制程工藝,主頻高達800MHz,集成4.2MB連續(xù)SRAM,并融合了神經(jīng)網(wǎng)絡加速器、圖形處理單元(GPU)及多模態(tài)外設接口,專為實時信號處理、邊緣AI及復雜嵌入式系統(tǒng)設計。
    2025-04-30 119次

    萬聯(lián)芯微信公眾號

    元器件現(xiàn)貨+BOM配單+PCBA制造平臺
    關注公眾號,優(yōu)惠活動早知道!
    10s
    溫馨提示:
    訂單商品問題請移至我的售后服務提交售后申請,其他需投訴問題可移至我的投訴提交,我們將在第一時間給您答復
    返回頂部