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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 8383|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

MiniFly四軸飛控完整源代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:261330 發(fā)表于 2018-10-17 10:31 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
四軸飛行器完整源代碼,分享給有需要的朋友。
1, MiniFly Master:包含MiniFly主機(jī)芯片STM32F411源碼、芯片NRF51822源碼。
2, MiniFly Remoter:包含遙控器遙控器芯片STM32F103源碼。


單片機(jī)源程序如下:
  1. #include <string.h>
  2. #include "sys.h"
  3. #include "delay.h"
  4. #include "config.h"
  5. #include "led.h"
  6. #include "iap.h"
  7. #include "protocol.h"
  8. #include "check.h"
  9. #include "stmflash.h"
  10. #include "hw_config.h"
  11. #include "key.h"
  12. /********************************************************************************         
  13. * 本程序只供學(xué)習(xí)使用,未經(jīng)作者許可,不得用于其它任何用途
  14. * ALIENTEK MiniFly
  15. * main.c       
  16. * 正點(diǎn)原子@ALIENTEK

  17. * 版本:V1.0
  18. * 版權(quán)所有,盜版必究。
  19. * Copyright(C) 廣州市星翼電子科技有限公司 2014-2024
  20. * All rights reserved
  21. ********************************************************************************/

  22. extern _usb_usart_fifo uu_rxfifo;

  23. const u8 HexTable[] ={
  24. '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
  25. };


  26. //設(shè)備信息緩存
  27. u8 DeviceInfoBuffer[13];

  28. #define DEVICE_INFO_BUFFER_SIZE   (sizeof(DeviceInfoBuffer)/sizeof(u8))

  29. //轉(zhuǎn)換字符串的buffer
  30. u8 RecieveBuf[10];

  31. #define IAP_BUFFER_SIZE 2048
  32. //iap 緩存
  33. u8 ipap_buf[IAP_BUFFER_SIZE];

  34. //定義一幀協(xié)議
  35. TransportProtocol_Typedef TransportProtocol;


  36. //判斷進(jìn)行固件升級(jí)還是跳轉(zhuǎn)APP
  37. void isUpgradeFirmware(void)
  38. {
  39.         if(READ_KEY_L() == 0)
  40.         {
  41.                 delay_ms(1500);
  42.                 if(READ_KEY_L() != 0)
  43.                 {
  44.                         iap_load_app(FIRMWARE_START_ADDR);       
  45.                 }
  46.         }
  47.         else
  48.         {
  49.                 iap_load_app(FIRMWARE_START_ADDR);
  50.         }
  51.         LED_BLUE = 0;
  52. }

  53. //得到設(shè)備信息
  54. void GetDeviceInfo(void)
  55. {
  56.         u8 i=0;
  57.         u16 buf = 1;
  58.        
  59.         STMFLASH_Read(CONFIG_PARAM_ADDR, &buf, 1);
  60.         DeviceInfoBuffer[0] = (u8)buf;  //軟件版本 11表示V1.1
  61.         for(i=1;i<=12;i++)
  62.                 DeviceInfoBuffer[i]=*(vu32*)(0x1FFFF7E8+i); //軟件序列號(hào)
  63. }


  64. //一個(gè)字節(jié)轉(zhuǎn)換為16進(jìn)制字符形式的字符串
  65. void  OneByteToStr(u8 byte,u8* str)
  66. {
  67.         *str = HexTable[byte/16];
  68.         str++;
  69.         *str = HexTable[byte%16];       
  70.         str++;
  71.         *str = 0;
  72. }

  73. //多個(gè)字節(jié)轉(zhuǎn)化為16進(jìn)制字符形式的字符串并以空格隔開
  74. void MultiByteToStr(u8 *byteBuf,u16 len,u8 *str)
  75. {
  76.         while(len--)
  77.         {
  78.                 *str = HexTable[(*byteBuf)/16];
  79.                 str++;
  80.                 *str = HexTable[(*byteBuf)%16];
  81.                 str++;
  82.                 *str = ' ';
  83.                 str++;
  84.                 byteBuf++;
  85.         }
  86.         *str = 0;
  87. }

  88. //extern void usbIapResponse(uint8_t* buf, uint32_t len);

  89. //用來響應(yīng)上位機(jī)
  90. void IAP_Response()
  91. {
  92.         TransportProtocol.Device_Address = 0x01;        //設(shè)備地址
  93.         TransportProtocol.Sequence = TransportProtocol.Sequence;        //幀序列 和收到的一致,這里不改變
  94.         TransportProtocol_Manager.Packed();                        //打包       

  95.         usbsendData(TransportProtocol_Manager.Buf, TransportProtocol_Manager.FrameTotalLength);       
  96. }

  97. int main()
  98. {
  99.         u16 t = 0;
  100.         u32 timeOut = 0;
  101.         u32  revcnt = 0;
  102.         u16 oldcount = 0;
  103.         u8 IsTransportOK = 0;   //標(biāo)記代碼是否傳輸完畢
  104.         TransportProtocol_Result res;        //傳輸結(jié)果
  105.         u32 Flash_App_Pos = FIRMWARE_START_ADDR;//用來記錄代碼更新的地址
  106.        
  107.         ledInit();
  108.         keyInit();
  109.         delay_init();
  110.         isUpgradeFirmware();         /*判斷是否要固件升級(jí)*/
  111.         usb_vcp_init();
  112.        
  113.         //初始化傳輸協(xié)議  指向串口接收緩沖區(qū)  選擇sum的校驗(yàn)方式
  114.         TransportProtocol_Init(&TransportProtocol, uu_rxfifo.buffer, Checksum_Sum);
  115.        
  116.         while(1)
  117.         {       
  118.                 if(uu_rxfifo.writeptr)
  119.                 {
  120.                         if(oldcount == uu_rxfifo.writeptr)//新周期內(nèi),沒有收到任何數(shù)據(jù),認(rèn)為本次數(shù)據(jù)接收完成.
  121.                         {
  122.                                 //獲取接收的總字節(jié)數(shù)
  123.                                 TransportProtocol_Manager.RecieveByteCount = uu_rxfifo.writeptr;
  124.                                 //解包
  125.                                 res = TransportProtocol_Manager.Unpacked();
  126.                                 if(res!=UPACKED_SUCCESS)  //解包失敗的時(shí)候,不響應(yīng)上位機(jī),上位機(jī)會(huì)自動(dòng)重發(fā)
  127.                                 {       
  128.                                         OneByteToStr(res,RecieveBuf);
  129.                                 }
  130.                                 else  //解包成功  每接收到2K字節(jié)則寫入一次FLASH 所以上位機(jī)最大有效數(shù)據(jù)長度最好和2K成倍數(shù)關(guān)系
  131.                                 {       
  132.                                         if(TransportProtocol.Function_Type==0x01)  //該幀為發(fā)送的文件數(shù)據(jù)
  133.                                         {       
  134.                                                 if(TransportProtocol.Data_Length==0)
  135.                                                 {       
  136.                                                         IsTransportOK = 1;   //代碼傳輸完畢

  137.                                                         iap_write_appbin(Flash_App_Pos,ipap_buf,revcnt);//更新FLASH代碼
  138.                                                         revcnt = 0;

  139.                                                         Flash_App_Pos=FIRMWARE_START_ADDR;  //恢復(fù)到原來的起始地址
  140.                                                 }else
  141.                                                 {
  142.                                                         if(IsTransportOK==0)  //可以將代碼寫入falsh
  143.                                                         {
  144.                                                                 memcpy(ipap_buf+revcnt,TransportProtocol.Data,TransportProtocol.Data_Length);
  145.                                                                 revcnt += TransportProtocol.Data_Length;
  146.                                                                 if(revcnt>=IAP_BUFFER_SIZE)
  147.                                                                 {       
  148.                                                                         revcnt =0;
  149.                                                                         iap_write_appbin(Flash_App_Pos,ipap_buf,IAP_BUFFER_SIZE);//更新FLASH代碼   
  150.                                                                         Flash_App_Pos += IAP_BUFFER_SIZE;
  151.                                                                 }
  152.                                                         }
  153.                                                 }       
  154.                                                 TransportProtocol.Data_Length = 0;            //有效數(shù)據(jù)大小
  155.                                                 TransportProtocol.Data = 0;                                           //要發(fā)送的數(shù)據(jù)      
  156.                                                 TransportProtocol.Function_Type = 0x01;                                //幀功能                       

  157.                                         }else if(TransportProtocol.Function_Type==0x05) //該幀為查詢?cè)O(shè)備信息的功能
  158.                                         {       
  159.                                                 GetDeviceInfo();
  160.                                                 TransportProtocol.Data_Length = DEVICE_INFO_BUFFER_SIZE;       //有效數(shù)據(jù)大小
  161.                                                 TransportProtocol.Data = (u8*)DeviceInfoBuffer;                    //要發(fā)送的設(shè)備信息   
  162.                                                 TransportProtocol.Function_Type = 0x05;                                             //幀功能                                   
  163.                                         }       
  164.                                         IAP_Response();  //響應(yīng)上位機(jī)                                               
  165.                                 }       

  166.                                 uu_rxfifo.writeptr=0;                                                               
  167.                         }else
  168.                         {
  169.                                 oldcount = uu_rxfifo.writeptr;       
  170.                         }
  171.                         timeOut = 0;        //超時(shí)清零
  172.                        
  173.                 }else
  174.                 {
  175.                         delay_ms(60);
  176.                         if(IsTransportOK == 1 || timeOut++ > 1000)        /*60S 超時(shí)退出bootloader*/
  177.                         {
  178.                                 timeOut = 0;
  179.                                 iap_load_app(FIRMWARE_START_ADDR);
  180.                         }                       
  181.                         if(++t >= 10)
  182.                         {
  183.                                 t = 0;
  184.                                 LED_BLUE = !LED_BLUE;
  185.                         }                                                       
  186.                 }               
  187.         }
  188. }
復(fù)制代碼

所有資料51hei提供下載:
4 , MiniFly V1.2.1.zip (4.45 MB, 下載次數(shù): 120)


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

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久.com | 久草视频观看 | 久久久久一区二区 | 国产精品亚洲一区 | 国产精品1区2区3区 欧美 中文字幕 | 亚洲看片 | 亚洲精品福利在线 | 一区二区三区四区免费在线观看 | 欧美一区二区 | 夜夜草 | 操到爽 | 成人区精品一区二区婷婷 | 欧美综合国产精品久久丁香 | 国产成人免费视频网站视频社区 | 97视频在线免费 | 波多野结衣一区二区 | 亚洲视频在线观看免费 | 国产va| 一区在线视频 | 国产成人精品一区二区在线 | 成人精品国产一区二区4080 | 9久9久 | 亚洲欧洲日韩精品 中文字幕 | 欧美jizzhd精品欧美巨大免费 | 亚洲一区| 国产精品福利网站 | 亚洲免费人成在线视频观看 | 亚洲免费视频一区二区 | 日韩精品在线播放 | 国产精品久久久久999 | 一区二区三区免费 | 欧美性受xxxx| 天天色天天 | 91一区二区三区 | 韩日三级 | 国产无套一区二区三区久久 | 91精品国产乱码久久久久久久久 | 久久丁香 | 国产视频久久久 | 999久久久国产精品 欧美成人h版在线观看 | 在线观看国产精品一区二区 |