新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32-按鍵輸入實驗學習筆記

        STM32-按鍵輸入實驗學習筆記

        作者: 時間:2016-11-23 來源:網絡 收藏
        按鍵掃描函數key.c片段:
        [cpp]view plaincopy
        1. //按鍵初始化函數
        2. //特別注意:在該函數之后,JTAG將無法使用(SWD也無法使用)
        3. //如果想JTAG仿真,可以屏蔽該函數。
        4. //PA0.13.15設置成輸入
        5. voidKEY_Init(void)
        6. {
        7. RCC->APB2ENR|=1<<2;//使能PORTA時鐘
        8. GPIOA->CRL&=0XFFFFFFF0;//PA0設置成輸入
        9. GPIOA->CRL|=0X00000008;
        10. GPIOA->CRH&=0X0F0FFFFF;//PA13,15設置成輸入
        11. GPIOA->CRH|=0X80800000;
        12. GPIOA->ODR|=1<<13;//PA13上拉,PA0默認下拉
        13. GPIOA->ODR|=1<<15;//PA15上拉
        14. }
        15. //按鍵處理函數
        16. //返回按鍵值
        17. //0,沒有任何按鍵按下
        18. //1,KEY0按下
        19. //2,KEY1按下
        20. //3,KEY2按下WK_UP
        21. //注意此函數有響應優先級,KEY0>KEY1>KEY2!!
        22. u8KEY_Scan(void)
        23. {
        24. staticu8key_up=1;//按鍵按松開標志
        25. JTAG_Set(JTAG_SWD_DISABLE);
        26. if(key_up&&(KEY0==0||KEY1==0||KEY2==1))
        27. {
        28. delay_ms(10);//去抖動
        29. key_up=0;
        30. if(KEY0==0)
        31. {
        32. JTAG_Set(SWD_ENABLE);
        33. return1;
        34. }
        35. elseif(KEY1==0)
        36. {
        37. JTAG_Set(SWD_ENABLE);
        38. return2;
        39. }
        40. elseif(KEY2==1)
        41. {
        42. JTAG_Set(SWD_ENABLE);
        43. return3;
        44. }
        45. }elseif(KEY0==1&&KEY1==1&&KEY2==0)key_up=1;
        46. JTAG_Set(SWD_ENABLE);
        47. return0;//無按鍵按下
        48. }

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

        需要注意的地方是:
        1.KEY_Scan函數頻繁調用了JTAG_Set函數,每次按鍵掃描的時候都禁用了JTAG和SWD,這樣做的目的是使PA13和PA15用作普通IO口,從而檢測按鍵狀態,在按鍵掃描結束后,有開啟了SWD,這樣讓JLIK能夠繼續后面的跟蹤,這樣可以在JLINK不拔掉的情況下進行軟件仿真,但是代碼下載完了之后想用JLIK調試就不行了,因為JLINK會對IO有影響,一定要拔下JLINK。還有就是使用SWD模式的JLINK調試這個代碼的時候,不要去調試KEY_Scan函數,否則會引起JLINK追蹤中斷,導致調試終止,應當一步跳過。這個地方有點疑惑:軟件仿真不是不用JLINK嗎?問同學說是這個跟軟件設置有關,雖然沒用硬件,但是還是有影響,有待研究。
        2.key_up是按鍵松開標志,如果按下后不松開,就不會進if(),而是進else if,和while(!key)沒啥不同,按下了key2之后,return返回了一個3,函數就跳出來了,不會在往下執行了,所以按鍵具有響應優先級。



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 博爱县| 班玛县| 香格里拉县| 天台县| 临海市| 民乐县| 华蓥市| 五寨县| 普陀区| 青浦区| 苍山县| 思茅市| 正宁县| 吉木萨尔县| 云林县| 浪卡子县| 加查县| 家居| 墨竹工卡县| 武威市| 黑山县| 海伦市| 库尔勒市| 塔城市| 秭归县| 福鼎市| 务川| 揭西县| 襄垣县| 惠东县| 嘉义市| 黄山市| 四会市| 且末县| 尤溪县| 宁乡县| 白朗县| 班戈县| 尼勒克县| 隆尧县| 商都县|