论坛元老
 
- 积分
- 10653
- 金钱
- 10653
- 注册时间
- 2017-4-14
- 在线时间
- 2780 小时
|
本帖最后由 nashui_sx 于 2020-12-29 10:08 编辑
1.STM32F103C8T6
2.字库升级等代码,参见正点原子的例子
3.fatfs采用最新的FatFs R0.14 http://elm-chan.org/fsw/ff/00index_e.html
4.以下是说明
1)首先不创建读取汉字文件名文件,fatfs文件系统是不需要字库的,文件内部读写汉字不受字库有无影响
2)带sd卡时候又不想带flash,读写汉字文件名文件可以直接把字库放在SD卡
3)STM32F10x_CONF_H里面有是否带SD卡 或者是否带flash的宏
4)下面的宏是优先使用flash的字库
#if (SET_W25Qxx==0)
#define ZiKu_Weizhi 2 //2:SD卡字库
#endif
#if (SET_SD==0)
#define ZiKu_Weizhi 1 //1:Flash字库
#endif
#if (SET_W25Qxx==0&&SET_SD==0)
#define ZiKu_Weizhi 0 //0:程序内部(全部ASCII+部分汉字)
#endif
#if (SET_W25Qxx!=0&&SET_SD!=0)
#define ZiKu_Weizhi 1 //1:Flash字库
#endif
5)移植主要是对接 936大数组(最新版在ffunicode.c中) 大数组删掉,改成从sd或者flash读取转码
WCHAR ff_convert(WCHAR src,UINT dir)
{
WCHAR t[2];
WCHAR c;
u32 i, li, hi;
u16 n;
unsigned int cout;
u32 gbk2uni_offset=0;
if (src < 0x80) c = src; //ASCII,直接不用转换.
#if ZiKu_Weizhi==1
else
{
if(dir)gbk2uni_offset=ftinfo.ungbk_size/2; //GBK 2 UNICODE
else gbk2uni_offset=0; //UNICODE 2 GBK
if(ZiKu_Open_Flag)//存在
{
/* Unicode to OEMCP */
hi=ftinfo.ungbk_size/2;//对半开.
hi =hi / 4 - 1;
li = 0;
for (n = 16; n; n--)
{
i = li + (hi - li) / 2;
W25Qxx_Read((u8*)&t,ftinfo.ungbk_addr+i*4+gbk2uni_offset,4);//读出4个字节
if (src == t[0]) break;
if (src > t[0])li = i;
else hi = i;
}
c = n ? t[1] : 0;
}
else c=0;
}
#endif
#if ZiKu_Weizhi==2
else
{
if(dir)gbk2uni_offset=f_size(&SD_UNIGBK_FILE)/2; //GBK 2 UNICODE
else gbk2uni_offset=0; //UNICODE 2 GBK
if(ZiKu_Open_Flag)//存在
{
/* Unicode to OEMCP */
hi=f_size(&SD_UNIGBK_FILE)/2;//对半开.
hi =hi / 4 - 1;
li = 0;
for (n = 16; n; n--)
{
i = li + (hi - li) / 2;
f_lseek(&SD_UNIGBK_FILE,i*4+gbk2uni_offset);
f_read(&SD_UNIGBK_FILE,&t,4,&cout);
if (src == t[0]) break;
if (src > t[0])li = i;
else hi = i;
}
c = n ? t[1] : 0;
}
else c=0;
}
#endif
return c;
}
6)字库路径
//字库存放在sd卡中的路径
const u8 *UNIGBK_PATH ="0:/SD_SAVE_FILE/FONT/UNIGBK.BIN"; //UNIGBK的存放位置( 936大数组)
const u8 *ASCII_PATH ="0:/SD_SAVE_FILE/FONT/ASCII.FON" ; //ASCII的存放位置
const u8 *GBK12_PATH ="0:/SD_SAVE_FILE/FONT/GBK12.FON" ; //GBK12的存放位置
const u8 *GBK16_PATH ="0:/SD_SAVE_FILE/FONT/GBK16.FON" ; //GBK16的存放位置
const u8 *GBK24_PATH ="0:/SD_SAVE_FILE/FONT/GBK24.FON" ; //GBK24的存放位置
const u8 *GBK32_PATH ="0:/SD_SAVE_FILE/FONT/GBK32.FON" ; //GBK32的存放位置
6)sd flash对接自己的开发板 只需要改相应的.h移植区就好了,.c无需修改
(修改SPI_SD_H 中的SD_CS引脚 _W25QXX_H_ W25Qxx_CS 这两个地方103的开发板 肯定可以直接运行)////////////////////////////////////////移植修改区域///////////////////////////////////////////////////////////
//.c 文件无需任何修改
#define W25Qxx_TYPE W25Q128
#define W25Qxx_CS_GPIOx GPIOC
#define W25Qxx_CS_Pin GPIO_Pin_13
#define W25Qxx_CS PCout(13)
#define W25Qxx_SPI_SELECT 1 //1:SPI1 2:SPI2
#define W25Qxx_SPI_BaudRatePrescaler_x SPI_BaudRatePrescaler_2 //(W25Qxx的最大SPI时钟为104Mhz)
//根据芯片型号与SPI设置分频数值
//103:SPI1-APB2=72M SPI2-APB1=36M
//407:SPI1-APB2=84M SPI2-APB1=42M
////////////////////////////////////////移植修改区域///////////////////////////////////////////////////////////
////////////////////////////////////////移植修改区域///////////////////////////////////////////////////////////
//.c 文件无需任何修改
#define SD_GPIOx GPIOA
#define SD_CS_Pin GPIO_Pin_4
#define SD_CS PAout(4)
#define SD_SPI_SELECT 1 //1:SPI1 2:SPI2
#define SD_SPI_BaudRatePrescaler_x SPI_BaudRatePrescaler_2 //(SD的最大SPI时钟为 Mhz)
//根据芯片型号与SPI设置分频数值
//103:SPI1-APB2=72M SPI2-APB1=36M
//407:SPI1-APB2=84M SPI2-APB1=42M
////////////////////////////////////////移植修改区域///////////////////////////////////////////////////////////
#define SD_MODE_SPI_SDIO 0//0:SPI 1:SDIO
7) sd.h中 #define SD_MODE_SPI_SDIO 0//0:SPI 1:SDIO 切换sd卡驱动方式
8)其他的看工程
FATFS FLASH SD ZIKU.rar
(445.33 KB, 下载次数: 363)
|
|