作者:WXP(翱翔云端的鳥) 聯系方式:328452854@QQ.com || 13100610853(聯系請注明CSDN) 申明:個人原創,轉載請先經過本人同意!請勿商用! 要說的話:個人水平有限,寫之前也看過許多大神的博客,不足之處,還請指正!
軟件環境:MDK5.22 STM32CUBEMX-4.18 硬件:STM32F103ZET6最小系統板 庫:HAL
STM32F103的GPIO有8種工作模式,分別由7個寄存器控制,下表成列了標準庫和HAL庫,其中HAL庫的上拉下拉分離出來由單獨的庫函數設置,需要先設置為輸入,再去設置上下拉模式.
STD HAL輸入 模擬輸入 GPIO_Mode_AIN GPIO_MODE_ANALOG 浮空輸入 GPIO_Mode_IN_FLOATING GPIO_MODE_INPUT 上拉輸入 GPIO_Mode_ipU GPIO_PULLUP 下拉輸入 GPIO_Mode_IPD GPIO_PULLDOWN輸出 推挽輸出 GPIO_Mode_Out_PP GPIO_MODE_OUTPUT_PP 開漏輸出 GPIO_Mode_Out_OD GPIO_MODE_OUTPUT_OD 復用推挽 GPIO_Mode_AF_PP GPIO_MODE_AF_PP 復用開漏 GPIO_Mode_AF_OD GPIO_MODE_AF_OD(1)GPIOx_CRL(x=A..E)–端口配置低寄存器
(2)GPIOx_CRH(x=A..E)–端口配置高寄存器
(3)GPIOx_IDR(x=A..E)–端口輸入數據寄存器
(4)GPIOx_ODR(x=A..E)–端口輸出數據寄存器
(5)GPIOx_BSRR(x=A..E)–端口位設置/清除寄存器
(6)GPIOx_BRR(x=A..E)–端口位清除寄存器
(7)GPIOx_LCKR(x=A..E)–端口配置鎖定寄存器(詳細見STM32參考手冊)
(1)浮空輸入:IO的電平完全由外部決定,如果懸空,IO的電平就是不確定的 (2)上拉輸入:帶上拉電阻輸入 (3)下拉輸入:帶下拉電阻輸入 (4)模擬輸入:ADC模擬輸入 (5)通用開漏輸出:類似集電極開路的集電極,不接上拉電阻只能輸出低電平,高電平需要上拉電阻 (6)通用推挽輸出:利用POMS和NMOS輸出高低電平,輸出1,PMOS導通,NMOS截止,VDD通過PMOS輸出高電平,低電平則反之,PMOS截止,NMOS導通,IO通過NMOS連接到GND(LED) (7)復用開漏輸出:片內外設功能時用到(TX1,MOSI,MISO,SCK,SS) (8)復用推挽輸出:片內外設功能時用到(SDA SCL)
關于8種工作模式,詳細部分可以參考 http://blog.csdn.net/guozhongwei1/article/details/52503469
(1)打開STM32CUBEMX
(2)選擇對應的MCU型號封裝
(3)STM32F103ZET6最小系統原理圖中可以看到,LED燈對應的是PB5和PE5,低電平點亮LED,高電平熄滅LED
(4)選擇PB5 PE5為輸出,晶振選擇位外部8MHZ,仿真選擇4PinJTAG
(5)選擇系統時鐘為72MHZ
(6)配置IO的初始化電平、輸出模式、速率
(7)電源配置默認即可
(8)設置工程名和路徑已經編譯的IDE
(9)生成代碼并打開
(10)打開后如圖 所示
(11)編譯看有無過錯,然后添加流水燈操作
(12)Download然后觀察現象(注意設置Debugger選擇對應的仿真器)
可以看到兩個LED燈間隔500ms同時閃爍
新聞熱點
疑難解答