新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32F103 PB口用作獨立按鍵

        STM32F103 PB口用作獨立按鍵

        作者: 時間:2016-11-19 來源:網絡 收藏
        前一段時間由于項目需要畫了一個STM32F103的最小系統板,項目中需要很多硬件資源于是我將PB口作為獨立按鍵輸入口,板子打樣回來后測試其他一切都還不錯但在獨立按鍵測試時出現了問題,測試時采用的是掃描方式,按鍵支持連續喝不連續兩種方式,出現以下問題:

        1、單次按鍵時沒有任何反應

        本文引用地址:http://www.104case.com/article/201611/318318.htm

        2、連續模式下PB3口控制下的LED一直閃爍,其他按鍵觸發也不正常。

        今天突然想起來解決這個問題,于是百度了許久才發現PB3與JTAG復用,于是關閉JTAG后解決了問題,現在和大家分享下希望對大家有用。 獨立按鍵掃描方式程序如下(使用PB口關閉JTAG用紅色字體標記):

        #ifndef __key_H
        #define __key_H

        #include "stm32f10x.h"
        #include "delay.h"

        #define key0 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0) //right
        #define key1 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1) //middle
        #define key2 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_2) //down
        #define key3 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_3) //left
        #define key4 GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_4) //up
        #define key_right  1
        #define key_mid 2
        #define key_down 3
        #define key_left 4
        #define key_up 5

        void KEY_init(void)
        {
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOBRCC_APB2Periph_AFIO,ENABLE); //配置時鐘
        GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);             //關閉

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0GPIO_Pin_1GPIO_Pin_2GPIO_Pin_3GPIO_Pin_4;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOB,&GPIO_InitStructure);
        }

        u8 KEY_scan(u8 mode)
        {
        static u8 key_p=1;
        if(mode)key_p=1;
        if(key_p&&(key0==0key1==0key2==0key3==0key4==0))
        {
        delay_ms(100);
        key_p=0;
        if(key0==0) return key_right;
        else if(key1==0)  return key_mid;
        else if(key2==0)  return key_down;
        else if(key3==0)  return key_left;
        else if(key4==0)  return key_up;
        }
        else if(key0==1&&key1==1&&key2==1&&key3==1&&key4==1) key_p=1;
        return 0;
        }
        #endif



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 都兰县| 新田县| 区。| 西吉县| 正宁县| 诏安县| 清水县| 洛扎县| 绥化市| 新邵县| 新源县| 当涂县| 奉贤区| 宁都县| 金门县| 突泉县| 三门峡市| 自治县| 巴青县| 行唐县| 张家川| 德令哈市| 新安县| 固阳县| 云阳县| 揭西县| 澳门| 东至县| 金溪县| 安西县| 上蔡县| 石家庄市| 东源县| 酉阳| 潜江市| 巧家县| 宣威市| 孟村| 涞水县| 沈阳市| 恩施市|