新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32 GPIO應用筆記

        STM32 GPIO應用筆記

        作者: 時間:2016-11-26 來源:網絡 收藏

        void LED_TurnOn(u8 led)
        {

        }

        void Delay(vu32 nCount)
        {
        for(; nCount != 0; nCount--);
        }

        main()
        {

        //RCC_Configuration();
        LED_Init();

        while(1)
        {
        GPIO_SetBits(GPIOC, GPIO_Pin_9);
        Delay(0x8ffff);
        GPIO_ResetBits(GPIOC, GPIO_Pin_9);
        Delay(0x8ffff);
        GPIO_SetBits(GPIOC, GPIO_Pin_10);
        Delay(0x8ffff);
        GPIO_ResetBits(GPIOC, GPIO_Pin_10);
        Delay(0x8ffff);
        GPIO_SetBits(GPIOC, GPIO_Pin_11);
        Delay(0x8ffff);
        GPIO_ResetBits(GPIOC, GPIO_Pin_11);
        Delay(0x8ffff);
        GPIO_SetBits(GPIOC, GPIO_Pin_12);
        Delay(0x8ffff);
        GPIO_ResetBits(GPIOC, GPIO_Pin_12);
        Delay(0x8ffff);
        }
        }
        注意:在這里用到了RCC和GPIO的庫函數,所以必須把這兩個函數加入工程。

        關于固件庫函數在文件夾:C:/Keil/ARM/RV31/LIB/ST/STM32F10x
        為了不在操作過程中避免改變KEIL文件夾下的庫函數,可以固件函數庫放到其他文件夾下,如:E:/jy/work/STM/WxlStm32/LAB/library
        其中stm32f10x_lib.c文件是整個庫的一些定義,是必須要的。
        加入后的工程為:

        GPIO庫函數簡單說明:
        函數名稱 功能描述
        GPIO_DeInit 重新初始化外圍設備GPIOx相關寄存器到它的默認復位值
        GPIO_AFIODeInit 初始化交錯功能(remap, event control和 EXTI 配置) 寄存器
        GPIO_Init 根據GPIO_初始化結構指定的元素初始化外圍設備GPIOx
        GPIO_StructInit 填充GPIO_初始化結構(GPIO_InitStruct)內的元素為復位值
        GPIO_ReadInputDataBit 讀指定端口引腳輸入數據
        GPIO_ReadInputData 讀指定端口輸入數據
        GPIO_ReadOtputDataBit 讀指定端口引腳輸出數據
        GPIO_ReadOtputData 讀指定端口輸出數據
        GPIO_SetBits 置1指定的端口引腳
        GPIO_ResetBits 清0指定的端口引腳
        GPIO_WriteBit 設置或清除選擇的數據端口引腳
        GPIO_Write 寫指定數據到GPIOx端口寄存器
        GPIO_ANAPinConfig 允許或禁止 GPIO 4 模擬輸入模式
        GPIO_PinLockConfig 鎖定GPIO引腳寄存器
        GPIO_EventOutputConfig 選擇GPIO引腳作為事件輸出
        GPIO_EventOutputCmd 允許或禁止事件輸出
        GPIO_PinRemapConfig 改變指定引腳的影射
        GPIO_EMIConfig 允許或禁止GPIO 8 和 9 的EMI 模式
        拓展實驗:
        在上面LED燈流水顯示的基礎之上加上按鍵程序,首先來看看按鍵的原理圖:

        當然這個原理圖也是相當之簡單的,不用讀解釋了,唯一注意的是OK鍵與其他三個鍵的區別是按下為高電平,其余三個按下為低電平。
        加入后的完整清單如下:
        /
        #include "stm32f10x_lib.h"

        GPIO_InitTypeDef GPIO_InitStructure;
        //鍵盤定義
        #define KEY_OK GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)
        #define KEY_DOWN GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)
        #define KEY_UP GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2)
        #define KEY_ESC GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3)
        //LED初始化
        void LED_Init(void)
        {
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOC, &GPIO_InitStructure);
        }
        //按鍵初始化
        void KEY_Init (void)
        {
        GPIO_InitTypeDef gpio_init;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
        gpio_init.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
        gpio_init.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA, &gpio_init);
        }
        //延遲函數
        void Delay(vu32 nCount)
        {
        for(; nCount != 0; nCount--);
        }
        //主函數
        main()
        {
        //RCC_Configuration();
        LED_Init();
        KEY_Init ();

        while(1)
        {
        if(!KEY_ESC)
        {
        while(!KEY_ESC) ;
        GPIO_SetBits(GPIOC, GPIO_Pin_9);
        Delay(0x8ffff);
        GPIO_ResetBits(GPIOC, GPIO_Pin_9);
        Delay(0x8ffff);
        }
        else if(!KEY_UP)
        {
        while(!KEY_UP) ;
        GPIO_SetBits(GPIOC, GPIO_Pin_10);
        Delay(0x8ffff);
        GPIO_ResetBits(GPIOC, GPIO_Pin_10);
        Delay(0x8ffff);
        }
        else if(!KEY_DOWN)
        {
        while(!KEY_DOWN) ;
        GPIO_SetBits(GPIOC, GPIO_Pin_11);
        Delay(0x8ffff);
        GPIO_ResetBits(GPIOC, GPIO_Pin_11);
        Delay(0x8ffff);
        }
        else if(KEY_OK)
        {
        while(KEY_OK) ;
        GPIO_SetBits(GPIOC, GPIO_Pin_12);
        Delay(0x8ffff);
        GPIO_ResetBits(GPIOC, GPIO_Pin_12);
        Delay(0x8ffff);
        }
        }
        }
        該例子是按下不同的按鍵,閃爍對應的LED燈。


        上一頁 1 2 下一頁

        關鍵詞: STM32GPIO應用筆

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 启东市| 饶河县| 怀柔区| 六枝特区| 崇义县| 沾益县| 柳江县| 仙居县| 新和县| 上高县| 巴东县| 璧山县| 皋兰县| 宁晋县| 卓资县| 延寿县| 南陵县| 土默特左旗| 鸡泽县| 石楼县| 庄河市| 陕西省| 蓬溪县| 和龙市| 广南县| 泉州市| 宝清县| 宜宾县| 突泉县| 潮州市| 宁安市| 眉山市| 湟源县| 临澧县| 稷山县| 邓州市| 凤山县| 安龙县| 五峰| 阿拉善盟| 台州市|