完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
通常Arduino中调整串口缓存大小的方法是修改HardwareSerial.h中的常量。
其实根本无需修改系统core中的定义值,只需要在代码最上方添加以下常量定义,抢在HardwareSerial.h之前定义缓存大小就可以了。 #define SERIAL_RX_BUFFER_SIZE 512 #define SERIAL_TX_BUFFER_SIZE 128 但是如果使用STM32的板子就没那么简单了。 无论你如何修改HardwareSerial.h的常量定义,或者是在代码上方添加定义都是无效的。 因为在STM32的HardwareSerial.h中即便有该常量的定义,其实也是没有用到的,请看以下代码。 #if 0 volatile uint8_t * const _ubrrh; volatile uint8_t * const _ubrrl; volatile uint8_t * const _ucsra; volatile uint8_t * const _ucsrb; volatile uint8_t * const _ucsrc; volatile uint8_t * const _udr; // Has any byte been written to the UART since begin() bool _written; volatile rx_buffer_index_t _rx_buffer_head; volatile rx_buffer_index_t _rx_buffer_tail; volatile tx_buffer_index_t _tx_buffer_head; volatile tx_buffer_index_t _tx_buffer_tail; // Don't put any members after these buffers, since only the first // 32 bytes of this struct can be accessed quickly using the ldd // instruction. unsigned char _rx_buffer[SERIAL_RX_BUFFER_SIZE]; unsigned char _tx_buffer[SERIAL_TX_BUFFER_SIZE]; #endif 缓存数组的定义已经被#If 0 ... #endif包起来了,所以并不会起作用。 那么如果一定要改这个值的话,需要怎么做呢? 经过研究,发现只要修改中的常量定义就可以了。 /* * Devices */ #ifndef USART_RX_BUF_SIZE #define USART_RX_BUF_SIZE 512 //接收缓存大小 #endif #ifndef USART_TX_BUF_SIZE #define USART_TX_BUF_SIZE 64 //发送缓存大小 #endif /** USART device type */ typedef struct usart_dev { usart_reg_map *regs; /**< Register map */ ring_buffer *rb; /**< RX ring buffer */ ring_buffer *wb; /**< TX ring buffer */ uint32 max_baud; /**< @brief Deprecated. * Maximum baud rate. */ uint8 rx_buf[USART_RX_BUF_SIZE]; /**< @brief Deprecated. * Actual RX buffer used by rb. * This field will be removed in * a future release. */ uint8 tx_buf[USART_TX_BUF_SIZE]; /**< Actual TX buffer used by wb */ rcc_clk_id clk_id; /**< RCC clock information */ nvic_irq_num irq_num; /**< USART NVIC interrupt */ } usart_dev; 具体是否有上限并没有测试过,需要注意的是这两个数字将影响所有串口的缓存大小,所以如果设定过大就会占用太多内存。 另外这里是以STM32F1系列为例的,如果是其他系列就修改相应文件夹中的usart.h就可以了。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1771 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1070 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1936浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
729浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
569浏览 3评论
594浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
552浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 22:24 , Processed in 0.724903 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号