说明一下,这篇文章主要是凑更新,然后唠嗑,所以如果想看干货直接翻到底部就行。
好吧首先主题更新一直咕咕咕我真不是故意的,六月份比我想象中的要忙很多,又是大学网课又是实习。(没错我找了个地儿实习,其实就是去学习的哈哈哈)
由于之前单片机接触的真的很浅,拿到一块 stm32 的板子的时候我是很绝望的……
我看到网上说可以用 Arduino 的库来进行 stm32 的板子开发,瞬间产生了浓厚的兴趣。
经过朋友推荐我找到了 PlatformIO 这个神器,只需要在 vscode 里装个插件,就能轻松一键创建项目、编译和下载,真心 i 了。
而且支持多种项目架构,有 Arduino、CMSIS、Stm32Cube(用的 HAL),我这种辣鸡当然就选择了 Arduino 啦。
由于 Arduino 把很多复杂的底层操作都封装好了,所以确实是比直接用官方的 SPL 库方便许多,也好理解很多。
但是这确实也带来了问题——那个主板要进行比较复杂的串口通信,所以对串口缓冲区需求比较高,大概需要 100B。
而经测试 Arduino 默认的串口缓冲区大小只有 64B。
64B 其实基本上也够用了,但是为了稳妥还是得扩大的。
我查了官方工作人员给出的文档,说是要在HardwareSerial.h
里这么改:
#define SERIAL_TX_BUFFER_SIZE 256
#define SERIAL_RX_BUFFER_SIZE 256
然而我改了以后发现没 P 用,无论改成多少测出来缓冲区都是 64B。
而且一开始没改的时候这个设定是 16B,就已经和实验结果不符了。
然后我又浪费了一两个小时找文档,最后实在受不了放弃了。
然后我开始翻起了库文件,并很快发现这两个宏定义似乎并没有起作用——没人引用它们。
???
啥???
我又顺着定义接着翻,最后发现在usart.h
这个头文件里有这么一段:
#ifndef USART_RX_BUF_SIZE
#define USART_RX_BUF_SIZE 64
#endif
#ifndef USART_TX_BUF_SIZE
#define USART_TX_BUF_SIZE 64
#endif
所以只要把这两个 64 改了就行。
我当时一边烧录一边说:你要是真是这问题你就是头猪。
好吧其实我感觉可能是兼容没做好,毕竟官方提供的修改意见中真没提到这个。
然后如果你不想直接修改头文件,只要在platform.ini
里加上这么一行:
build_flags = -D USART_RX_BUF_SIZE=256 -D USART_TX_BUF_SIZE=256
如果是其他的 IDE 的话就是在编译选项里添加上两个 Define:USART_RX_BUF_SIZE=256 USART_TX_BUF_SIZE=256
这个故事告诉我们翻库文件效率可能比查资料要快。
顺带一提,我看了下,Arduino 的串口缓冲区是用循环队列实现的。
特厉害 · 2020-07-16 16:26
上次照着某库官网上的文档写应用,库一直有更新,可我怎么写都觉得那些 API 像半成品,我都快写完了发现源码和文档的版本号差了十几个,我用的都是早就废弃了的......
tencent · 2020-07-10 00:01
不错