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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2062|回復: 0
收起左側

一個基于STM32網絡攝像頭視頻推送顯示的項目PCB源程序

[復制鏈接]
ID:730863 發表于 2020-4-18 10:34 | 顯示全部樓層 |閱讀模式
這是一個基于STM32F103ZET6芯片的視頻推送項,該項目已經用在了舞臺,視頻監控等項目上,是一個完整的工程。可以把網絡攝像頭等實時視頻推送給大屏、矩陣等高清大屏。

Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
51hei.png 51hei.png

單片機源程序如下:
  1. #include <main.h>
  2. /************************************************

  3. ************************************************/

  4. //任務優先級
  5. #define START_TASK_PRIO                                3
  6. //任務堆棧大小        
  7. #define START_STK_SIZE                                 128
  8. //任務控制塊
  9. OS_TCB StartTaskTCB;
  10. //任務堆棧        
  11. CPU_STK START_TASK_STK[START_STK_SIZE];
  12. //任務函數
  13. void start_task(void *p_arg);

  14. //TOUCH任務
  15. //設置任務優先級
  16. #define TOUCH_TASK_PRIO                                6
  17. //任務堆棧大小
  18. #define TOUCH_STK_SIZE                                128
  19. //任務控制塊
  20. OS_TCB TouchTaskTCB;
  21. //任務堆棧
  22. CPU_STK TOUCH_TASK_STK[TOUCH_STK_SIZE];
  23. //touch任務
  24. void touch_task(void *p_arg);

  25. //LED0任務
  26. //設置任務優先級
  27. #define LED0_TASK_PRIO                                 8
  28. //任務堆棧大小
  29. #define LED0_STK_SIZE                                128
  30. //任務控制塊
  31. OS_TCB Led0TaskTCB;
  32. //任務堆棧
  33. CPU_STK LED0_TASK_STK[LED0_STK_SIZE];
  34. //led0任務
  35. void led0_task(void *p_arg);

  36. //字庫更新任務
  37. //設置任務優先級
  38. #define FONTUPDATA_TASK_PRIO                7
  39. //任務堆棧大小
  40. #define FONTUPDATA_STK_SIZE                        512
  41. //任務控制塊
  42. OS_TCB FontupdataTaskTCB;
  43. //任務堆棧
  44. CPU_STK FONTUPDATA_TASK_STK[FONTUPDATA_STK_SIZE];
  45. //字庫更新任務
  46. void fontupdata_task(void *p_arg);

  47. //EMWINDEMO任務
  48. //設置任務優先級
  49. #define EMWINDEMO_TASK_PRIO                        5
  50. //任務堆棧大小
  51. #define EMWINDEMO_STK_SIZE                        2048
  52. //任務控制塊
  53. OS_TCB EmwindemoTaskTCB;
  54. //任務堆棧
  55. CPU_STK EMWINDEMO_TASK_STK[EMWINDEMO_STK_SIZE];
  56. //emwindemo_task任務
  57. void emwindemo_task(void *p_arg);

  58. ////////////////////////////////////////////////////////
  59. //看門狗任務
  60. //設置任務優先級
  61. #define DOG_TASK_PRIO                        4
  62. //任務堆棧大小
  63. #define DOG_STK_SIZE                        128
  64. //任務控制塊
  65. OS_TCB DogTaskTCB;
  66. //任務堆棧
  67. CPU_STK DOG_TASK_STK[DOG_STK_SIZE];
  68. //DOG_task任務
  69. void dog_task(void *p_arg);

  70. ////////////////////////////////////////////////////////

  71. int main(void)
  72. {        
  73.         OS_ERR err;
  74.         CPU_SR_ALLOC();
  75.         
  76.         delay_init();                    //延時函數初始化         
  77.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);         //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
  78.         uart_init(115200);                 //串口初始化為115200
  79.         USART2_Init(36,9600);        //初始化串口2為:9600,波特率.
  80.          LED_Init();                            //LED端口初始化
  81.         TFTLCD_Init();                        //LCD初始化        
  82.         KEY_Init();                                 //按鍵初始化
  83.         BEEP_Init();                        //初始化蜂鳴器
  84.         FSMC_SRAM_Init();                //初始化SRAM
  85.         my_mem_init(SRAMIN);         //初始化內部內存池
  86.         my_mem_init(SRAMEX);          //初始化外部內存池        
  87.         exfuns_init();                        //為fatfs文件系統分配內存
  88.         f_mount(fs[0],"0:",1);        //掛載SD卡
  89.         f_mount(fs[1],"1:",1);        //掛載FLASH
  90.    
  91.         while(font_init())                //初始化字庫
  92.         {
  93.                 LCD_ShowString(30,70,200,16,16,"Font Error!");
  94.                 while(SD_Init())        //檢測SD卡
  95.                 {
  96.                         LCD_ShowString(30,90,200,16,16,"SD Card Failed!");
  97.                         delay_ms(200);
  98.                         LCD_Fill(30,90,200+30,70+16,WHITE);
  99.                         delay_ms(200);                    
  100.                 }
  101.                 update_font(30,90,16,"0:");        //如果字庫不存在就更新字庫
  102.                 delay_ms(2000);
  103.                 LCD_Clear(WHITE);        //清屏
  104.                 break;
  105.         }
  106.         TP_Init();                                //觸摸屏初始化        
  107.         //IWDG_Init(6,625);            //與分頻數為256,重載值為625,溢出時間為4s        
  108.         IWDG_Init(5,625);            //與分頻數為128,重載值為625,溢出時間為2s        
  109.         OSInit(&err);                        //初始化UCOSIII
  110.         OS_CRITICAL_ENTER();        //進入臨界區
  111.         //創建開始任務
  112.         OSTaskCreate((OS_TCB         * )&StartTaskTCB,                //任務控制塊
  113.                                        (CPU_CHAR        * )"start task",                 //任務名字
  114.                                                          (OS_TASK_PTR )start_task,                         //任務函數
  115.                                                          (void                * )0,                                        //傳遞給任務函數的參數
  116.                                                          (OS_PRIO          )START_TASK_PRIO,     //任務優先級
  117.                                                          (CPU_STK   * )&START_TASK_STK[0],        //任務堆棧基地址
  118.                                                          (CPU_STK_SIZE)START_STK_SIZE/10,        //任務堆棧深度限位
  119.                                                          (CPU_STK_SIZE)START_STK_SIZE,                //任務堆棧大小
  120.                                                          (OS_MSG_QTY  )0,                                        //任務內部消息隊列能夠接收的最大消息數目,為0時禁止接收消息, 要定義宏OS_CFG_TASK_Q_EN>0,才可以使用這個內部的消息隊列
  121.                                                          (OS_TICK          )0,                                        //當使能時間片輪轉時用來設置任務的時間片長度,為0時為默認長度,默認長度為時鐘節拍除以10        使能時間片輪轉調度需要將OS_CFG_SCHED_ROUND_ROBIN_EN定義為1
  122.                                                          (void           * )0,                                        //用戶補充的存儲區
  123.                                                          (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //任務選項   指定允許檢測該任務的堆棧,指定清除該任務的堆棧
  124.                                                          (OS_ERR         * )&err);                                //存放該函數錯誤時的返回值
  125.         OS_CRITICAL_EXIT();        //退出臨界區         
  126.         OSStart(&err);  //開啟UCOSIII
  127.         while(1);
  128. }

  129. //開始任務函數
  130. void start_task(void *p_arg)
  131. {
  132.         OS_ERR err;
  133.         CPU_SR_ALLOC();
  134.         p_arg = p_arg;

  135.         CPU_Init();
  136. #if OS_CFG_STAT_TASK_EN > 0u
  137.    OSStatTaskCPUUsageInit(&err);          //統計任務               
  138. #endif
  139.         
  140. #ifdef CPU_CFG_INT_DIS_MEAS_EN                //如果使能了測量中斷關閉時間
  141.     CPU_IntDisMeasMaxCurReset();        
  142. #endif

  143. #if        OS_CFG_SCHED_ROUND_ROBIN_EN  //當使用時間片輪轉的時候
  144.          //使能時間片輪轉調度功能,時間片長度為1個系統時鐘節拍,既1*5=5ms
  145.         OSSchedRoundRobinCfg(DEF_ENABLED,1,&err);  
  146. #endif
  147.         OS_CRITICAL_ENTER();        //進入臨界區
  148. //創建定時器1
  149.         OSTmrCreate((OS_TMR                *)&tmr1,                //定時器1
  150.                                                         (CPU_CHAR        *)"tmr1",                //定時器名字
  151.                                                         (OS_TICK         )8,                        //8*10=80ms  單次定時器的設置值
  152.                                                         (OS_TICK         ) 0,          //如果是單次定時器該值應該被設置為0
  153.                                                         (OS_OPT                 )OS_OPT_TMR_ONE_SHOT,         //單次定時器
  154.                                                         (OS_TMR_CALLBACK_PTR)tmr1_callback,//定時器1回調函數
  155.                                                         (void            *)0,                        //參數為0
  156.                                                         (OS_ERR            *)&err);                //返回的錯誤碼
  157.         
  158.         
  159.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC,ENABLE);//開啟CRC時鐘
  160.         GUI_Init();                          //STemWin初始化
  161.         
  162.                 //STemWin Demo任務        
  163.         OSTaskCreate((OS_TCB*     )&EmwindemoTaskTCB,               
  164.                                  (CPU_CHAR*   )"Emwindemo task",                 
  165.                  (OS_TASK_PTR )emwindemo_task,                        
  166.                  (void*       )0,                                       
  167.                  (OS_PRIO          )EMWINDEMO_TASK_PRIO,     
  168.                  (CPU_STK*    )&EMWINDEMO_TASK_STK[0],        
  169.                  (CPU_STK_SIZE)EMWINDEMO_STK_SIZE/10,        
  170.                  (CPU_STK_SIZE)EMWINDEMO_STK_SIZE,               
  171.                  (OS_MSG_QTY  )TASK_Q_NUM,                //任務Msgdis_task需要使用內建消息隊列,消息隊列長度為2                                                
  172.                  (OS_TICK          )0,                                          
  173.                  (void*       )0,                                       
  174.                  (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
  175.                  (OS_ERR*     )&err);
  176.         //觸摸屏任務
  177.         OSTaskCreate((OS_TCB*     )&TouchTaskTCB,               
  178.                                  (CPU_CHAR*   )"Touch task",                 
  179.                  (OS_TASK_PTR )touch_task,                        
  180.                  (void*       )0,                                       
  181.                  (OS_PRIO          )TOUCH_TASK_PRIO,     
  182.                  (CPU_STK*    )&TOUCH_TASK_STK[0],        
  183.                  (CPU_STK_SIZE)TOUCH_STK_SIZE/10,        
  184.                  (CPU_STK_SIZE)TOUCH_STK_SIZE,               
  185.                  (OS_MSG_QTY  )0,                                       
  186.                  (OS_TICK          )0,                                          
  187.                  (void*       )0,                                       
  188.                  (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
  189.                  (OS_ERR*     )&err);                        
  190.         //LED0任務
  191.         OSTaskCreate((OS_TCB*     )&Led0TaskTCB,               
  192.                                  (CPU_CHAR*   )"Led0 task",                 
  193.                  (OS_TASK_PTR )led0_task,                        
  194.                  (void*       )0,                                       
  195.                  (OS_PRIO          )LED0_TASK_PRIO,     
  196.                  (CPU_STK*    )&LED0_TASK_STK[0],        
  197.                  (CPU_STK_SIZE)LED0_STK_SIZE/10,        
  198.                  (CPU_STK_SIZE)LED0_STK_SIZE,               
  199.                  (OS_MSG_QTY  )0,                                       
  200.                  (OS_TICK          )0,                                          
  201.                  (void*       )0,                                       
  202.                  (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
  203.                  (OS_ERR*     )&err);
  204.         //字庫更新任務
  205.         OSTaskCreate((OS_TCB*     )&FontupdataTaskTCB,               
  206.                                  (CPU_CHAR*   )"Fontupdata task",                 
  207.                  (OS_TASK_PTR )fontupdata_task,                        
  208.                  (void*       )0,                                       
  209.                  (OS_PRIO          )FONTUPDATA_TASK_PRIO,     
  210.                  (CPU_STK*    )&FONTUPDATA_TASK_STK[0],        
  211.                  (CPU_STK_SIZE)FONTUPDATA_STK_SIZE/10,        
  212.                  (CPU_STK_SIZE)FONTUPDATA_STK_SIZE,               
  213.                  (OS_MSG_QTY  )0,                                       
  214.                  (OS_TICK          )0,                                          
  215.                  (void*       )0,                                       
  216.                  (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
  217.                  (OS_ERR*     )&err);
  218.         //看門狗任務
  219.         OSTaskCreate((OS_TCB*     )&DogTaskTCB,               
  220.                                  (CPU_CHAR*   )"dog_task",                 
  221.                  (OS_TASK_PTR )dog_task,                        
  222.                  (void*       )0,                                       
  223.                  (OS_PRIO          )DOG_TASK_PRIO,     
  224.                  (CPU_STK*    )&DOG_TASK_STK[0],        
  225.                  (CPU_STK_SIZE)DOG_STK_SIZE/10,        
  226.                  (CPU_STK_SIZE)DOG_STK_SIZE,               
  227.                  (OS_MSG_QTY  )0,                                       
  228.                  (OS_TICK          )0,                                          
  229.                  (void*       )0,                                       
  230.                  (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR,
  231.                  (OS_ERR*     )&err);                                                         
  232.                                                                  
  233.         OS_TaskSuspend((OS_TCB*)&StartTaskTCB,&err);                //掛起開始任務                        
  234.         OS_CRITICAL_EXIT();        //退出臨界區
  235. }

  236. //EMWINDEMO任務
  237. void emwindemo_task(void *p_arg)
  238. {  
  239.         GUI_CURSOR_Show();
  240.         //更換皮膚
  241.         //BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX); //BUTTON不能換膚,換膚后按鈕就不能再改變顏色了
  242.         CHECKBOX_SetDefaultSkin(CHECKBOX_SKIN_FLEX);
  243.         DROPDOWN_SetDefaultSkin(DROPDOWN_SKIN_FLEX);
  244.         FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX);
  245.         HEADER_SetDefaultSkin(HEADER_SKIN_FLEX);
  246.         MENU_SetDefaultSkin(MENU_SKIN_FLEX);
  247.         MULTIPAGE_SetDefaultSkin(MULTIPAGE_SKIN_FLEX);
  248.         PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
  249.         RADIO_SetDefaultSkin(RADIO_SKIN_FLEX);
  250.         SCROLLBAR_SetDefaultSkin(SCROLLBAR_SKIN_FLEX);
  251.         SLIDER_SetDefaultSkin(SLIDER_SKIN_FLEX);
  252.         SPINBOX_SetDefaultSkin(SPINBOX_SKIN_FLEX);
  253.                
  254.   WM_SetCreateFlags(WM_CF_MEMDEV);
  255.         windows();        
  256.         while(1)
  257.         {
  258.     GUI_Delay(10);  //GUI_Delay()是emwin自帶的,移植的時候也是懟OSTimeDly的簡單封裝!但是GUI_Delay()不單單是延時,他也會重繪無效化區域!OSTimeDly是UCOS的延時,肯定是會引起任務調度的
  259.         }
  260. }

  261. //字庫更新任務
  262. //KEY_UP鍵長按2s更新字庫
  263. void fontupdata_task(void *pdata)
  264. {
  265.         OS_ERR err;
  266.         while(1)
  267.         {
  268.                 if(WK_UP == 1)                                //KEY_UP鍵按下
  269.                 {
  270.                         OSTimeDlyHMSM(0,0,2,0,OS_OPT_TIME_PERIODIC,&err);//延時2s
  271.                         if(WK_UP == 1)                        //還是KEY_UP鍵
  272.                         {
  273.                                 LCD_Clear(WHITE);
  274.                                 OSSchedLock(&err);                //調度器上鎖
  275.                                 LCD_ShowString(10,50,250,30,16,"Font Updataing,Please Wait...");
  276.                                 update_font(10,70,16,"0:");//更新字庫
  277.                                 LCD_Clear(WHITE);
  278.                                 POINT_COLOR = RED;
  279.                                 LCD_ShowString(10,50,280,30,16,"Font Updata finshed,Please Restart!");
  280.                                 OSSchedUnlock(&err);        //調度器解鎖
  281.                         }
  282.                 }
  283.                 OSTimeDlyHMSM(0,0,0,10,OS_OPT_TIME_PERIODIC,&err);//延時10ms
  284. ……………………

  285. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
視頻推送項目.7z (4.16 MB, 下載次數: 43)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产麻豆乱码精品一区二区三区 | 日韩中文字幕视频在线观看 | 亚洲狠狠爱 | 日韩不卡一区二区三区 | 国产精品视频一区二区三区不卡 | 欧美日韩在线免费 | 韩国av一区二区 | 成人在线日韩 | 国产成人精品免费视频大全最热 | 欧美精品一区二区三区在线播放 | 一区二区亚洲 | 日本在线视 | 色性av| 国产精品一区久久久久 | 狠狠做深爱婷婷综合一区 | 精品国产欧美一区二区三区不卡 | 国产免费一区二区三区网站免费 | 美女视频黄的免费 | 九九导航 | av电影手机版 | 免费看国产精品视频 | 中文字幕av亚洲精品一部二部 | av官网在线| 日韩一区二区三区在线观看视频 | 天堂免费看片 | 国产精品久久久久久久久免费软件 | 国产精品不卡一区 | 欧美中文字幕一区 | 欧美日韩一区二区在线 | 夜夜爽99久久国产综合精品女不卡 | 欧美国产精品一区二区三区 | 免费v片| 一级特黄a大片 | 91视频18| 黄色毛片免费 | 久久高清 | 中文字幕乱码一区二区三区 | 日韩高清电影 | 亚洲欧美一区二区三区国产精品 | 日本二区在线观看 | 国产在线观看av |