gpio編程
① 什麼是GPIO
嵌入式系統中常常有數量眾多,但是結構卻比較簡單的外部設備/電路,對這些設備/電路有的需要CPU為之提供控制手段,有的則需要被CPU用作輸入信號。而且,許多這樣的設備/電路只要求一位,即只要有開/關兩種狀態就夠了,比如燈亮與滅。對這些設備/電路的控制,使用傳統的串列口或並行口都不合適。所以在微控制器晶元上一般都會提供一個「通用可編程IO介面」,即GPIO。介面至少有兩個寄存器,即「通用IO控制寄存器」與「通用IO數據寄存器」。數據寄存器的各位都直接引到晶元外部,而對這種寄存器中每一位的作用,即每一位的信號流通方向,則可以通過控制寄存器中對應位獨立的加以設置。這樣,有無GPIO介面也就成為微控制器區別於微處理器的一個特徵。在實際的MCU中,GPIO是有多種形式的。比如,有的數據寄存器可以按照位定址,有些卻不能按照位定址,這在編程時就要區分了。比如傳統的8051系列,就區分成可位定址和不可位定址兩種寄存器。另外,為了使用的方便,很多mcu把glue logic等集成到晶元內部,增強了系統的穩定性能,比如GPIO介面除去兩個標准寄存器必須具備外,還提供上拉寄存器,可以設置IO的輸出模式是高阻,還是帶上拉的電平輸出,或者不帶上拉的電平輸出。這在電路設計中,外圍電路就可以簡化不少。另外需要注意的是,對於不同的計算機體系結構,設備可能是埠映射,也可能是內存映射的。如果系統結構支持獨立的IO地址空間,並且是埠映射,就必須使用匯編語言完成實際對設備的控制,因為C語言並沒有提供真正的「埠」的概念。如果是內存映射,那就方便的多了。GPIO優點GPIO的優點(埠擴展器)低功耗:GPIO具有更低的功率損耗(大約1μA,μC的工作電流則為100μA)。集成IIC從機介面:GPIO內置IIC從機介面,即使在待機模式下也能夠全速工作。小封裝:GPIO器件提供最小的封裝尺寸 ― 3mm x 3mm QFN!低成本:您不用為沒有使用的功能買單!快速上市:不需要編寫額外的代碼、文檔,不需要任何維護工作!靈活的燈光控制:內置多路高解析度的PWM輸出。可預先確定響應時間:縮短或確定外部事件與中斷之間的響應時間。更好的燈光效果:匹配的電流輸出確保均勻的顯示亮度。布線簡單:僅需使用2條就可以組成IIC匯流排或3條組成SPI匯流排。與ARM 的幾組GPIO引腳,功能相似,GPxCON 控制引腳功能,GPxDAT用於讀寫引腳數據。另外,GPxUP用於確定是否使用上拉電阻。
② GPIOB->CRL&=0XFFFFFFF0;這是什麼意思,特別是&=。。。這里不能理解
&=等價於GPIOB->CRL = GPIOB->CRL & 0xFFFFFFF0,GPIO口B的低8個埠控制寄存器CRL的低4個bits清為0,其餘bits不變。
學好編程:
1、明確學習目的,學習編程對大多數IT業人員來說都是非常有用的。學編程,做一名編程人員,從個人角度講,可以解決在軟體使用中所遇到的問題,改進現有軟體,可以為自己找到一份理想的工作添加重要得砝碼,有利於在求職道路上謀得一個好的職位。
2、從國家的角度,可以為中國的軟體產業做出應有的貢獻,一名優秀的程序員永遠是被爭奪的對象。學習編程還能鍛煉思維,使我們的邏輯思維更加嚴密;能夠不斷享受到創新的樂趣,將一直有機會走在高科技的前沿,因為程序設計本身是一種創造性的工作。
3、知識經濟時代給我們帶來了無限的機會,要想真正掌握計算機技術,並在IT行業里干出一番事業來,有所作為,具有一定的編程能力是一個基本條件和要求。
③ GPIO引腳初始化編程:STM32F103晶元DAC的兩個模擬
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC,ENABLE);
DAC_InitStructure.DAC_Trigger=DAC_Trigger_Software;
DAC_InitStructure.DAC_WaveGeneration=DAC_WaveGeneration_None;
DAC_InitStructure.DAC_OutputBuffer=DAC_OutputBuffer_Disable;
DAC_Init(DAC_Channel_1,&DAC_InitStructure);
DAC_Init(DAC_Channel_2,&DAC_InitStructure);
④ stm32f103VE的每個GPIO可以作為外部中斷源,簡要說出外部中斷編程步驟
摘要 STM32F103的中斷控制器支持19個外部中斷/事件請求。每個中斷設有狀態位,每個中斷/事件都有獨立的觸發和屏蔽設置。STM32F103的19個外部中斷為:
⑤ 嵌入式STM32編程中,讀GPIO口的數據的代碼
1,我懷疑這樣寫的用意在哪裡。兩個define 對於GPIOA的IDR寄存器是沒有任何意義的,32位的寄存器每一位該是0的是0,是1 的是1 沒有什麼變化,寄存器。如果是獲取寄存器的值是可以的。但是兩個的作用沒有什麼不同,他們寄存器的值都不會發生改變,如果實在要說區別的話,就是運算的時間和寫法的不同。
2,#define key1 (GPOIA -> IDR | 0xFFFFFFFF) //這是每一位都置位為1
#define key1 (GPIOA -> IDR | ( 1<X ) ) // x位置位為1
3, #define key1 (GPIOA -> IDR & 0X0) //每一位都清0
#define key1 (PPIOA -> IDR & (1<X)) // x位清0
⑥ GPIO和DIO的區別
1、什麼是GPIO?GPIO英文全名General-PurposeInput/OutputPorts,中文含義是通用I/O埠。
在嵌入式電腦系統中,通常需要以簡單的結構控制許多外部設備或電路。這些設備中的一些需要由CPU控制,而其他一些則需要工控機CPU提供輸入信號。而且,許多設備或電路僅需要兩種開/關配置,例如照明和led照明。使用傳統的串列或並行埠控制這些設備非常復雜,因此嵌入式微處理器通常會提供「通用可編程I/O埠」或GPIO。
GPIO埠至少需要兩個寄存器,一個用於控制的通用IO埠控制寄存器和一個用於數據存儲的通用I/O埠數據寄存器。數據寄存器的每個位對應於GPIO的硬體引腳,並且數據傳輸方向通過控制寄存器設置,通過該控制寄存器可以設置每個引腳的數據流
2、什麼是DIO?
DIO索引字輸入輸出電路
DI數字輸入埠(數字輸入)
DO數字量輸出埠(Digitalout)
DIO是DI和DO的通用名稱
通訊功能:支持GPRS和短消息雙通道數據傳輸;支持多中心數據通信。
功能:收集工控機串口設備數據,如串口儀表,採集器,PLC等。
遠程管理功能:支持遠程參數設置,程序升級。
⑦ GPIO引腳初始化編程 STM32F103晶元串列口1的數據收、發引腳分別為PA10、PA9,
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
⑧ 編程實現LED閃爍(該LED連接著GPIO0-3),頻率分別為2Hz,1Hz,0.5Hz,0.25Hz。
周期分別為0.5S 1S 2S 4S ,,,可以設置定時器10ms一個定時。0.5S的是250ms一個翻轉,其他情況翻倍。
如果有按鍵控制的話,每按一次,得到一個數字,用switch-case結構,不同的數字進入不同的閃爍。
⑨ GPIO是什麼和單片機、ARM上的引腳是一個概念么
GPIO這個問題很多人都混淆。
本身的概念
GPIO是General-Purpose Input / Output。
-------------
到了單片機上,單片機有很多管腳(PIN)
-------------
PIN除了一些特殊的,比如電源,比如地線,晶振接線等等,很多都可以任意定義成兩種功能中的一種:1. 模塊的管腳,2. GPIO
--------------
當定義為模塊管腳時,PIN起模塊中定義的功能。比如定義成SPI模塊的管腳,那就按照具體晶元的規定,或者定義成MOSI,或者定義成MISO,或者定義成SCLK,這些不是任意的。SPI是模塊,MISO等是功能管腳。
--------------
當定義成GPIO時,可以定義成高阻,輸入,或者輸出。這時候,就可以用作操作控制位,點LED燈等功能了。
--------------
很多模塊的功能管腳,嚴格意義上來講也是IO,比如CANH,CANL,所以這里為了避免混淆,就將沒有定義成模塊功能管腳的那些單片機管腳定義成General Purpose的IO了,以示區別。
⑩ gpio編程如何將程序
嘿嘿,那是當然了,STM32是32位單片機,51是8位機,兩者不是一個數量級的。
51單片機的I/O口就是I/O口,沒那麼多功能,
而STM32呢,它的GPIO口既可以做數字I/O,有些也可以做A/D,D/A,有些可以做SPI或者I2C對外通訊,還有些是做PWM脈寬輸出,功能各有不同。這些功能都需要實現配置好才能讓單片機知道你打算怎麼用這些口。51簡單死了,沒有A/D,D/A,沒有SPI通訊,也沒有PWM,就是I/O,每個口也只有那麼一個寄存器,直接讀寫就完了。
而到了32位機就不一樣了,那麼多功能,那麼多寄存器,如果不用庫的話,就要一位一位地把每個寄存器都設好,非常麻煩。ST專門給STM32編制了一個函數庫,所有的函數庫設置你只需要調用函數庫的函數就好。如果你英語還說得過去的話,看著函數庫就可以基本不用去每一位對寄存器了,犧牲了效率,但是非常非常的方便。
至於使用起來,也非常簡單,比如你要用GPIO,你就把STM32F10X_GPIO.C加到你的工程文件中去,然後在你在程序里引用一下#include "stm32f10x.h",就可以了。當然,我覺得這么做還要一個一個文件地想,到底需要不需要,乾脆把所有的C文件都加到工程里去,然後在編譯器里打開Level-2優化,這樣沒有用到的函數都不會被編譯到最終的hex文件中去了。想用到什麼函數都可以,非常方便的。