调整Arduino STM32的串口缓存大小的方法

1 篇文章 0 订阅
1 篇文章 0 订阅

通常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包起来了,所以并不会起作用。

那么如果一定要改这个值的话,需要怎么做呢?

经过研究,发现只要修改中的常量定义就可以了。

\\....\Arduino\hardware\Arduino_STM32-master\STM32F1\system\libmaple\include\libmaple\usart.h

修改USART_RX_BUF_SIZE和USART_TX_BUF_SIZE的值就可以了。

/*
 * 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就可以了。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值