{"id":184,"date":"2024-11-01T17:48:49","date_gmt":"2024-11-01T09:48:49","guid":{"rendered":"https:\/\/mthdm.cc\/?p=184"},"modified":"2024-11-01T20:25:55","modified_gmt":"2024-11-01T12:25:55","slug":"%e5%bc%80%e6%ba%90%e5%a5%bd%e7%94%a8%e7%9a%84stm32%e5%a4%9a%e4%b8%aa%e7%8b%ac%e7%ab%8b%e6%8c%89%e9%94%ae%e6%89%ab%e6%8f%8f%e9%a9%b1%e5%8a%a8","status":"publish","type":"post","link":"https:\/\/mthdm.cc\/?p=184","title":{"rendered":"[\u5f00\u6e90]\u597d\u7528\u7684STM32\u591a\u4e2a\u72ec\u7acb\u6309\u952e\u626b\u63cf\u9a71\u52a8"},"content":{"rendered":"\n<p>\u57fa\u4e8eSTM32HAL\u5e93\u7684\u72ec\u7acb\u6309\u952e\u9a71\u52a8\u7a0b\u5e8f\uff0c\u652f\u6301\u6d88\u6296\uff0c\u8bc6\u522b\u957f\u77ed\u6309\uff0c\u88f8\u673a\u548cFreeRTOS\uff0c\u5b9e\u6d4b\u7a33\u5b9a\u6d88\u9664\u6296\u52a8<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u90e8\u7f72\u4f7f\u7528<\/h2>\n\n\n\n<p><strong>\u4f7f\u7528FreeRTOS<\/strong>\uff0c\u65b0\u5efa\u4e00\u4e2a\u6309\u952e\u4efb\u52a1\uff0c\u5ef6\u65f610ms\u5faa\u73af\u6267\u884c\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/* USER CODE END Header_KeyTask *\/\nvoid KeyTask(void const * argument)\n{\n  \/* USER CODE BEGIN KeyTask *\/\n  \/* Infinite loop *\/\n  for(;;)\n  {\n    key_scan(); \/* \u6309\u952e\u626b\u63cf *\/\n    osDelay(10);\n  }\n  \/* USER CODE END KeyTask *\/\n}<\/code><\/pre>\n\n\n\n<p><strong>\u4f7f\u7528\u88f8\u673a<\/strong>\uff0c\u5b9a\u65f6\u5668\u4e2d\u65ad\u6a21\u5f0f\uff0c10ms\u4e00\u6b21\u5b9a\u65f6\u5668\u4e2d\u65ad\uff0ccubemx\u5df2\u914d\u7f6e\u597d\u591a\u5b9a\u65f6\u5668\u4e2d\u65ad\u5468\u671f<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)     \/* \u5b9a\u65f6\u5668\u91cd\u88c5\u8f7d\u4e2d\u65ad\u56de\u8c03\u51fd\u6570 *\/\n{\n    if(htim == &amp;htim7) \n    {\n        key_scan();  \/* \u6309\u952e\u626b\u63cf *\/\n    }\n    \n}\n\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u4ee3\u7801\u90e8\u5206<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">key.c \u5168\u90e8\u4ee3\u7801<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n ****************************************************************************************************\n * @file        key.c\n * @author      \u76fe\u8ff7\n * @version     V1.0\n * @date        2024-11-1\n * @brief       \u72ec\u7acb\u6309\u952e\u626b\u63cf\u9a71\u52a8\u4ee3\u7801\uff0c\u652f\u6301\u957f\u6309\u77ed\u6309\n ****************************************************************************************************\n *\/\n \n#include  \"key.h\"\n\n\/* \u5b9a\u4e49\u6309\u952e\u7aef\u53e3\uff08\u53ea\u6709\u8fd9\u90e8\u5206\u9700\u8981\u4fee\u6539\uff09\n    \u4f8b\u5982\u8fd9\u6837\uff0c\u4e00\u5171\u4e09\u4e2a\u6309\u952e\uff0cPA0 PA1 PC3,\u5219\u9700\u8981\u586b\u5199\u4e3a\uff1a\n    GPIO_TypeDef* ports&#91;] = {GPIOA, GPIOA, GPIOC}; \n    uint16_t pins&#91;] = {GPIO_PIN_0, GPIO_PIN_1, GPIO_PIN_3}; \n    \u4e0a\u4e0b\u4e00\u4e00\u5bf9\u5e94\uff0c\u6309\u952e\u987a\u5e8f\u4ece\u5de6\u5230\u53f3\n*\/\n\nGPIO_TypeDef* ports&#91;] = {USER_KEY_GPIO_Port, KEY1_GPIO_Port, KEY2_GPIO_Port}; \nuint16_t pins&#91;] = {USER_KEY_Pin, KEY1_Pin, KEY2_Pin}; \n\n\n\/* \u7a0b\u5e8f\u90e8\u5206 *\/\n#define KEYS_COUNT (sizeof(pins) \/ sizeof(pins&#91;0]))     \/* \u8bfb\u53d6\u6309\u952e\u6570\u91cf *\/\nkeys key&#91;KEYS_COUNT];   \/* \u5b9a\u4e49\u7ed3\u6784\u4f53\u6570\u7ec4\u5b58\u653e\u6570\u636e *\/\n\nvoid shortkey(uint8_t key)   \/* \u77ed\u6309\u4e8b\u4ef6\uff08\u9700\u8981\u66f4\u591a\u6309\u952e\u76f4\u63a5\u6dfb\u52a0case\uff09 *\/\n{\n    switch(key) \n\t{\n\t\tcase 0:\/* \u6309\u952e1\u77ed\u6309\u4e8b\u4ef6 *\/\n\t\t{\n            HAL_GPIO_TogglePin(LED_R_GPIO_Port,LED_R_Pin);\n\t\t}\n\t\tbreak;\n\t\tcase 1:\/* \u6309\u952e2\u77ed\u6309\u4e8b\u4ef6 *\/\n\t\t{\n            HAL_GPIO_TogglePin(LED_G_GPIO_Port,LED_G_Pin);\n\t\t}\n\t\tbreak;\n        case 2:\/* \u6309\u952e3\u77ed\u6309\u4e8b\u4ef6 *\/\n\t\t{\n            HAL_GPIO_TogglePin(LED_B_GPIO_Port,LED_B_Pin);\n\t\t}\n\t\tbreak;\n    }\n}\n\nvoid longkey(uint8_t key)   \/* \u957f\u6309\u4e8b\u4ef6\uff08\u9700\u8981\u66f4\u591a\u6309\u952e\u76f4\u63a5\u6dfb\u52a0case\uff09 *\/\n{\n    \n    switch(key)\n\t{\n\t\tcase 0:\/* \u6309\u952e1\u957f\u6309\u4e8b\u4ef6 *\/\n\t\t{\n\t\t\tHAL_GPIO_TogglePin(LED_R_GPIO_Port,LED_R_Pin);\n\t\t}\n\t\tbreak;\n\t\tcase 1:\/* \u6309\u952e2\u957f\u6309\u4e8b\u4ef6 *\/\n\t\t{\n            HAL_GPIO_TogglePin(LED_G_GPIO_Port,LED_G_Pin);\n\t\t}\n\t\tbreak;\n        case 2:\/* \u6309\u952e3\u957f\u6309\u4e8b\u4ef6 *\/\n\t\t{\n            HAL_GPIO_TogglePin(LED_B_GPIO_Port,LED_B_Pin);\n\t\t}\n\t\tbreak;\n    }\n}\n\n\n\/* \u6309\u952e\u626b\u63cf\u90e8\u5206 *\/\nvoid key_scan()\n{\n    uint8_t i=0;\n    \/* \u6570\u636e\u4f4d\u5faa\u73af\u8bfb\u53d6GPIO\u5f15\u811a\u9ad8\u4f4e\u7535\u5e73 *\/\n    for(i=0;i&lt;KEYS_COUNT;i++)\n    {\n        key&#91;i].key_dat=HAL_GPIO_ReadPin(ports&#91;i],pins&#91;i]);\n    }\n    \n    \/* \u6bcf\u4e00\u8f6e\u5f00\u59cb\u5224\u65ad\u77ed\u6309\u662f\u5426\u89e6\u53d1 *\/\n    for(i=0;i&lt;KEYS_COUNT;i++)\n    {\n        if(key&#91;i].key_judge ==0 &amp;&amp; key&#91;i].key_flag==1)\n        {\n            \/* \u89e6\u53d1\u77ed\u6309\u4e8b\u4ef6\u5e76\u6e05\u9664\u6807\u5fd7\u4f4d *\/\n            shortkey(i);\n            key&#91;i].key_flag=0;\n        }\n    }\n    \/* \u72b6\u6001\u4f4d\u5224\u65ad *\/\n    for(i=0;i&lt;KEYS_COUNT;i++)\n\t{\n\t\tswitch(key&#91;i].key_judge)    \/* \u6309\u952e\u5224\u65ad\u4f4d\uff0c\u5224\u65ad\u6309\u952e\u662f\u5426\u6309\u4e0b\uff0c\u603b\u5171\u5224\u65ad\u4e09\u6b21\u6d88\u9664\u6296\u52a8 *\/\n\t\t{\n\t\t\tcase 0:\n\t\t\t{\n\t\t\t\tif(key&#91;i].key_dat==0)   \/* \u5982\u679c\u6309\u952e\u6309\u4e0b *\/\n\t\t\t\t{\n\t\t\t\t\tkey&#91;i].key_judge=1;     \/* \u6309\u952e\u6309\u4e0b\u5224\u65ad\u4f4d\u914d\u7f6e\u4e3a1\uff0c\u8fdb\u5165\u4e0b\u4e00\u6b21\u5224\u65ad *\/\n\t\t\t\t\tkey&#91;i].key_time=0;      \/* \u65f6\u95f4\u6e05\u96f6 *\/\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t\tcase 1:\n\t\t\t{\n\t\t\t\tif(key&#91;i].key_dat==0)       \/* \u91cd\u590d\u5224\u65ad\u6309\u952e\u6309\u4e0b\uff0c\u6d88\u9664\u6296\u52a8 *\/\n\t\t\t\t{\n\t\t\t\t\tkey&#91;i].key_judge=2;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tkey&#91;i].key_judge=0;     \/* \u5982\u679c\u6309\u952e\u672a\u6309\u4e0b\uff0c\u5224\u65ad\u4f4d\u5f52\u96f6\u3002\u518d\u91cd\u590d\u6d88\u6296\u64cd\u4f5c *\/\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t{\n\t\t\t\tif(key&#91;i].key_dat==1)        \/* \u6309\u952e\u672a\u6309\u4e0b\uff0c\u5224\u65ad\u4f4d\u5f52\u96f6\u3002\u518d\u91cd\u590d\u6d88\u6296\u64cd\u4f5c *\/\n\t\t\t\t{\n\t\t\t\t\tkey&#91;i].key_judge=0;\n\t\t\t\t}\n\t\t\t\telse               \n\t\t\t\t{\n\t\t\t\t\tkey&#91;i].key_time++;      \/* \u6309\u952e\u6309\u4e0b,\u65f6\u95f4\u4f4d\u4e0d\u65ad\u81ea\u52a01 *\/\n\t\t\t\t\tif(key&#91;i].key_time&lt;100)\n\t\t\t\t\t{\n\t\t\t\t\t\tkey&#91;i].key_flag=1;  \/* \u65f6\u95f4\u4f4d\u5c0f\u4e8e100\uff0c\u77ed\u6309\u6807\u5fd7\u7f6e1 *\/\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tkey&#91;i].key_longflag=1;  \/* \u65f6\u95f4\u4f4d\u5927\u4e8e100\uff0c\u957f\u6309\u6807\u5fd7\u7f6e1 *\/\n                        \/* \u89e6\u53d1\u957f\u6309\u4e8b\u4ef6\u5e76\u6e05\u9664\u6807\u5fd7\u4f4d *\/\n                        longkey(i);\n                        key&#91;i].key_longflag=0;\n                        key&#91;i].key_time=0;\n                        key&#91;i].key_judge=3;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n            case 3:     \/* \u6267\u884c\u957f\u6309\u540e\u7b2c\u4e00\u8f6e\u626b\u63cf\uff0c\u6e05\u9664\u77ed\u6309\u6807\u5fd7\u4f4d\uff0c\u9632\u6b62\u8bef\u89e6\u53d1 *\/\n\t\t\t{\n\t\t\t\tif(key&#91;i].key_dat==1)\n\t\t\t\t{\n\t\t\t\t\tkey&#91;i].key_flag=0;      \/* \u6e05\u9664\u77ed\u6309\u6807\u5fd7\u4f4d *\/\n                    key&#91;i].key_judge=0;     \/* \u590d\u4f4d\u72b6\u6001 *\/\n\t\t\t\t\tkey&#91;i].key_time=0;      \/* \u65f6\u95f4\u6e05\u96f6 *\/\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n            default:    \/* \u51fa\u9519\u65f6\u6e05\u9664\u77ed\u6309\u6807\u5fd7\u4f4d\uff0c\u9632\u6b62\u8bef\u89e6\u53d1 *\/\n               \tif(key&#91;i].key_dat==1)\n\t\t\t\t{\n\t\t\t\t\tkey&#91;i].key_flag=0;      \/* \u6e05\u9664\u77ed\u6309\u6807\u5fd7\u4f4d *\/\n                    key&#91;i].key_judge=0;     \/* \u590d\u4f4d\u72b6\u6001 *\/\n\t\t\t\t\tkey&#91;i].key_time=0;      \/* \u65f6\u95f4\u6e05\u96f6 *\/\n\t\t\t\t}\n            }\t\n        }\n}\n<\/code><\/pre>\n\n\n\n<p>key.h \u5168\u90e8\u4ee3\u7801<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\n ****************************************************************************************************\n * @file        key.h\n * @author      \u76fe\u8ff7\n * @version     V1.0\n * @date        2024-11-1\n * @brief       \u72ec\u7acb\u6309\u952e\u626b\u63cf\u9a71\u52a8\u4ee3\u7801\uff0c\u652f\u6301\u957f\u6309\u77ed\u6309\n ****************************************************************************************************\n *\/\n\n#ifndef _KEY_H_\n#define _KEY_H_\n \n#include \"main.h\"\n \ntypedef struct \n{\n\tunsigned char key_dat;\/\/\u6309\u952e\u6570\u636e\u6807\u5fd7\u4f4d\n\tunsigned char key_judge;\/\/\u6309\u952e\u6309\u4e0b\u7684\u5224\u65ad\u4f4d\n\tunsigned char key_flag;\/\/\u6309\u4e0b\u6807\u5fd7\u4f4d\n\tunsigned char key_longflag;\/\/\u957f\u6309\u6807\u5fd7\u4f4d\n\tunsigned char key_time;\/\/\u6309\u952e\u65f6\u95f4\u6807\u5fd7\u4f4d\n}keys;\nvoid key_scan(void);\n \n \n#endif \n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u57fa\u4e8eSTM32HAL\u5e93\u7684\u72ec\u7acb\u6309\u952e\u9a71\u52a8\u7a0b\u5e8f\uff0c\u652f\u6301\u6d88\u6296\uff0c\u8bc6\u522b\u957f\u77ed\u6309\uff0c\u88f8\u673a\u548cFreeRTOS<\/p>\n","protected":false},"author":1,"featured_media":200,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19],"tags":[17,16,18,15],"class_list":["post-184","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-19","tag-cubemx","tag-c","tag-hal","tag-stm32"],"_links":{"self":[{"href":"https:\/\/mthdm.cc\/index.php?rest_route=\/wp\/v2\/posts\/184","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mthdm.cc\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mthdm.cc\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mthdm.cc\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mthdm.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=184"}],"version-history":[{"count":15,"href":"https:\/\/mthdm.cc\/index.php?rest_route=\/wp\/v2\/posts\/184\/revisions"}],"predecessor-version":[{"id":209,"href":"https:\/\/mthdm.cc\/index.php?rest_route=\/wp\/v2\/posts\/184\/revisions\/209"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/mthdm.cc\/index.php?rest_route=\/wp\/v2\/media\/200"}],"wp:attachment":[{"href":"https:\/\/mthdm.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=184"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mthdm.cc\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=184"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mthdm.cc\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=184"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}