国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee
ELEOK
標題:
STM32 can通信例程 發(fā)送和接受數(shù)組
[打印本頁]
作者:
coolice
時間:
2021-8-14 01:38
標題:
STM32 can通信例程 發(fā)送和接受數(shù)組
1.jpg
(5.61 KB)
下載附件
2021-8-14 01:28 上傳
can收發(fā)程序.zip
(19.01 MB, 售價: 5 E幣)
2021-8-14 01:42 上傳
點擊文件名下載附件
售價: 5 E幣
[記錄]
[
購買
]
部分源碼,完整源碼見附件。
#ifdef EN_UPDATE_FONT
u8 temp[512]; //零時空間
u8 Update_Font(void)
{
u32 fcluster=0;
u32 i;
//u8 temp[512]; //零時空間 在這里定義,會內存溢出
u32 tempsys[2]; //臨時記錄文件起始位置和文件大小
float prog;
u8 t;
FileInfoStruct FileTemp;//零時文件夾
//得到根目錄的簇號
if(FAT32_Enable)fcluster=FirstDirClust;
else fcluster=0;
FileTemp=F_Search(fcluster,(unsigned char *)folder[0],T_FILE);//查找system文件夾
if(FileTemp.F_StartCluster==0)return 1; //系統(tǒng)文件夾丟失
{
//先查找字體
FileTemp=F_Search(FileTemp.F_StartCluster,(unsigned char *)folder[1],T_FILE);//在system文件夾下查找FONT文件夾
if(FileTemp.F_StartCluster==0)return 2;//字體文件夾丟失
fcluster=FileTemp.F_StartCluster; //字體文件夾簇號
FileTemp=F_Search(fcluster,(unsigned char *)sysfile[2],T_SYS);//在system文件夾下查找SYS文件
if(FileTemp.F_StartCluster==0)return 3;//FONT12字體文件丟失
//LCD_ShowString(20,90,"Write UNI2GBK to FLASH...");
//LCD_ShowString(108,110,"%");
F_Open(&FileTemp);//打開該文件
i=0;
while(F_Read(&FileTemp,temp))//成功讀出512個字節(jié)
{
if(i<FileTemp.F_Size)//不超過文件大小
{
SPI_Flash_Write(temp,i+100000,512);//從100K字節(jié)處開始寫入512個數(shù)據(jù)
i+=512;//增加512個字節(jié)
}
prog=(float)i/FileTemp.F_Size;
prog*=100;
if(t!=prog)
{
t=prog;
if(t>100)t=100;
//LCD_ShowNum(84,110,t,3,16);//顯示數(shù)值
}
}
UNI2GBKADDR=100000;//UNI2GBKADDR從100K處開始寫入.
tempsys[0]=UNI2GBKADDR;
tempsys[1]=FileTemp.F_Size; //UNI2GBKADDR 大小
SPI_Flash_Write((u8*)tempsys,0,8);//記錄在地址0~7處
delay_ms(1000);
//printf("UNI2GBK寫入FLASH完畢!\n");
//printf("寫入數(shù)據(jù)長度:%d\n",FileTemp.F_Size);
//printf("UNI2GBKSADDR:%d\n\n",UNI2GBKADDR);
FONT16ADDR=FileTemp.F_Size+UNI2GBKADDR;//F16的首地址
FileTemp=F_Search(fcluster,(unsigned char *)sysfile[0],T_FON);//在system文件夾下查找FONT16字體文件
if(FileTemp.F_StartCluster==0)return 4;//FONT16字體文件丟失
//LCD_ShowString(20,90,"Write FONT16 to FLASH... ");
//printf("開始FONT16寫入FLASH...\n");
F_Open(&FileTemp);//打開該文件
i=0;
while(F_Read(&FileTemp,temp))//成功讀出512個字節(jié)
{
if(i<FileTemp.F_Size)//不超過文件大小
{
SPI_Flash_Write(temp,i+FONT16ADDR,512);//從0開始寫入512個數(shù)據(jù)
i+=512;//增加512個字節(jié)
}
prog=(float)i/FileTemp.F_Size;
prog*=100;
if(t!=prog)
{
t=prog;
if(t>100)t=100;
//LCD_ShowNum(84,110,t,3,16);//顯示數(shù)值
}
}
tempsys[0]=FONT16ADDR;
tempsys[1]=FileTemp.F_Size; //FONT16ADDR 大小
SPI_Flash_Write((u8*)tempsys,8,8);//記錄在地址8~15處
delay_ms(1000);
//printf("FONT16寫入FLASH完畢!\n");
//printf("寫入數(shù)據(jù)長度:%d\n",FileTemp.F_Size);
FONT24ADDR=FileTemp.F_Size+FONT16ADDR;//F16的首地址
//printf("FONT16SADDR:%d\n\n",FONT16ADDR);
//LCD_ShowString(20,60,"Write FONT12 to FLASH... ");
//FONT12暫時不加入
FileTemp=F_Search(fcluster,(unsigned char *)sysfile[1],T_FON);//在system文件夾下查找FONT12字體文件
if(FileTemp.F_StartCluster==0)return 5;//FONT12字體文件丟失
//printf("開始FONT12寫入FLASH...\n");
F_Open(&FileTemp);//打開該文件
i=0;
while(F_Read(&FileTemp,temp))//成功讀出512個字節(jié)
{
if(i<FileTemp.F_Size)//不超過文件大小
{
SPI_Flash_Write(temp,i+FONT24ADDR,512);//從0開始寫入512個數(shù)據(jù)
i+=512;//增加512個字節(jié)
}
prog=(float)i/FileTemp.F_Size;
prog*=100;
if(t!=prog)
{
t=prog;
if(t>100)t=100;
//LCD_ShowNum(84,80,t,3,16);//顯示數(shù)值
}
}
tempsys[0]=FONT24ADDR;
tempsys[1]=FileTemp.F_Size; //FONT16ADDR 大小
SPI_Flash_Write((u8*)tempsys,16,8);//記錄在地址16~23處
//printf("FONT12寫入FLASH完畢!\n");
// printf("寫入數(shù)據(jù)長度:%d\n",FileTemp.F_Size);
// printf("FONT12SADDR:%d\n\n",FONT12ADDR); */
}
t=0XAA;
SPI_Flash_Write(&t,24,1);//寫入字庫存在標志 0XAA
//LCD_ShowString(20,90," Font Update Successed ");
delay_ms(1000);
delay_ms(1000);
return 0;//成功
}
#endif
//用這個函數(shù)得到字體地址
//在系統(tǒng)使用漢字支持之前,必須調用該函數(shù)
//包括FONT16ADDR,FONT12ADDR,UNI2GBKADDR;
u8 Font_Init(void)
{
u32 tempsys[2];//臨時記錄文件起始位置和文件大小
u8 fontok=0;
SPI_Flash_Read(&fontok,24,1);//讀出字庫標志位,看是否存在字庫
if(fontok!=0XAA)return 1;
SPI_Flash_Read((u8*)tempsys,0,8);//讀出8個字節(jié)
UNI2GBKADDR=tempsys[0];
//printf("tempsysgbk[0]:%d\n",tempsys[0]);
//printf("tempsysgbk[1]:%d\n",tempsys[1]);
SPI_Flash_Read((u8*)tempsys,8,8);//讀出8個字節(jié)
//printf("tempsysf16[0]:%d\n",tempsys[0]);
//printf("tempsysf16[1]:%d\n",tempsys[1]);
FONT16ADDR=tempsys[0];
SPI_Flash_Read((u8*)tempsys,16,8);//讀出8個字節(jié)
//printf("tempsysf12[0]:%d\n",tempsys[0]);
//printf("tempsysf12[1]:%d\n",tempsys[1]);
FONT24ADDR=tempsys[0];
return 0;
}
復制代碼
歡迎光臨 ELEOK (http://www.afoofa.cn/)
Powered by Discuz! X5.0