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

吐槽:STM32官方历程字库问题

[复制链接]
qianfan 发布时间:2015-3-5 21:00
本帖最后由 QianFan 于 2015-3-5 21:04 编辑
7 s4 V$ P# t* a3 v$ C& r- e* n/ @3 L) M, [' R3 |9 g
    今天使用STM32F429I Discovery编写一个简单的图形函数,主要是基于FrameBuffer的绘图。在绘制圆,直线,矩形的时候还算是正常,但是当在屏幕上打印字符串的时候出现了bug。由于使用了ST官方历程的字体库,懒得自己取模了。ST的源文件是:fonts.c。这个大家可以再官方的固件库中找到。这里就不上传了。( T2 g6 t+ \( Q' e7 C
    在编写程序实际测试的时候,发现不同的字体显示效果不一样,有的是正常的,有的是左右颠倒的。这个很自然的想到是MSB/LSB FIRST的问题,也就是取模时高低位哪一个在前的问题。可是不管是改成MSB FIRST 还是LSB FIRST,总会有几个字库的文字是颠倒的,并且字与字之间的间隔很大。本着瞎折腾的原则,我用excel将不同字库的a字母画了一遍(之所以选用a是因为a左右颠倒之后比较明显)。下面是截图:' `# K" n6 g; c  l
    先看0808的:取模的时候是高位在前,这个a还算是比较均衡的。左右还算是对称。
1 b4 B. p! y% i0 y

0808

0808
) }" g* j7 A/ ]$ n+ x$ I; t
( W5 N' r* _; a; p: S1 I. }# n

' u) ]0 p" J) C  再来看0812的:和0808的一样,也是MSBFIRST,不过这个字严重比例失调。这是什么情况。。。已无力吐槽。这字库是实习生做的吧。。。5 i1 Z, R- q6 Q) e- |( ~; K- p

0812

0812

$ D( P: @+ ^! x) e' D+ o% y2 o7 u; k" @
) l, j2 f, q: r7 ]! o# y
下一个是1212的:这个竟然不同于上两个,竟然是LSB FIRST,这使用不同的字库竟然还要在开始的时候判断是LSB FIRST 还是MSB FIRST吗???上下还说的过去,但是在看看这左右。。。。. Y% q2 ^& S( Q5 ?4 G2 x1 p) w

1212

1212
* C* u; Y0 j7 p1 f2 b/ N6 V) b9 Q4 X/ W
9 v8 B: [9 r! o4 j( Q2 w

! v1 [; x/ Y) D+ E$ F! n& F7 x4 h. [$ n5 F
* G9 T6 F) F# E8 N0 {& g9 e" U
最后一个是还算比较正常的1624 。。。只不过依然霸气的使用LSB FIRST,结果我按照MSB FIRST画出来是这个样子::总的来说上下左右还算比较对称。
( Y7 N1 E, G' D( @

1624

1624

- B% ~- Z; x" [( N: y' p" q7 B+ @: w) F3 ]

% p1 A9 m3 K9 s. x5 c& F# Y
6 _+ M' o! X" Y; d5 @! L: [

/ p! V& N# ?" n0 l四种字体中竟然两种LSB FIRST,两种MSB FIRST。。想想也是醉了,更不用吐槽这个对称了。。。
: O/ C3 c7 V% Q# `难道老外喜欢的是不对称的美吗& ^/ L3 L. R7 A9 x

* d% f& i! g% W+ D6 E
9 [/ n  L3 V: ?9 c% d4 Z
上传一个这四个字体的pdf(因为社区不能上传excel,所以转成pdf之后上传)。0 `8 L9 t6 |0 k$ C6 R/ b
8 V: W+ C  K4 Q# I2 f

' I% C! H8 h/ u5 H3 M* |8 M8 F  h6 a

0 g" Z% @* I. V0 s/ s8 t) j! D9 [! I2 y) K/ a
- B# i; y/ y6 p) z' l1 ]3 d9 S9 W
8 H; V+ {3 Y5 U* A; v4 e3 l

$ [6 f4 O. \! B; B" ~( J

Font.pdf

下载

55.96 KB, 下载次数: 2

收藏 评论12 发布时间:2015-3-5 21:00

举报

12个回答
moyanming2013 回答时间:2015-3-5 21:34:59
帮顶,话说是不是不同的用途才会那样?
1 i' h; ^, }$ y6 ^' u
qianfan 回答时间:2015-3-5 21:38:51
moyanming2013 发表于 2015-3-5 21:34% @: y) o# E" c; Z6 |- e7 p" ^
帮顶,话说是不是不同的用途才会那样?

/ S8 T# [  `3 p- _! a% x没必要,不同的用途的话只需要在程序中修改从高位读取或者从第低位读取就行,没必要重做字库
moyanming2013 回答时间:2015-3-5 21:41:40
QianFan 发表于 2015-3-5 21:38
  e  T! S2 z4 x. Y# K' T, n没必要,不同的用途的话只需要在程序中修改从高位读取或者从第低位读取就行,没必要重做字库 ...
+ l5 B# `$ L  F7 [* \
你会发现上述字库并没有漏掉信息,只是位置不同,类似于减少字母占用的显示宽度?比如i就比a少占用显示空间。
qianfan 回答时间:2015-3-5 21:53:57
moyanming2013 发表于 2015-3-5 21:41; ~8 h- R$ P: t$ e+ U! g6 w
你会发现上述字库并没有漏掉信息,只是位置不同,类似于减少字母占用的显示宽度?比如i就比a少占用显示空 ...
4 h2 E% d% c6 J" \* w/ |
可是至少也要做的对称一点、、。。。。还有剩下那么多的空间就不能把字体做的稍微大一点。。。
拼命三郎 回答时间:2015-3-6 08:05:02
ddddd.png
1407W 回答时间:2015-3-6 09:51:16
帮顶一下
wenyangzeng 回答时间:2015-3-6 10:30:01
本帖最后由 wenyangzeng 于 2015-3-6 10:35 编辑 ! h+ ~- i& d9 }8 F' D! ]1 x, I4 R
$ z% [$ |% b' G! t
应该是你读取字库数据或写数据到LCD缓冲区时的时序或指针出错所致吧。你可以查看字模读取到缓存后的数据正确否,如果正确,就不是字库的问题了。况且对于英文字模,都是非常现成的,无需ST自己再去造字。
wamcncn 回答时间:2015-3-6 13:04:29
谢谢分享
stary666 回答时间:2015-3-6 13:35:34
_ilikerome_ 回答时间:2015-3-7 11:01:20
学习一下了。。。
JackieLaura 回答时间:2015-6-10 15:38:54
老外是不是喜欢左对齐啊,右边空着刚好和第二个字符之间形成了一定的间隔,容易查看?
qianfan 回答时间:2015-6-10 16:51:35
JackieLaura 发表于 2015-6-10 15:38# V- D$ c" v% Z
老外是不是喜欢左对齐啊,右边空着刚好和第二个字符之间形成了一定的间隔,容易查看? ...
; N3 B" U5 `4 R/ B  T' ?
不清楚老外是怎么想的啊

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版