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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

[復制鏈接]
跳轉到指定樓層
樓主
ID:544352 發表于 2019-8-5 21:59 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
stm32f103rct6,正點原子mini板,大彩4.3寸串口屏,w25q16掉電保存數據;趂reerto。  //學習交流

單片機源程序如下:
  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 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品一区精品二区 | 久久久久久国产精品免费免费 | 91九色婷婷 | 中文字幕不卡在线观看 | 一区二区三区视频在线免费观看 | 精品免费看 | 中文字幕久久精品 | 欧美一级免费 | 亚洲在线高清 | 婷婷久久精品一区二区 | 欧美日韩在线观看视频 | 欧美成人在线影院 | 国产精品亚洲成在人线 | 一级毛片在线播放 | 人人99| 成人av一区| 久久久精品网站 | 国产精品久久国产精品 | 久久国产欧美日韩精品 | 久久国产美女视频 | 在线观看www高清视频 | www.毛片 | 亚洲精品一区二区网址 | 在线观看视频91 | 日韩一二三区视频 | 精品日本久久久久久久久久 | 久色视频在线观看 | 欧美国产日本一区 | 天天爽综合网 | 亚洲 欧美 另类 日韩 | 成人欧美一区二区三区视频xxx | 69热视频在线观看 | 涩涩视频在线观看 | 日韩在线不卡视频 | 亚洲激精日韩激精欧美精品 | 精品国产乱码一区二区三 | 精品中文字幕一区二区 | www.4虎影院| 一本大道久久a久久精二百 欧洲一区二区三区 | 九色视频网| 婷婷免费视频 |