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