STM32學習筆記之GPIO輸入與輸出
1、核心點:對於任意MCU中的外設(模組)操作方法:都是找該模組的工作框圖,根據框圖來寫程式
對於ST中的任何一個外設,都是掛載在不同的時鐘線下的,所有的時鐘線預設都是關閉的;在使用該外設之前,要開啟該外設的時鐘
步驟1 :
開啟晶片手冊(MCU的英文晶片手冊)2.2章節,找外設在哪一條時鐘線下
步驟2 :
開啟資料手冊,第6.3章節(時鐘章節)找到對應外設時鐘線的使能暫存器
步驟3:
在該暫存器中找到你的外設,看寫入什麼值
2、GPIO口功能:
作為普通的輸入、輸出功能
---輸入/輸出普通的高、低電平
作為複用的輸入、輸出功能
---作為其他外設傳輸時的功能
ST中的IO 可以作為輸入,也可以作為輸出,但是要使用者自己配置
3、輸出模式:
推輓輸出:
---可以輸出 高電平 ,也可以輸出 低電平
開漏輸出:
---只能輸出低電平,如果想在開漏模式下輸出高電平,必須在IO口外部外接一個上拉電阻
4、上拉下拉
在輸出配置時,選擇上拉/下拉對IO口電平、功能無明顯影響
在輸入配置時,上拉: 增強訊號的驅動能力;下拉: 訊號更穩定
我一直都不明白上拉/下拉到底有什麼用,有什麼影響,找了很多資料也沒有懂。這一部分都是硬體的知識,實在是搞不明白了。後來去問大佬這個到底該怎麼做,大佬說輸出時直接配置浮空就行,不用上下拉,輸入的話會有影響,不過一般影響不大,初學的話就都配置浮空。看來只能以後學的多了再回來看吧。
5、輸出模式:
推輓輸出:
---可以輸出高電平,也可以輸出低電平
開漏輸出:
---只能輸出低電平,如果想在開漏模式下輸出高電平,必須在IO口外部外接一個上拉電阻
6、輸出速率
GPIO輸出速度: 2MHz 25MHz 50MHz;
又稱輸出驅動電路的響應速度:(晶片內部在I/O口的輸出部分安排了多個響應速度不同的輸出驅動電路,使用者可以根據自己的需要選擇合適的驅動電路,通過選擇速度來選擇不同的輸出驅動模組,達到最佳的噪聲控制和降低功耗的目的。)
---可理解為:輸出驅動電路的頻寬:即一個驅動電路可以不失真地通過訊號的最大頻率。
如果一個訊號的頻率超過了驅動電路的響應速度,就有可能訊號失真。(訊號頻率為10MHz,而你配置了2MHz的頻寬,則10MHz的方波很可能就變成了正弦波。就好比是公路的設計時速,汽車速度低於設計時速時,可以平穩地執行,如果超過設計時速就會顛簸,甚至翻車。)如果GPIO驅動電路的響應速度相對於訊號頻率太快,會導致功耗加大、噪聲加大,會影響正常訊號的傳輸和識別。
---理解:CPU主頻為168M,這個速度就是類似的概念,驅動的頻率
GPIO的翻轉速度指:
輸入/輸出暫存器的0 ,1 值反映到外部引腳(APB2上)高低電平的速度.手冊上指出GPIO最大翻轉速度可達18MHz。
也就是說輸出速度不是指的每秒輸出多快/輸出多少次電平;只是選擇不同的速率,在IO口內部連結不同的功耗電路(對外部現象無影響)
7、輸出流程 :
①、把要輸出的電平寫到輸出資料暫存器
②、經過一個輸出驅動器控制(推輓/開漏)
③、經過一個上拉/下拉的開關
④、輸出的電平傳輸到IO口
輸出配置相關暫存器:
①、模式暫存器
②、輸出型別暫存器
③、輸出速率暫存器
④、上拉/下拉暫存器(對輸出來說,影響不大)
8、輸入流程:
①、外界過來的電平進入IO口
②、經過上拉/下拉的選擇
③、經過輸入模式配置
④、電平儲存在輸入資料暫存器中
⑤、通過讀輸入資料暫存器得到電平的狀態
9、輸入模式
①、模擬輸入:
ADC DAC 轉換
②、上拉輸入:
當硬體上IO口無外接上拉電阻,軟體上配置為該模式,虛擬一個外接電阻
③、下拉輸入: 使用較少
當硬體上IO無外接下拉電阻,軟體上配置成該模式,虛擬一個外接電阻
④、浮空輸入:
當硬體上IO口有外接電阻,軟體上配置該模式
10、為什麼輸入無速率?
輸入資料暫存器每隔1個AHB1時鐘週期對 I/O 引腳上的資料進行一次取樣
附上一些程式碼:
/*****************************
函式名 :LED_Init
函式引數 :無
函式返回值 :無
函式功能 :實現開發板對應LED燈的輸出功能配置
函式描述 :PF6 LED1
PF9 LED2
PF10 LED3
PC0 LED4
*****************************/
void LED_Init(void)
{
//開啟PF對應的外設時鐘
RCC->AHB1ENR |=(1<<5);
//開啟PC對應的外設時鐘
RCC->AHB1ENR |=(1<<2);
/*****配置PF6管腳的輸出功能****/
//模式暫存器
GPIOF->MODER &=~(0X3<<12); //清零
GPIOF->MODER |=(0X1<<12); //通用輸出模式
//輸出型別暫存器
GPIOF->OTYPER &=~(1<<6); //推輓輸出
//輸出速率暫存器
GPIOF->OSPEEDR &=~(0X3<<12); //清零
GPIOF->OSPEEDR |=(0X2<<12); //輸出速率50MHZ
/*****配置PF9管腳的輸出功能****/
//模式暫存器
GPIOF->MODER &=~(0X3<<18); //清零
GPIOF->MODER |=(0X1<<18); //通用輸出模式
//輸出型別暫存器
GPIOF->OTYPER &=~(1<<9); //推輓輸出
//輸出速率暫存器
GPIOF->OSPEEDR &=~(0X3<<18); //清零
GPIOF->OSPEEDR |=(0X2<<18); //輸出速率50MHZ
/*****配置PF10管腳的輸出功能****/
//模式暫存器
GPIOF->MODER &=~(0X3<<20); //清零
GPIOF->MODER |=(0X1<<20); //通用輸出模式
//輸出型別暫存器
GPIOF->OTYPER &=~(1<<10); //推輓輸出
//輸出速率暫存器
GPIOF->OSPEEDR &=~(0X3<<20); //清零
GPIOF->OSPEEDR |=(0X2<<20); //輸出速率50MHZ
/*****配置PC0管腳的輸出功能****/
//模式暫存器
GPIOC->MODER &=~(0X3<<0); //清零
GPIOC->MODER |=(0X1<<0); //通用輸出模式
//輸出型別暫存器
GPIOC->OTYPER &=~(1<<0); //推輓輸出
//輸出速率暫存器
GPIOC->OSPEEDR &=~(0X3<<0); //清零
GPIOC->OSPEEDR |=(0X2<<0); //輸出速率50MHZ
}
/*****************************
函式名:KEY_Init
函式引數:無
函式返回值:無
函式功能:實現開發板對應按鍵的輸入功能配置
函式描述:KEY1 ---PA0
KEY2 ----PE2
KEY3 ----PE3
KEY4 ----PE4
*****************************/
void KEY_init(void)
{
//開啟PA PE的外設時鐘
RCC->AHB1ENR |= (1<<0 | 1<<4);
/*********PA0輸入配置******/
//模式暫存器
GPIOA->MODER &=~(0X3<<0); //輸入模式
//上下拉暫存器
GPIOA->PUPDR &=~(0X3<<0); //浮空
/*********PE2 E3 E4 輸入配置******/
//模式暫存器
GPIOE->MODER &=~(0X3F<<4); //輸入模式
//上下拉暫存器
GPIOE->PUPDR &=~(0X3F<<4); //浮空
}
相關推薦
STM32學習筆記之GPIO輸入與輸出
1、核心點:對於任意MCU中的外設(模組)操作方法:都是找該模組的工作框圖,根據框圖來寫程式 對於ST中的任何一個外設,都是掛載在不同的時鐘線下的,所有的時鐘線預設都是關閉的;在使用該外設之前,要開啟該外設的時鐘 步驟1 :
Python學習筆記之【輸入和輸出】
文章內容基於廖雪峰Python教程,參考慕課網相關課程,並進行了整理。文章僅供本人學習使用,若侵權將立刻刪除。 若無特別說明,文章內容都針對於Python2.7版本。 輸出 print加上字串、整數或變數,即可實現輸出。 多個輸出項需要用逗號隔開,輸出時會自動以空格隔
ceph學習筆記之五 Pool與映射過程
ceph sds Pool Pool是一個抽象的存儲池,它規定了數據冗余的類型以及對應的副本分布策略。目前實現了兩種Pool類型:Replicated類型和Erasure Code類型。一個Pool由多個PG構成。對象映射過程 對象映射過程指的是查找對象在集群中分布的位置信息,其過程分為兩步:A、
python學習筆記之split()方法與with
很好 self 所有 簡單 car 版本 指定 操作 發生 Python split()方法 以下內容摘自:http://www.runoob.com/python/att-string-split.html 描述 Python split()通過指定分隔符對字符串進行切片
Python學習筆記之函數與正則
地址 tee 大於等於 格式 匿名函數 驗證碼 分組 indent 引用 Python函數 Pycharm 常用快捷鍵,例如復制當前行、刪除當前行、批量註釋、縮進、查找和替換。 常用快捷鍵的查詢和配置:Keymap Ctrl + D:復制當前行 Ctrl + E:刪除當前
Python學習筆記之面對象與錯誤處理
實現 單繼承 父類 成對 數據類型 itl 同時 屬性 子類 反射 __import__()函數用於加載類和函數 __import__(name[, globals[, locals[, fromlist[, level]]]]) 參數說明: n
Java學習筆記2(輸入與隨機數簡單介紹)
args image public 數據類型 system double next class gpo 輸入: import java.util.Scanner; public class ScannerDemo{ public static void main(Str
Framework7學習筆記之導航欄與工具欄的布局類型
class 文件中 div 工具 gpo 導航 log 不同的 布局 一:布局類型 導航欄、工具欄 有多種布局類型,他們分別有不同的表現效果,主要有:靜態布局、固定布局、穿透布局。 二:靜態布局(少用) 靜態布局的導航欄、工具欄,是寫死在頁面文件中的,
Linux學習筆記之基礎命令與獲取幫助文檔
內容 大寫 用戶 協議 當前時間 switch 使用 主機 當前 一、linux的基本原則:1、 由目的單一的小程序組成,組合小程序,完成復雜任務;2、 一切皆文件;3、 盡量避免捕獲用戶接口;4、 配置文件保存為純文本格式二、shellGUI :Graphic U
es6學習筆記之環境搭建與結構賦值
全域性安裝Babel-cli 在終端中輸入以下命令,如果你安裝很慢的話,可以使用淘寶映象的cnpm來進行安裝。安裝cnpm的方法,大家自己百度吧。 npm install -g babel-cli 雖然已經安裝了babel-cli,只是這樣還不能成功進行轉換,如果你不相信可以輸入下邊的命令
併發程式設計學習筆記之原子變數與非阻塞同步機制(十二)
概述 java.util.concurrent包中的許多類,比如Semaphore和ConcurrentLinkedQueue,都提供了比使用Synchronized更好的效能和可伸縮性.這是因為它們的內部實現使用了原子變數和非阻塞的同步機制. 近年來很多關於併發演算法的研究都聚焦在非阻塞演算法(nonb
程世東老師TensorFlow實戰——個性化推薦,程式碼學習筆記之②模型訓練與測試
個性化推薦第二部分:模型訓練 程式碼來自於知乎:https://zhuanlan.zhihu.com/p/32078473 /程式碼地址https://github.com/chengstone/movie_recommender/blob/master/movie_recommender.
網路資訊保安學習筆記之對稱密碼與傳統加密技術
對稱密碼 對稱密碼即加密和解密是可逆的過程 傳統加密技術 一般的傳統加密技術均為對稱密碼 一、對稱密碼模型 1.對稱加密有五個基本成分 明文:原始的可理解的訊息或資料,是輸入-----》常用X表示 加密演算法:對銘文進行代替或變換----》E() 金鑰:也是加
Java學習筆記之——自動裝箱與拆箱
自動裝箱與拆箱 基本型別與引用型別的互相轉換 1. 基本型別對應的包裝類 byte short char int &
《Android群英傳》學習筆記之Android體系與系統架構
一、Android系統架構 1.Linux核心層 Android核心系統服務依賴於Linux2.6核心,如安全性、記憶體管理、程序管理、網路協議棧和驅動模型。Linux核心也是作為硬體與軟體棧的抽象層
Java學習筆記之抽象類與介面的應用
1、抽象類的實際應用 — 定義模板 假設有這樣的場景,將人分為工人和學生,兩者都能說話,只是說話的內容不一樣,換句話說,說話這個功能應該是一個具體功能,說話的內容由學生和工人決定,我們可以用抽象類實現這個場景 abstract class Person2{ private S
STM32學習筆記之ADC轉換
1. ADC簡介 stm32f103最少有2個AD模數轉換器,每個ADC都有18個通道,可以測量16個外部和2個內部模擬量。最大轉換頻率為1Mhz,也就是轉換時間為1us(在 ADCCLK = 14Mhz,取樣週期為1.5個時鐘週期時)。最大時鐘超過14Mhz,將導致ADC轉換準確度降低。stm32的A
android學習筆記之客戶端與服務端保持session登入狀態
剛進公司不久,也沒有具體專案任務,只有一個混合開發模式,使用AppCan開發的專案。 雖然混合開發很便捷、很高效,使用html和js就可以完成。 但我依然對android原生開發有著極高的熱情,尤其是在體驗了Android 5.0版本之後,更是對原生體驗著迷。 所以,我利用
STM32學習筆記之ADC--DMA方式
}/*************************************************函式: void DMA_Config(void)功能: DMA配置 引數: 無返回: 無**************************************************/void DMA
Python學習筆記三:輸入和輸出
首先,登入 >>>是Python直譯器的提示符輸出1輸出字串,使用print(),在括號中加上字串,多個字串用逗號“,”隔開,每個字串用單引號包住注意:print()會依次列印每個字串,遇到逗號“,”會輸出一個空格2,print