久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3056|回復: 1
打印 上一主題 下一主題
收起左側

STM32F103在uCOSII按鍵防抖加郵箱傳遞信息

[復制鏈接]
跳轉到指定樓層
樓主
ID:253140 發表于 2017-11-29 09:30 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
奉獻 STM32F103在uCOS_II操作系統按鍵防抖加郵箱傳遞信息 例子

單片機源程序如下:
  1. /******************** (C) COPYRIGHT 2013 STMicroelectronics ********************
  2. * File Name          : main.c
  3. *******************************************************************************/

  4. #include "includes.h"
  5. #include "stm32f10x.h"
  6. #include "stm32f10x_rcc.h"

  7. const uint32_t SystemFrequency         = 72000000;      /*!< System Clock Frequency (Core Clock) */

  8. #define USER1_KEY_PIN                                                                                GPIO_Pin_8                         //PA8
  9. #define        USER2_KEY_PIN                                                                                GPIO_Pin_3                        //PD3
  10. /*神州III號LED燈相關定義*/
  11. #define RCC_GPIO_LED                    RCC_APB2Periph_GPIOF    /*LED使用的GPIO時鐘*/
  12. #define LEDn                            4                       /*神舟III號LED數量*/
  13. #define GPIO_LED                        GPIOF                   /*神舟III號LED燈使用的GPIO組*/

  14. #define DS1_PIN                         GPIO_Pin_6              /*DS1使用的GPIO管腳*/
  15. #define DS2_PIN                         GPIO_Pin_7                                /*DS2使用的GPIO管腳*/
  16. #define DS3_PIN                         GPIO_Pin_8                          /*DS3使用的GPIO管腳*/
  17. #define DS4_PIN                         GPIO_Pin_9                                /*DS4使用的GPIO管腳*/

  18. GPIO_InitTypeDef GPIO_InitStructure;

  19. #define START_TASK_PRIO       4
  20. #define        TASK_1_PRIO                        5
  21. #define        TASK_2_PRIO                        6
  22. #define        TASK_3_PRIO                        7
  23. #define        TASK_4_PRIO                        8
  24. #define        TASK_KEY_PRIO                9

  25. /************設置棧大小(單位為 OS_STK )************/
  26. #define START_TASK_STK_SIZE   100  
  27. #define        TASK_1_STK_SIZE                100
  28. #define        TASK_2_STK_SIZE                100
  29. #define        TASK_3_STK_SIZE   100
  30. #define        TASK_4_STK_SIZE   100
  31. #define        TASK_KEY_STK_SIZE   100

  32. uint8_t LEDSTATE=0;
  33. OS_EVENT *Sem;
  34. OS_STK start_task_stk[START_TASK_STK_SIZE];                  //定義棧
  35. OS_STK task_1_stk[TASK_1_STK_SIZE];                  //定義棧
  36. OS_STK task_2_stk[TASK_2_STK_SIZE];                  //定義棧
  37. OS_STK task_3_stk[TASK_3_STK_SIZE];
  38. OS_STK task_4_stk[TASK_4_STK_SIZE];
  39. OS_STK task_key_stk[TASK_KEY_STK_SIZE];

  40. void Task_1_Shenzhou(void *arg)
  41. {
  42.     (void)arg;                                // 'arg' 并沒有用到,防止編譯器提示警告
  43.     while (1)
  44.     {
  45.                         GPIO_ResetBits(GPIO_LED,DS3_PIN); //點亮LED3
  46.                         OSTimeDlyHMSM(0, 0,0,300);                                  //延時
  47.                         GPIO_SetBits(GPIO_LED,DS3_PIN);          //熄滅LED3
  48.                         OSTimeDlyHMSM(0, 0,0,300);                  //延時  
  49.     }
  50. }

  51. void Task_2_Shenzhou(void *arg)
  52. {
  53.     (void)arg;                                // 'arg' 并沒有用到,防止編譯器提示警告
  54.     while (1)
  55.     {
  56.                         GPIO_ResetBits(GPIO_LED,DS2_PIN); //點亮LED2
  57.                         OSTimeDlyHMSM(0, 0,0,200);                                          //延時
  58.                         GPIO_SetBits(GPIO_LED,DS2_PIN);          //熄滅LED2
  59.                         OSTimeDlyHMSM(0, 0,0,200);                          //延時
  60.     }
  61. }

  62. void Task_3_Shenzhou(void *arg)
  63. {
  64.                 (void)arg;                                // 'arg' 并沒有用到,防止編譯器提示警告
  65.     while (1)
  66.     {
  67.                         LEDSTATE=~LEDSTATE;
  68.                        
  69.                         if(LEDSTATE)
  70.                         {
  71.                                 GPIO_ResetBits(GPIO_LED,DS4_PIN);       
  72.                         }
  73.                         else
  74.                         {
  75.                                 GPIO_SetBits(GPIO_LED,DS4_PIN);
  76.                         }
  77.                         OSTaskDel (OS_PRIO_SELF);
  78.     }
  79. }

  80. void Task_4_Shenzhou(void *arg)
  81. {
  82.                 uint8_t err;
  83.        
  84.                 (void)arg;                                // 'arg' 并沒有用到,防止編譯器提示警告
  85.        
  86.                 Sem = OSSemCreate(0);
  87.        
  88.     while (1)
  89.     {       
  90.                         OSSemPend(Sem,0,&err);
  91.                         LEDSTATE=~LEDSTATE;
  92.                         if(LEDSTATE)
  93.                         {
  94.                                 GPIO_ResetBits(GPIO_LED,DS4_PIN);       
  95.                         }
  96.                         else
  97.                         {
  98.                                 GPIO_SetBits(GPIO_LED,DS4_PIN);
  99.                         }
  100.     }
  101. }

  102. void Task_key_Shenzhou(void *arg)
  103. {
  104.                 uint8_t user1keystate;
  105.                 uint8_t user1key_press=0;
  106.        
  107.                 uint8_t user2keystate;
  108.                 uint8_t user2key_press=0;
  109.        
  110.                 (void)arg;
  111.                 while(1)
  112.                 {
  113.                        
  114.                         OSTimeDlyHMSM(0, 0,0,20);
  115.                         user1keystate = GPIO_ReadInputDataBit(GPIOA,USER1_KEY_PIN);
  116.                         user2keystate = GPIO_ReadInputDataBit(GPIOD,USER2_KEY_PIN);
  117.                         if(user1keystate==0)
  118.                         {
  119.                                         OSTimeDlyHMSM(0, 0,0,20);
  120.                                         user1keystate = GPIO_ReadInputDataBit(GPIOA,USER1_KEY_PIN);
  121.                                         if(user1keystate==0)
  122.                                         {
  123.                                                 user1key_press=1;
  124.                                         }
  125.                         }
  126.                         if(user2keystate==0)
  127.                         {
  128.                                         OSTimeDlyHMSM(0, 0,0,20);
  129.                                         user2keystate = GPIO_ReadInputDataBit(GPIOD,USER2_KEY_PIN);
  130.                                         if(user2keystate==0)
  131.                                         {
  132.                                                 user2key_press=1;
  133.                                         }
  134.                         }
  135.                         if(user1keystate==1 && user1key_press==1)
  136.                         {
  137.                                         user1key_press=0;
  138.                                         OSTaskCreate(Task_3_Shenzhou,(void *)0,&task_3_stk[TASK_3_STK_SIZE-1], TASK_3_PRIO);
  139.                         }
  140.                         if(user2keystate==1 && user2key_press==1)
  141.                         {
  142.                                         user2key_press=0;
  143.                                         OSSemPost(Sem);
  144.                         }
  145.                 }
  146. }

  147. void Task_Shenzhou(void *p_arg)
  148. {
  149.     (void)p_arg;               // 'p_arg' 并沒有用到,防止編譯器提示警告

  150.         OSTaskCreate(Task_1_Shenzhou,(void *)0,&task_1_stk[TASK_1_STK_SIZE-1], TASK_1_PRIO);//創建任務1

  151.         OSTaskCreate(Task_2_Shenzhou,(void *)0,&task_2_stk[TASK_2_STK_SIZE-1], TASK_2_PRIO);//創建任務2
  152.        
  153.         OSTaskCreate(Task_4_Shenzhou,(void *)0,&task_4_stk[TASK_4_STK_SIZE-1], TASK_4_PRIO);//創建任務2

  154.         OSTaskCreate(Task_key_Shenzhou,(void *)0,&task_key_stk[TASK_KEY_STK_SIZE-1], TASK_KEY_PRIO);
  155.        
  156.     while (1)
  157.     {
  158.                         GPIO_ResetBits(GPIO_LED,DS1_PIN); //點亮LED1
  159.                         OSTimeDlyHMSM(0, 0,0,100);
  160.                         GPIO_SetBits(GPIO_LED,DS1_PIN);          //熄滅LED1
  161.                         OSTimeDlyHMSM(0, 0,0,100);
  162.     }
  163. }

  164. int main(void)
  165. {
  166.         SystemInit();                /* 配置系統時鐘為72M */       

  167.         SysTick_Config(SystemFrequency/OS_TICKS_PER_SEC);  /* 初始化并使能SysTick定時器        */

  168.   /* 配置神舟III號LED燈使用的GPIO管腳模式 */
  169.           RCC_APB2PeriphClockCmd(RCC_GPIO_LED, ENABLE);           /*使能LED燈使用的GPIO時鐘*/
  170.           GPIO_InitStructure.GPIO_Pin = DS1_PIN|DS2_PIN|DS3_PIN|DS4_PIN;
  171.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  172.           GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  173.           GPIO_Init(GPIO_LED, &GPIO_InitStructure);               /*神州III號使用的LED燈相關的GPIO口初始化*/
  174.           GPIO_SetBits(GPIO_LED,DS1_PIN|DS2_PIN|DS3_PIN|DS4_PIN); /*關閉所有的LED指示燈*/
  175.        
  176.                 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //USER1_KEY is PA8
  177.     GPIO_InitStructure.GPIO_Pin = USER1_KEY_PIN;
  178.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  179.     GPIO_Init(GPIOA, &GPIO_InitStructure);
  180.        
  181.                 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); //USER2_KEY is PD3
  182.     GPIO_InitStructure.GPIO_Pin = USER2_KEY_PIN;
  183.     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  184.     GPIO_Init(GPIOD, &GPIO_InitStructure);

  185. /******** UCOSII 操作系統初始化開始 { ***********************************************************/
  186.         OSInit();        /* UCOSII 操作系統初始化 */

  187.         /* UCOSII創建一個任務 */                  
  188.         OSTaskCreate(Task_Shenzhou,(void *)0,&start_task_stk[START_TASK_STK_SIZE-1], START_TASK_PRIO);

  189.         OSStart();                 /* 啟動UCOSII操作系統 */
  190. /******** UCOSII 操作系統初始化結束 } ***********************************************************/
  191. }

復制代碼

完整代碼下載:
STM32F103-uCOS_II按鍵防抖加郵箱傳遞信息.zip (3.52 MB, 下載次數: 19)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:387410 發表于 2019-1-22 10:21 | 只看該作者
怎么看不出是郵箱傳輸啊?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久国产免费视网址 | 久久久久国产精品 | 夜夜操天天干 | 久久久久网站 | 久久一区二区视频 | 一级黄片一级毛片 | 九九久久久 | 红桃视频一区二区三区免费 | 国产一区视频在线 | 欧美在线网站 | 免费观看一级毛片视频 | 北条麻妃国产九九九精品小说 | 日日操操 | 欧美天堂| 99精品免费 | 国产日韩欧美 | 99tv| 天堂网色 | 国产高清视频 | 国产99久久精品一区二区永久免费 | 国产一区二区三区四区区 | 国产乱码精品1区2区3区 | 久久精品中文字幕 | 午夜视频网 | 久久精品国产免费看久久精品 | 精品国产一区二区三区日日嗨 | 99re国产视频 | 91久久国产综合久久91精品网站 | 羞羞视频免费在线 | 成人免费视频播放 | 伊人网影院 | 成人福利视频网站 | 免费看色 | 国产精品亚洲精品 | 国产精品一区二区av | 在线欧美一区二区 | 伊人在线 | av午夜激情 | 中文字幕在线观看一区 | av日韩在线播放 | 91视频国产精品 |