国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

 找回密碼
 注冊(cè)
搜索

STM32 can通信例程 發(fā)送和接受數(shù)組

[復(fù)制鏈接]
樓主
coolice 發(fā)表于 2021-8-14 01:38:49 | 只看該作者 |只看大圖 |倒序?yàn)g覽 |閱讀模式
STM32 can通信例程 發(fā)送和接受數(shù)組 1.jpg

can收發(fā)程序.zip (19.01 MB, 售價(jià): 5 E幣)

部分源碼,完整源碼見(jiàn)附件。
  1. #ifdef EN_UPDATE_FONT
  2. u8 temp[512];  //零時(shí)空間
  3. u8 Update_Font(void)
  4. {
  5.         u32 fcluster=0;           
  6.         u32 i;
  7.         //u8 temp[512];  //零時(shí)空間         在這里定義,會(huì)內(nèi)存溢出
  8.         u32 tempsys[2];  //臨時(shí)記錄文件起始位置和文件大小
  9.         float prog;
  10.         u8 t;                 
  11.         FileInfoStruct FileTemp;//零時(shí)文件夾                                                
  12.         //得到根目錄的簇號(hào)
  13.         if(FAT32_Enable)fcluster=FirstDirClust;
  14.         else fcluster=0;                           
  15.         FileTemp=F_Search(fcluster,(unsigned char *)folder[0],T_FILE);//查找system文件夾         
  16.         if(FileTemp.F_StartCluster==0)return 1;                                                  //系統(tǒng)文件夾丟失                          
  17.         {                                                                                          
  18.                 //先查找字體
  19.                 FileTemp=F_Search(FileTemp.F_StartCluster,(unsigned char *)folder[1],T_FILE);//在system文件夾下查找FONT文件夾
  20.                 if(FileTemp.F_StartCluster==0)return 2;//字體文件夾丟失        

  21.                 fcluster=FileTemp.F_StartCluster;      //字體文件夾簇號(hào)            
  22.                 FileTemp=F_Search(fcluster,(unsigned char *)sysfile[2],T_SYS);//在system文件夾下查找SYS文件
  23.                 if(FileTemp.F_StartCluster==0)return 3;//FONT12字體文件丟失         
  24.                 //LCD_ShowString(20,90,"Write UNI2GBK to FLASH...");               
  25.                 //LCD_ShowString(108,110,"%");               
  26.                 F_Open(&FileTemp);//打開(kāi)該文件
  27.                 i=0;         
  28.                 while(F_Read(&FileTemp,temp))//成功讀出512個(gè)字節(jié)
  29.                 {                 
  30.                         if(i<FileTemp.F_Size)//不超過(guò)文件大小
  31.                         {
  32.                                 SPI_Flash_Write(temp,i+100000,512);//從100K字節(jié)處開(kāi)始寫入512個(gè)數(shù)據(jù)   
  33.                                 i+=512;//增加512個(gè)字節(jié)
  34.                         }
  35.                         prog=(float)i/FileTemp.F_Size;
  36.                         prog*=100;
  37.                         if(t!=prog)
  38.                         {
  39.                                 t=prog;
  40.                                 if(t>100)t=100;
  41.                                 //LCD_ShowNum(84,110,t,3,16);//顯示數(shù)值
  42.                         }                                            
  43.                 }
  44.                 UNI2GBKADDR=100000;//UNI2GBKADDR從100K處開(kāi)始寫入.
  45.                 tempsys[0]=UNI2GBKADDR;
  46.                 tempsys[1]=FileTemp.F_Size;                   //UNI2GBKADDR 大小
  47.                 SPI_Flash_Write((u8*)tempsys,0,8);//記錄在地址0~7處

  48.                 delay_ms(1000);                           
  49.                 //printf("UNI2GBK寫入FLASH完畢!\n");
  50.                 //printf("寫入數(shù)據(jù)長(zhǎng)度:%d\n",FileTemp.F_Size);
  51.                 //printf("UNI2GBKSADDR:%d\n\n",UNI2GBKADDR);
  52.                
  53.                 FONT16ADDR=FileTemp.F_Size+UNI2GBKADDR;//F16的首地址
  54.                 FileTemp=F_Search(fcluster,(unsigned char *)sysfile[0],T_FON);//在system文件夾下查找FONT16字體文件
  55.                 if(FileTemp.F_StartCluster==0)return 4;//FONT16字體文件丟失         
  56.         
  57.                 //LCD_ShowString(20,90,"Write FONT16 to FLASH... ");               
  58.                  //printf("開(kāi)始FONT16寫入FLASH...\n");               
  59.                 F_Open(&FileTemp);//打開(kāi)該文件
  60.                 i=0;         
  61.                 while(F_Read(&FileTemp,temp))//成功讀出512個(gè)字節(jié)
  62.                 {
  63.                         if(i<FileTemp.F_Size)//不超過(guò)文件大小
  64.                         {
  65.                                 SPI_Flash_Write(temp,i+FONT16ADDR,512);//從0開(kāi)始寫入512個(gè)數(shù)據(jù)   
  66.                                 i+=512;//增加512個(gè)字節(jié)
  67.                         }
  68.                         prog=(float)i/FileTemp.F_Size;
  69.                         prog*=100;
  70.                         if(t!=prog)
  71.                         {
  72.                                 t=prog;
  73.                                 if(t>100)t=100;
  74.                                 //LCD_ShowNum(84,110,t,3,16);//顯示數(shù)值
  75.                         }
  76.                 }                                                                                                   
  77.                 tempsys[0]=FONT16ADDR;
  78.                 tempsys[1]=FileTemp.F_Size;                   //FONT16ADDR 大小
  79.                 SPI_Flash_Write((u8*)tempsys,8,8);//記錄在地址8~15處
  80.                
  81.                 delay_ms(1000);            
  82.                 //printf("FONT16寫入FLASH完畢!\n");
  83.                 //printf("寫入數(shù)據(jù)長(zhǎng)度:%d\n",FileTemp.F_Size);


  84.                 FONT24ADDR=FileTemp.F_Size+FONT16ADDR;//F16的首地址
  85.                 //printf("FONT16SADDR:%d\n\n",FONT16ADDR);
  86.                 //LCD_ShowString(20,60,"Write FONT12 to FLASH... ");               
  87.                 //FONT12暫時(shí)不加入
  88.                                           
  89.                 FileTemp=F_Search(fcluster,(unsigned char *)sysfile[1],T_FON);//在system文件夾下查找FONT12字體文件
  90.                 if(FileTemp.F_StartCluster==0)return 5;//FONT12字體文件丟失         
  91.                 //printf("開(kāi)始FONT12寫入FLASH...\n");               
  92.                 F_Open(&FileTemp);//打開(kāi)該文件
  93.                 i=0;         
  94.                 while(F_Read(&FileTemp,temp))//成功讀出512個(gè)字節(jié)
  95.                 {
  96.                         if(i<FileTemp.F_Size)//不超過(guò)文件大小
  97.                         {
  98.                                 SPI_Flash_Write(temp,i+FONT24ADDR,512);//從0開(kāi)始寫入512個(gè)數(shù)據(jù)   
  99.                                 i+=512;//增加512個(gè)字節(jié)
  100.                         }
  101.                         prog=(float)i/FileTemp.F_Size;
  102.                         prog*=100;
  103.                         if(t!=prog)
  104.                         {
  105.                                 t=prog;
  106.                                 if(t>100)t=100;
  107.                                 //LCD_ShowNum(84,80,t,3,16);//顯示數(shù)值
  108.                         }
  109.                 }            
  110.                 tempsys[0]=FONT24ADDR;
  111.                 tempsys[1]=FileTemp.F_Size;                   //FONT16ADDR 大小
  112.                 SPI_Flash_Write((u8*)tempsys,16,8);//記錄在地址16~23處

  113.                 //printf("FONT12寫入FLASH完畢!\n");
  114.         //        printf("寫入數(shù)據(jù)長(zhǎng)度:%d\n",FileTemp.F_Size);   
  115.         //        printf("FONT12SADDR:%d\n\n",FONT12ADDR); */
  116.         }
  117.         t=0XAA;
  118.            SPI_Flash_Write(&t,24,1);//寫入字庫(kù)存在標(biāo)志        0XAA
  119.         //LCD_ShowString(20,90,"  Font Update Successed  ");                    
  120.         delay_ms(1000);               
  121.         delay_ms(1000);               
  122.         return 0;//成功
  123. }
  124. #endif

  125. //用這個(gè)函數(shù)得到字體地址
  126. //在系統(tǒng)使用漢字支持之前,必須調(diào)用該函數(shù)
  127. //包括FONT16ADDR,FONT12ADDR,UNI2GBKADDR;  
  128. u8 Font_Init(void)
  129. {
  130.         u32 tempsys[2];//臨時(shí)記錄文件起始位置和文件大小
  131.         u8 fontok=0;
  132.         SPI_Flash_Read(&fontok,24,1);//讀出字庫(kù)標(biāo)志位,看是否存在字庫(kù)
  133.         if(fontok!=0XAA)return 1;
  134.         SPI_Flash_Read((u8*)tempsys,0,8);//讀出8個(gè)字節(jié)   
  135.         UNI2GBKADDR=tempsys[0];                                          
  136.         //printf("tempsysgbk[0]:%d\n",tempsys[0]);
  137.         //printf("tempsysgbk[1]:%d\n",tempsys[1]);

  138.         SPI_Flash_Read((u8*)tempsys,8,8);//讀出8個(gè)字節(jié)   
  139.         //printf("tempsysf16[0]:%d\n",tempsys[0]);
  140.         //printf("tempsysf16[1]:%d\n",tempsys[1]);
  141.         FONT16ADDR=tempsys[0];
  142.         
  143.         SPI_Flash_Read((u8*)tempsys,16,8);//讀出8個(gè)字節(jié)   
  144.         //printf("tempsysf12[0]:%d\n",tempsys[0]);
  145.         //printf("tempsysf12[1]:%d\n",tempsys[1]);
  146.         FONT24ADDR=tempsys[0];
  147.         return 0;         
  148. }
復(fù)制代碼
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則

手機(jī)版|小黑屋|ELEOK |網(wǎng)站地圖

GMT+8, 2026-5-26 01:09

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回復(fù) 返回頂部 返回列表