不知火舞的被虐|伊人天伊人天天综合网|博洛尼亚天气|任你懆这里只有精品4|久久美日韩精品久久|掌中之物漫画免费阅读观看|0丨d老妇

GPIO的案例

非常不錯的文章|GPIO模擬串口
0x23,二進制表示為00100011,傳輸順序為1->1->0->0->0->1->0->0 掌握清楚這個時序那么也就好用GPIO模擬了,除了需要兩個GPIO,還需要兩個定時器(分別用于接收和發送時序控制),另外需要說明的是,為方便起見,采樣頻率這里就設置成了波特率。 1) 對于接收,當RX引腳檢測到下降沿時,進入GPIO中斷,然后開啟一個定時器,第一次定時器周期設置為1/波特率的一半(目的是為了在中心處判斷是否為低電平,以表示是否為起始位),再之后就可以設置定時器周期為1/波特率,每隔此周期在定時器中斷里去采樣RX引腳電平,將數據接收完畢 2)對于發送,首先發送一個起始位,之后以1/波特率為周期,在定時器中斷里去發送比特位即可。 我在NXP的MCU上做了實現,經過測試波特率可以達到38400. 有需要代碼的添加管理員微信獲取(見本文最后二維碼)。 以下是對程序的簡單說明: 1)gpio_uart_demo_init() 里可以配置UART的相關參數,如波特率,奇偶校驗,數據位長度 2)void gpio_uart_read(uint8_t *bufptr, uint32_t size, void (*rx_callback)(void)) 這個函數為uart 接收函數,第一個參數為數據存放buffer,第二個數據為接收長度,第三個參數為callback函數。注意目前的實現是調用此函數后,當接收完指定長度數據后,會停止接收數據。 如果之后要繼續接收,需要再次調用這個函數。
展開
干貨|用3個IO口控制6個LED燈,怎么做到的?
查理復用是一種能夠在驅動LED,特別是驅動大量LED時有效地節約GPIO的方法。 使用該方法,n個GPIO可以驅動 n*(n-1) 個LED,所以: 使用2個GPIO可以驅動2個LED。 使用3個GPIO可以驅動6個LED。 使用4個GPIO可以驅動12個LED。 以此類推。 這種方式能夠實現的基礎是: 單片機GPIO的三個狀態:高電平、低電平、高阻態。 LED具有單向導電性。 查理復用設計的方法: 任意兩個GPIO引腳之間串入兩個LED,這兩個LED為并聯,且LED方向相反。 當你想要點亮某個特定的LED時,就將其兩端所連接到的GPIO引腳分別設定為高電平和低電平,其它剩余的GPIO引腳設定為高阻態。 前面電動牙刷中6個LED燈的電路,就是這么設計的。 下面從最簡單的開始,一步一步體會查理復用的電路設計。 1、使用2個GPIO時最簡單: LED1亮起時: LED2亮起時: 這里只用到高電平、低電平的狀態,不需要用高阻態的狀態。 2、使用3個GPIO時,前面已經分析過: 可以等效為下圖: 可以看出,確實是任意兩個GPIO之間均串入了兩個并聯的LED,且LED方向相反。 3、同樣的原理,使用4個GPIO時: 點亮LED1時: 其他LED亮起的情況不再列舉。 查理復用這樣的電路接法也會引發一些問題。 首先,LED亮起時完全由單片機的GPIO輸出電流,所以對于GPIO的電流驅動能力有一定的要求。
展開
看完這篇,不要說不懂串口通信!
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); // 配置串口的工作參數 // 配置波特率 USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUDRATE; // 配置 針數據字長 USART_InitStructure.USART_WordLength
展開
學好這些知識點,單片機不用怕!
最終用固件庫實現就變成這樣: // 定義一個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; /*調用庫函數,初始化GPIOB0*/ GPIO_Init(GPIOB, &GPIO_InitStructure); 倘若同一端口下不同引腳有不同的模式配置,每次對每個引腳配置完成后都要調用GPIO初始化函數,代碼如下: 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圖1
從這些知識點入手,學單片機就簡單多了
最終用固件庫實現就變成這樣: // 定義一個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; /*調用庫函數,初始化GPIOB0*/ GPIO_Init(GPIOB, &GPIO_InitStructure); 倘若同一端口下不同引腳有不同的模式配置,每次對每個引腳配置完成后都要調用GPIO初始化函數,代碼如下: 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); // 配置串口的工作參數 // 配置波特率 USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUDRATE; // 配置 針數據字長 USART_InitStructure.USART_WordLength
展開
如何獲取單片機程序運行時間?
= SET); } /* 關閉滴答定時器 */ SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk; } 檢驗Delay_us執行時間中用到的GPIO(gpio.h、gpio.c)的配置: #ifndef __GPIO_H #define __GPIO_H #include "stm32f10x.h" #define LOW 0 #define HIGH 1 /* 帶參宏,可以像內聯函數一樣使用 */ #define TX(a) if (a) \ GPIO_SetBits(GPIOB,GPIO_Pin_0);\ else \ GPIO_ResetBits(GPIOB,GPIO_Pin_0) void GPIO_Config(void); #endif #include "gpio.h" /** * @brief 初始化GPIO * @param 無 * @retval 無 */ void GPIO_Config(void) { /*定義一個GPIO_InitTypeDef類型的結構體*/ GPIO_InitTypeDef GPIO_InitStructure; /*開啟LED的外設時鐘*/ RCC_APB2PeriphClockCmd
展開
OM6625A 是一款針對藍牙低功耗(Bluetooth Low Energy)和專有 2.4GHz 無線應用的功耗SOC芯片
OM6625A集成最高64MHz高性能單片機,支持DMA、 GPIO 、SPI、UART、Timer、看門狗等功能,可支持32MHz外部晶體振蕩器,并集成多用途12bit ADC. OM6625A芯片集成512K Flash、64K SRAM、256bit EFUSE ,支持用戶Keil IDE(注意:keil 建議安裝 5 5 .36 6 以上的版本); OM6625A在線調試,可以用Jlink或Stlink的SWD模式,注意:在GPIO資源夠用的條件下,此調試口不要共用其他功能,SWCLK(GPIO00),SWDIO(GPIO01); OM6625A量產燒錄是通過串口燒錄,需要5根線,VCC、GND、Boo(t GPIO4)、Uart_TX 、(GPIO5)和Uart_RX(GPIO6),需注意,只有GPIO4/5/6是下載口,在GPIO資源夠用的條件下,此下載口不要共用其他功能。
展開
學習STM32單片機,繞不開的串口
下面把串口實驗分成幾個關鍵的步驟: 1)串口通信使用到的GPIO引腳配置 STM32F103系列的芯片一般都有三個串口以上,用來調試使用的串口一般都是使用USART1。其他的串口配置都是一樣的。 下面這段就是串口配置的程序: GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能USART1,GPIOA時鐘//USART1_TX GPIOA.9GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復用推挽輸出GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOA.9//USART1_RX GPIOA.10初始化GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PA10GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空輸入GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOA.10 串口使用的的GPIO口是PA9和PA10,所以只需配置這兩個IO口的輸入輸出模式就可以了。
展開
干貨|一個學妹寫的按鍵檢測函數把我秀翻了!
static void KEY_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; /* 第1步:打開GPIO時鐘 */ __HAL_RCC_GPIOE_CLK_ENABLE(); /* 第2步:配置所有的按鍵GPIO為浮動輸入模式(實際上CPU復位后就是輸入狀態) */ GPIO_InitStructure.Mode = GPIO_MODE_INPUT; /* 設置輸入 */ GPIO_InitStructure.Pull = GPIO_NOPULL; /* 上下拉電阻不使能 */ GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_VERY_HIGH; /* GPIO速度等級 */ GPIO_InitStructure.Pin = GPIO_PIN_4; HAL_GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.Pin = GPIO_PIN_3; HAL_GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.Pin = GPIO_PIN_2; HAL_GPIO_Init(GPIOB, &GPIO_InitStructure); } 5.按鍵掃描 按鍵掃描函數KEY_Scan()每隔 10ms 被執行一次。RunPer10ms函數在 systick中斷服務程序中執行。
展開
干貨|高質量代碼是怎么寫出來的?串口環形隊列
(); GPIO_InitStruct.Pin = GPIO_PIN_9; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_10; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); //使用中斷肯定要配置NVIC HAL_NVIC_SetPriority(USART1_IRQn, 1, 0); HAL_NVIC_EnableIRQ(USART1_IRQn); } } 3.定義一個結構頭rt_ringbuffer 類型的變量ring_buf,變量名隨便取,阿貓阿狗都可以,只要你自己認得就行。
展開
GPIO圖2
干貨|高質量代碼是怎么寫出來的?串口環形隊列
(); GPIO_InitStruct.Pin = GPIO_PIN_9; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_10; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); //使用中斷肯定要配置NVIC HAL_NVIC_SetPriority(USART1_IRQn, 1, 0); HAL_NVIC_EnableIRQ(USART1_IRQn); } } 3.定義一個結構頭rt_ringbuffer 類型的變量ring_buf,變量名隨便取,阿貓阿狗都可以,只要你自己認得就行。
展開
IP403參考資料和引腳圖
特性 支持串并聯雙LED驅動和GPIO控制器 串并聯LED驅動器 支持一個串行輸入56個并行led或三串行輸入16個并行ed為每個串行輸入。 支持4-16mA可調電流源驅動,無限流電阻 支持LED熄滅模式,實現省電功能 提供級聯能力,提供更多的LED驅動輸出。 串行輸入級支持18V至33V邏輯電平 芯和LED驅動器的單33V供電電壓 通用輸入輸出(GPIO)可以通過2線串行接口訪問嗎提供52個通用輸入或輸出 一般的描述 IP403是一個雙功能的控制器芯片,串行到并行的LED驅動器和GPIO控制器。串并聯LED驅動器最多可更換7個 g GPIO控制器類似于常用的8255I/0控制器。此外,IP403提供了可編程的輸入穩定定時器,允許設計人員設置輸入反彈跳時間。IP403還為設計人員提供了靈活性,可以對單個輸入變化的中斷源進行編程。 當設置為LED驅動模式時,IP403可以直接驅動56個LED或48個LED,具體取決于單串行輸入或三串行輸入。如果設置為單串行輸入模式,所有LED驅動引腳都與內部移位寄存器連接在一起。如果設置為三路串行輸入模式,每條串行輸入對應16個LED驅動引腳,即總共48個LED驅動引腳。GPIO模式下提供52個GPIO
展開
關注 | 一款革命性的Arm處理器
首先,GPIO[0]輸出引腳被切換一次,然后執行如圖2所示的三個測試。在第一個測試中,從ROM中讀取數據并將其添加到累加器中,并與期望值進行比較(見圖2a)。如果值匹配,將兩個脈沖的短脈沖發送到GPIO[0],如圖3a擴展數據所示。如果值不同,擴展數據圖3b中GPIO[0]上脈沖的周期和占空比會增加。在第二個測試中(圖2b),將數據寫入RAM,讀回并進行比較。如果數據在從RAM中寫入或讀取時沒有損壞,則3個脈沖的短脈沖發送到GPIO[0],如圖3a中的擴展數據所示。如果數據被破壞,GPIO[0]上脈沖的周期和占空比會像以前一樣增加。在最后的測試中(圖2c),處理器進入一個無限循環并測量GPIO輸入引腳[1]上應用'1'的時間。如果GPIO[1]保持在'1'而沒有任何故障,GPIO[0]從'0'變為'1'。PlasticARM的時鐘頻率為20khz。由于它不使用任何計時器,軟件中選擇了一個值來表示GPIO[1]信號在20khz工作時保持在'1'約1秒。在擴展數據圖3a的模擬中,該值對應于20,459個時鐘周期,在20 kHz時產生1.02295 s。 制造完成后,PlasticARM在晶圓探針臺上進行測試,同時仍連接到玻璃載體上。包括時鐘信號在內的輸入信號是使用Xilinx的ZC702 FPGA評估板在外部生成的。輸入和輸出信號都是使用Saleae Logic Pro 16邏輯分析儀捕獲的。測量在3 V和4.5 V下進行,具有不同的時鐘頻率。擴展數據圖4顯示了電源設置為3 V和時鐘頻率為20 kHz的實驗。ZC702 I/O電壓將輸入和輸出限制為2.5 V。測量數據波形顯示在擴展數據圖4a中,與擴展數據圖3a中所有三個測試的RTL仿真中的波形相匹配.PlasticARM在3 V時最高可達29 kHz,在4.5 V時最高可達40 kHz。
展開
推薦二輪電動車儀表盤藍牙主芯片方案-HS6621CGC
隨著國內二輪電動車的火熱開啟,電動車的智能化程度越來越高;電動車的智能操控需求也越來越高,現在介紹藍牙控制面板的一些功能;例如:定位(GNSS),設防,實時上報數據(CAT.1);終端支持藍牙OTA升級;BMS(藍牙數傳);一鍵啟動;藍牙鑰匙(藍牙APP解鎖,無感解鎖)等等功能,這些功能都可以依托OM6621CXC系列作為主控來控制實現以上功能; 現在介紹HS6621CGC系列的芯片功能;全功能藍牙5.1標準,兼容2.4G私有協議通信,支持BLE 4種數據速率(2Mbps/1Mbps/500Kbps/125Kbps);;支持廣播擴展功能(長包廣播包合37個廣播信道);實時數字RSSI輸出,精度為1dB; 內核ARM Cortex-M4F, max 64MHZ,SRAM:64KB,SFLASH:512K;豐富外設接口:豐富GPIO口,DMA,支持QSPI LCD,支持QSPI PSRAM,支持UART,I2S,I2C,Timer,RTC,WDT,QDEX,ADC,音頻ADC等等; 芯片特性: ? HS6621CG-C/CW-C支持多達32路GPIO ? HS6621CQ-C支持多達21路GPIO ? HS6621CM-C支持多達17路GPIO ? 支持8通道DMA ? 支持2路UART接口,其中一路兼容ISO7816 ? 支持1路I2S接口 ? 支持3路I2C接口 ? 支持2路SPI接口 ? 支持QSPI LCD/ AMOLED控制器 ? 支持QSPI Flash控制器 ? 支持3路Timer, 帶有4路比較/捕獲/PWM通道 ? 支持RTC ? 支持看門狗 ? 支持3路QDEC GPADC ? HS6621CG-C/CW-C/CQ-C: 支持 8路單端差 分
展開