你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

OLED+串口+FLASH字库

[复制链接]
xueshawu 提问时间:2017-6-13 11:51 /
悬赏1ST金币未解决
因为OLED需要显示的字很多,所以想把字库放到flash中调用;我通过PC端利用串口调试助手发送字库数据;处理方式如下:
void USART2_IRQHandler(void) //接收字库专用
{
uint8_t res;
if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET)
{
  res = USART_ReceiveData(USART2);
  W25QXX_Write(&res,Font_Star_Addr++,1);
}
}

串口调试助手我采用 的是XCOM;
2.png

然后,我测试的时候发现,显示出来的是OLED全亮;
然后,仿真是读取我存在flash中 的部分数据;发现有可能字库写入失败;

所以,想请教下,到底应该怎么做;我的FLASH只有1M的空间;所以只能选择GB2312的字库;我采用的点阵大小是16的

收藏 评论14 发布时间:2017-6-13 11:51

举报

14个回答
zhao.zhao 回答时间:2017-6-13 12:18:22
你的CPU如果是512K的,那么直接将点阵字库作为文件,写在CPU的FLASH内。如果CPU的FLASH比较小,则可以将字库文件分割后,做几个程序,分别写到W25QXX的相应的位置。当然,字库文件字节要准备好。
xueshawu 回答时间:2017-6-13 14:40:32
zhao.zhao 发表于 2017-6-13 12:18
你的CPU如果是512K的,那么直接将点阵字库作为文件,写在CPU的FLASH内。如果CPU的FLASH比较小,则可以将字 ...

分割倒是不用;肯定是要存储在flash中的;我目前测试发现串口中断接收数据后,写入flash中会卡死;串口波特率是115200;SPI时钟速度是12M;我看网上好多接收一个Byte就写入一个 字节;有点奇怪
zhao.zhao 回答时间:2017-6-13 15:59:17
初步判断SPI写的时间过长,可能超过了USART的时间了,所以出现卡死的迹象。
为了测试,你可以先写100个字节,然后再写个程序只读这100个字节,从串口输出,如果两者相同,那么以上判断错误,如果有数据丢失,那么上面判断正确,你得换个思路了
xueshawu 回答时间:2017-6-13 16:40:00
zhao.zhao 发表于 2017-6-13 15:59
初步判断SPI写的时间过长,可能超过了USART的时间了,所以出现卡死的迹象。
为了测试,你可以先写100个字节 ...

字库,我暂时写进去了;我换了串口上位机;然后,我读取一个字显示,发现字是躺下来的;然后,换了一种取模方式,结果也一样;我刚看到一种SD卡的字库方式,需要支持fatfs,但是我只有flash没有sd;这样行的通么
xueshawu 回答时间:2017-6-13 16:42:11
zhao.zhao 发表于 2017-6-13 15:59
初步判断SPI写的时间过长,可能超过了USART的时间了,所以出现卡死的迹象。
为了测试,你可以先写100个字节 ...

我之前用OLED显示过几个简单的汉字;通过取模放在片内的flash里面;然后,我刚用那个软件,生成字库是font格式的,貌似我不能用 串口助手去导入
xueshawu 回答时间:2017-6-13 17:45:45
字库的FON文件如何利用串口助手导入
zhao.zhao 回答时间:2017-6-13 19:28:08
明天我发个字库的,你来下载试试
zhao.zhao 回答时间:2017-6-13 19:28:54
顺便问一下,你的CPU型号是什么?
xueshawu 回答时间:2017-6-14 11:00:10
zhao.zhao 发表于 2017-6-13 19:28
顺便问一下,你的CPU型号是什么?

我的CPU型号是STM32F030C8T6;另外,FON文件通过串口发送,我已经解决了;现在有新问题,我采用的字库是GB2312;我计算 出来的偏移量不对
xueshawu 回答时间:2017-6-14 11:01:34
不行,我就只能用GBK字库;但是我只有1M的flash的空间;后面还有PWM 语音功能要做,不知道空间够不够
zhao.zhao 回答时间:2017-6-14 12:52:43
void  Read_aWord_Hzk16_Dot(u32 aword,u8 *dot)
{
   u32   ch1,ch2,hzk_dot_addr;

   ch2 =  aword & 0xff;
   ch1 = (aword>>8) & 0xff;

   hzk_dot_addr =  ((ch1-0xa1)*94 + ch2-0xa1) * 32 ;   
   
   SPI1_Flash_Read(dot,hzk_dot_addr,32);
}
xueshawu 回答时间:2017-6-14 14:45:25
zhao.zhao 发表于 2017-6-14 12:52
void  Read_aWord_Hzk16_Dot(u32 aword,u8 *dot)
{
   u32   ch1,ch2,hzk_dot_addr;

你这个获取偏移量是基于GB2312的么?
zhao.zhao 回答时间:2017-6-14 16:32:14
是的,这个是标准算法
xueshawu 回答时间:2017-6-14 17:40:06
我先留着,以后再看,我已经用GBK字库做完汉化了;感谢

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版