欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

       找回密碼
       立即注冊

      QQ登錄

      只需一步,快速開始

      搜索
      查看: 5264|回復: 3
      收起左側

      大彩串口屏控制BYJ步進電機(基于freertos)源程序

      [復制鏈接]
      ID:544352 發表于 2019-8-5 21:59 | 顯示全部樓層 |閱讀模式
      stm32f103rct6,正點原子mini板,大彩4.3寸串口屏,w25q16掉電保存數據。基于freerto。  //學習交流

      單片機源程序如下:
      1. #include "led.h"
      2. #include "delay.h"
      3. #include "sys.h"
      4. #include "FreeRTOS.h"
      5. #include "task.h"

      6. #include "hmi_driver.h"
      7. #include "hmi_user_uart.h"
      8. #include "cmd_queue.h"
      9. #include "cmd_process.h"
      10. #include "stdio.h"
      11. #include "stdint.h"
      12. #include "hmi_ctl.h"
      13. #include "motor.h"
      14. #include "spi.h"
      15. #include "flash.h"
      16. extern struct Para xi;
      17. extern struct Para yu;

      18. volatile uint32  timer_tick_count = 0; //定時器節拍
      19. static uint8 update_en = 0;

      20. uint8 cmd_buffer[CMD_MAX_SIZE];//指令緩存

      21. uint8 jogadd ;    //對應ccw
      22. uint8 jogsub ;    //對應cw
      23. int32 jogSpeed;
      24. int32 Number=0;

      25. int32 huanLength;
      26. int32 huanSpeed;

      27.         const u8* inbuffer[];
      28.         #define SIZE 10
      29.   u8 datatemp[SIZE];
      30.         #define FLASH_SIZE 2*1024*1024        //FLASH 大小為2M字節

      31. //任務優先級
      32. #define START_TASK_PRIO                1
      33. //任務堆棧大小       
      34. #define START_STK_SIZE                 128  
      35. //任務句柄
      36. TaskHandle_t StartTask_Handler;
      37. //任務函數
      38. void start_task(void *pvParameters);

      39. //任務優先級
      40. #define LED0_TASK_PRIO                3
      41. //任務堆棧大小       
      42. #define LED0_STK_SIZE                 50  
      43. //任務句柄
      44. TaskHandle_t LED0Task_Handler;
      45. //任務函數
      46. void led0_task(void *pvParameters);

      47. //任務優先級
      48. #define LED1_TASK_PRIO                3
      49. //任務堆棧大小       
      50. #define LED1_STK_SIZE                 50  
      51. //任務句柄
      52. TaskHandle_t LED1Task_Handler;
      53. //任務函數
      54. void led1_task(void *pvParameters);
      55. u8 key;
      56. void SetScreen(uint16 screen_id);
      57. void UpdateUI(void);

      58. int main(void)
      59. {
      60.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//設置系統中斷優先級分組4                  
      61.         delay_init();                                            //延時函數初始化          
      62.         uart_init(115200);                                        //初始化串口
      63.         LED_Init();                                                          //初始化LED


      64.          
      65.         //創建開始任務
      66.     xTaskCreate((TaskFunction_t )start_task,            //任務函數
      67.                 (const char*    )"start_task",          //任務名稱
      68.                 (uint16_t       )START_STK_SIZE,        //任務堆棧大小
      69.                 (void*          )NULL,                  //傳遞給任務函數的參數
      70.                 (UBaseType_t    )START_TASK_PRIO,       //任務優先級
      71.                 (TaskHandle_t*  )&StartTask_Handler);   //任務句柄              
      72.     vTaskStartScheduler();          //開啟任務調度

      73.                                                                
      74. }

      75. //開始任務任務函數
      76. void start_task(void *pvParameters)
      77. {
      78.     taskENTER_CRITICAL();           //進入臨界區
      79.     //創建LED0任務
      80.     xTaskCreate((TaskFunction_t )led0_task,            
      81.                 (const char*    )"led0_task",          
      82.                 (uint16_t       )LED0_STK_SIZE,
      83.                 (void*          )NULL,                               
      84.                 (UBaseType_t    )LED0_TASK_PRIO,       
      85.                 (TaskHandle_t*  )&LED0Task_Handler);   
      86.     //創建LED1任務
      87.     xTaskCreate((TaskFunction_t )led1_task,     
      88.                 (const char*    )"led1_task",   
      89.                 (uint16_t       )LED1_STK_SIZE,
      90.                 (void*          )NULL,
      91.                 (UBaseType_t    )LED1_TASK_PRIO,
      92.                 (TaskHandle_t*  )&LED1Task_Handler);         
      93.     vTaskDelete(StartTask_Handler); //刪除開始任務
      94.     taskEXIT_CRITICAL();            //退出臨界區
      95. }

      96. //  LED0主任務函數
      97. void led0_task(void *pvParameters)
      98. {
      99.        
      100.   u8 i=0;
      101.         int32 speed=0;
      102.         qsize  size = 0;
      103.         uint32 timer_tick_last_update = 0; //上一次更新的時間

      104.         SPI_Flash_Init();                  //SPI FLASH 初始化          
      105.        
      106.                 /*串口初始化,波特率設置為9600*/
      107.         UartInit(9600);
      108.   SetScreen(0);
      109.         SetTextValueInt32(0,15,Number);
      110.         /*清空串口接收緩沖區*/
      111.         queue_reset();

      112.         /*延時等待串口屏初始化完畢,必須等待300ms*/
      113.          vTaskDelay(300);
      114.        
      115.        
      116.        
      117.                
      118.         while(1)
      119.         {
      120.                                  
      121.    key=KEY_Scan(0);

      122.                                 if(key==WKUP_PRES)        //WK_UP 按下,寫入W25Q64   
      123.                 {
      124.                        
      125.           sprintf((char*)inbuffer, "%d",  xi.Length);
      126.                         SPI_Flash_Write((u8*)inbuffer,FLASH_SIZE-100,SIZE);                //從倒數第100個地址處開始,寫入SIZE長度的數據

      127.                 }                                 
      128.                 if(key==KEY0_PRES)        //KEY0 按下,讀取字符串并顯示
      129.                 {
      130.                        
      131.                         SPI_Flash_Read(datatemp,FLASH_SIZE- 100,SIZE);                                //從倒數第100個地址處開始,讀出SIZE個字節
      132.                         sscanf(datatemp, "%u", &xi.Length); //字符串轉整數
      133.                         SetTextValueInt32(2,14,(int)xi.Length);  
      134.                        
      135.                 }
      136.                
      137. //                if(IN1==1) {LED0=1;}
      138.                                 size = queue_find_cmd(cmd_buffer,CMD_MAX_SIZE); //從緩沖區中獲取一條指令        
      139.                 if(size>0)// 大于0表示是完整指令
      140.                 {
      141.                         ProcessMessage((PCTRL_MSG)cmd_buffer, size);//指令處理,將cmd_buffer強轉為PCTRL_MSG數據結構
      142.                 }       

      143.                  if(jogadd==1)
      144.                  {  
      145.        for(i=0;i<8;i++)  //
      146.                          {
      147.                                         switch(i)
      148.                                         {               
      149.                                                 case 7:IN1=1;IN2=0;IN3=0;IN4=0;break;
      150.                                                 case 6:IN1=1;IN2=1;IN3=0;IN4=0;break;
      151.                                                 case 5:IN1=0;IN2=1;IN3=0;IN4=0;break;
      152.                                                 case 4:IN1=0;IN2=1;IN3=1;IN4=0;break;
      153.                                                 case 3:IN1=0;IN2=0;IN3=1;IN4=0;break;
      154.                                                 case 2:IN1=0;IN2=0;IN3=1;IN4=1;break;
      155.                                                 case 1:IN1=0;IN2=0;IN3=0;IN4=1;break;
      156.                                                 case 0:IN1=1;IN2=0;IN3=0;IN4=1;break;
      157.                                                 default:break;
      158.                                         }
      159.                                         vTaskDelay(1);

      160.                          }
      161.             }
      162.                 else if(jogadd==0)
      163.                  {  
      164.                   IN1=0;IN2=0;IN3=0;IN4=0;
      165.                  }       
      166.                  

      167.                          
      168.         }   //while(1)右括號

      169.        
      170. }   

      171. //LED1任務函數
      172. void led1_task(void *pvParameters)
      173. {
      174.         u8 i,j;
      175.     while(1)
      176.     {
      177.                         UpdateUI();  vTaskDelay(800);       
      178.                        
      179.                         key=KEY_Scan(0);
      180.                         if(key==2||jogadd==1)
      181.                         {
      182. //        LED1=0;
      183. //        vTaskDelay(800);
      184. //        LED1=1;
      185. //        vTaskDelay(200);
      186. //                                 LED1=0;
      187.                          for(i=0;i<8;i++)  //
      188.                          {
      189.                                  
      190.                                         switch(i%2)
      191.                                                         {
      192.                                                         case 0:LED1=0;break;
      193.                                                         case 1:LED1=1;break;
      194. //                                                        default:break;
      195.                                                         }

      196.                                         vTaskDelay(800);       

      197.                          }

      198.                         }
      199.     }
      200. }
      復制代碼

      所有資料51hei提供下載:
      Welding20190802掉電保存.7z (351.02 KB, 下載次數: 130)


      評分

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

      查看全部評分

      回復

      使用道具 舉報

      ID:285863 發表于 2019-8-6 09:58 | 顯示全部樓層
      系統的思維了 更高一級了
      回復

      使用道具 舉報

      ID:870479 發表于 2020-12-29 18:48 | 顯示全部樓層
      看看電機和屏幕處理的程序
      回復

      使用道具 舉報

      ID:908534 發表于 2021-4-19 18:35 | 顯示全部樓層
      來學習,這程序有點長啊,對于初學者,頭大
      回復

      使用道具 舉報

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

      本版積分規則

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

      Powered by 單片機教程網

      快速回復 返回頂部 返回列表