
發(fā)布
注冊
/
登錄GPIO
關注創(chuàng)建者:匿名 創(chuàng)建時間:2021-08-27

GPIO的實例教程
0x23,二進制表示為00100011,傳輸順序為1->1->0->0->0->1->0->0
掌握清楚這個時序那么也就好用GPIO模擬了,除了需要兩個GPIO,還需要兩個定時器(分別用于接收和發(fā)送時序控制),另外需要說明的是,為方便起見,采樣頻率這里就設置成了波特率。
1) 對于接收,當RX引腳檢測到下降沿時,進入GPIO中斷,然后開啟一個定時器,第一次定時器周期設置為1/波特率的一半(目的是為了在中心處判斷是否為低電平,以表示是否為起始位),再之后就可以設置定時器周期為1/波特率,每隔此周期在定時器中斷里去采樣RX引腳電平,將數(shù)據(jù)接收完畢
2)對于發(fā)送,首先發(fā)送一個起始位,之后以1/波特率為周期,在定時器中斷里去發(fā)送比特位即可。
我在NXP的MCU上做了實現(xiàn),經過測試波特率可以達到38400. 有需要代碼的添加管理員微信獲取(見本文最后二維碼)。
以下是對程序的簡單說明:
1)gpio_uart_demo_init() 里可以配置UART的相關參數(shù),如波特率,奇偶校驗,數(shù)據(jù)位長度
2)void gpio_uart_read(uint8_t *bufptr, uint32_t size, void (*rx_callback)(void)) 這個函數(shù)為uart 接收函數(shù),第一個參數(shù)為數(shù)據(jù)存放buffer,第二個數(shù)據(jù)為接收長度,第三個參數(shù)為callback函數(shù)。注意目前的實現(xiàn)是調用此函數(shù)后,當接收完指定長度數(shù)據(jù)后,會停止接收數(shù)據(jù)。 如果之后要繼續(xù)接收,需要再次調用這個函數(shù)。
展開 查理復用是一種能夠在驅動LED,特別是驅動大量LED時有效地節(jié)約GPIO的方法。
使用該方法,n個GPIO可以驅動 n*(n-1) 個LED,所以:
使用2個GPIO可以驅動2個LED。
使用3個GPIO可以驅動6個LED。
使用4個GPIO可以驅動12個LED。
以此類推。
這種方式能夠實現(xiàn)的基礎是:
單片機GPIO的三個狀態(tài):高電平、低電平、高阻態(tài)。
LED具有單向導電性。
查理復用設計的方法:
任意兩個GPIO引腳之間串入兩個LED,這兩個LED為并聯(lián),且LED方向相反。
當你想要點亮某個特定的LED時,就將其兩端所連接到的GPIO引腳分別設定為高電平和低電平,其它剩余的GPIO引腳設定為高阻態(tài)。
前面電動牙刷中6個LED燈的電路,就是這么設計的。
下面從最簡單的開始,一步一步體會查理復用的電路設計。
1、使用2個GPIO時最簡單:
LED1亮起時:
LED2亮起時:
這里只用到高電平、低電平的狀態(tài),不需要用高阻態(tài)的狀態(tài)。
2、使用3個GPIO時,前面已經分析過:
可以等效為下圖:
可以看出,確實是任意兩個GPIO之間均串入了兩個并聯(lián)的LED,且LED方向相反。
3、同樣的原理,使用4個GPIO時:
點亮LED1時:
其他LED亮起的情況不再列舉。
查理復用這樣的電路接法也會引發(fā)一些問題。
首先,LED亮起時完全由單片機的GPIO輸出電流,所以對于GPIO的電流驅動能力有一定的要求。
展開 最終用固件庫實現(xiàn)就變成這樣:
// 定義一個GPIO_InitTypeDef 類型的結構體
GPIO_InitTypeDef GPIO_InitStructure;
// 選擇要控制的IO 口
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
// 設置引腳為推挽輸出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
// 設置引腳速率為50MHz
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
/*調用庫函數(shù),初始化GPIOB0*/
GPIO_Init(GPIOB, &GPIO_InitStructure);
倘若同一端口下不同引腳有不同的模式配置,每次對每個引腳配置完成后都要調用GPIO初始化函數(shù),代碼如下:
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉輸入
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init
展開 最終用固件庫實現(xiàn)就變成這樣:
// 定義一個GPIO_InitTypeDef 類型的結構體
GPIO_InitTypeDef GPIO_InitStructure;
// 選擇要控制的IO 口
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
// 設置引腳為推挽輸出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
// 設置引腳速率為50MHz
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
/*調用庫函數(shù),初始化GPIOB0*/
GPIO_Init(GPIOB, &GPIO_InitStructure);
倘若同一端口下不同引腳有不同的模式配置,每次對每個引腳配置完成后都要調用GPIO初始化函數(shù),代碼如下:
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉輸入
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init
展開 GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
/* 第一步:初始化GPIO */
// 打開串口GPIO的時鐘
DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK, ENABLE);
// 將USART Tx的GPIO配置為推挽復用模式
GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure);
// 將USART Rx的GPIO配置為浮空輸入模式
GPIO_InitStructure.GPIO_Pin = DEBUG_USART_RX_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStructure);
/* 第二步:配置串口的初始化結構體 */
// 打開串口外設的時鐘
DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE);
// 配置串口的工作參數(shù)
// 配置波特率
USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUDRATE;
// 配置 針數(shù)據(jù)字長
USART_InitStructure.USART_WordLength
展開 
GPIO的相關專題、標簽、搜索
GPIO的最新內容
通過將GPIO0和GPIO1配置為 TXEN 和 RXEN 功能以控制外部功率放大器(PA)和LNA,可擴展通信范圍。頻率合成器完全集成,無需任何外部組件。
為了簡化系統(tǒng)應用,芯片的ID搜索、測溫數(shù)據(jù)內存訪問、功能配置等均基于數(shù)字單總線協(xié)議(One Wire,OW)指令,上位機微處理器只需一個GPIO端口便可進行讀寫訪問。單總線通信接口是通過共用一根數(shù)據(jù)總線來實現(xiàn)多節(jié)點傳感采集與組網的低成本方案,傳輸距離遠、支持節(jié)點數(shù)多,便于空間分布式傳感組網。較多可支持100個節(jié)點100至500米長的測溫節(jié)點串聯(lián)組網。
支持深度睡眠 + GPIO 喚醒,適合電池供電的低占空比應用。
封裝與可靠性
封裝:SOP8(超小體積,適合緊湊設計)。
工作溫度:?40℃ ~ +85℃,工業(yè)級溫度范圍。
內置 POR(上電復位)、LVR(低電壓復位),簡化外圍電路。
接口擴展性:提供28個GPIO、2個全雙工I2S接口(支持8-192kHz采樣率)、1個S/PDIF接口(支持HDMI音頻與ARC),以及4路數(shù)字/2路模擬麥克風輸入,適配多種外設連接。
-96 dBm Sensitivity@1Mbps
-93 dBm Sensitivity@2Mbps
-99 dBm Sensitivity@250Kbps
最大 13 dBm 輸出功率
I2C、2 路 UART
最多 11GPIO,25mA 輸出1 PGA,0~42.3dB/1.6dB step
麥克風支持差分和單端可以配置
集成溫度傳感器
4*32bit
外設2 個 GPIO 口,可被主控 MCU 控制;1個全雙工 UART @ max.3Mbps,用于log 輸出;4路 Audio-ADC信噪比(SNR)≥94dB,3路Audio-DAC信噪比≥105dB;采樣率支持:8KHz / 11.025KHz /12KHz/16KHz /22.05KHz/24KHz/32KHz/44.1KHz/48KHz。
內核,支持點屏和按鍵等操作
內置 fash 存儲器,支持頻段配置和數(shù)據(jù)記憶等
高效電源管理系統(tǒng):
-單電源供電(3.0V~4.3V)
-集成LDO與DCDC電源模塊
-支持軟/硬開關控制與8秒復位功能
-具備上電復位(POR)、低電壓監(jiān)測(LVD)與看門狗(WDG)
低功耗:
-支持 Sleep、Deep Sleep 和Powerdown 三種低功耗模式
-支持 GPIO
低功耗
- 接收模式:2.5mA@1Mbps(DCDC)
- 發(fā)射模式:5.06 mA@0dBm(DCDC)
- 待機模式:0.28uA
- 待機模式(SRAM保留):1.88uA(支持GPIO / XTL / RCL喚醒)
- 深度睡眠模式:3.37uA(All Logic Retention,GPIO、XTL、RCL可喚醒)
6.
,需要5根線,VCC、GND、Boo(t GPIO4)、Uart_TX 、(GPIO5)和Uart_RX(GPIO6),需注意,只有GPIO4/5/6是下載口,在GPIO資源夠用的條件下,此下載口不要共用其他功能。
? 支持XIP,128KB閃存
? 8 KByte SRAM+4KB ROM
? I2C、2 路UART
? 1-axis Quadrature Decoder
? 11路(外部7路+內部4路)12bit通用ADC,最高速率1M采樣率
? PWM(6路, 其中4路帶死區(qū)控制互補輸出),最高16位連續(xù)可調,支持中心對齊模式,支持剎車,支持pmw
和adc聯(lián)動
? 最多11GPIO