最近在研发一个小产品,因为成本压力,所以开始入坑STM8.对于一个STM32用惯的人,忽然用STM8,资源有点捉襟见肘,总是担心资源不够用。这是外话,暂且不表。今天就来讲个小问题。大家都知道STM8通常是使用STVD或者IAR开发的,而我使用的就是IAR。然后使用vs code来代理IAR的工程,这样用起来顺手许多。而开发STM8有人用汇编,有人用C。我使用的是C。属于大多数,毕竟汇编几天时间可不能十分熟悉。使用C有人用库,有人不用库。我是后者,使用的是官网下载的库。 这个库还算比较简单,唯一的问题是,很多外设的初始化要写一长串。非常繁琐。官网的库里面有examples。其中的一个关于UART的example就是printf。 手边使用的是STM8105K4,这款单片机其实资源不少。上printf没有问题。IAR关于这一点的支持也很好。 其实printf的支持十分简单,官方的工程中就是:1、配置HSI 2、UART DeInit外设复位 3、UART初始化。 这一步甚至都没有配置GPIO。但是建议还是配置一下。4、定义putchar的原型,并实现它。 工程外还需要设置IAR的配置。如下两图: 图1通常新建工程和默认是Normal,有人建议使用ptintf的时候修改。但是个人觉得不用修改。使用normal的时候不支持multibyte.(multibyte暂时不知道是什么意思,不知道是不是指字符串类的多字节,反正暂时使用它来发送uint16_t都没问题。关于multibyte回头查手册看一下,或者坛友们在帖子里面回应)7 e7 z5 O7 e( p/ I7 r, b" E' ` 而图2将printf和scanf分开设置,还分为FULL,LARGE,SMALL,TINY。而且每一种还有是否支持multibyte。图三还可以设置数学符号,比如支不支持三角函数和指数运算等。这些对于资源有限的外设很有用。这里就不再赘述。 那言归正传,讲一下我调试遇到的问题。起初我按照官网的example做完之后。要打印一句话:) l' H% Y- i) w$ [6 G; q! w
但是我却收到了一段难以理解的数字: -21580,而且有个警告我之前也忽略了,提示printf隐性声明。 起初我忽略了这条警告。尝试了各种修改都不成功。但是我忽然注意官方工程还有一个小细节,这里叫做第5步骤吧:包含基本输入输出命令。
魔鬼存在细节中,我的两个小时就这样被魔鬼吃掉了8 w6 H/ T5 r( V/ ] |
5 J7 W" G, a- k
续上:关于multibytes这个多字节支持选项。起初我怀疑是中文,但是实际上并不是。我还是图1和图2的配置。直接添加中文没有问题。奇怪了。查看IAR的help,中见提到了wprintf。说明应该是指多字节标识的符号。但是和上面的实验不一致。; e! d! x$ W/ G8 i" _, }
这个太奇怪了。请大家有空做个实验。
附件中是官方文档,其中第102做了说明。按照理解应该是中文和其它非英语的多字节符号。但是却奇怪与实验不符合。
4 R3 m% ~4 i( m; F7 c) E
评分
查看全部评分