STM32的USART的数据寄存器只有一个吗?

前言

这是一个看似很基础但是又常常被忽略的问题,尤其是对于只接触了STM32F1系列的初学者而言。


USART(通用同步异步收发器)的数据寄存器配置因具体型号和厂商而异,但通常分为以下两种情况:


1. 单数据寄存器(共享收发)

  • 常见于基础型号(如STM32F1系列、AVR等):

    • 使用同一个物理寄存器 (如USART_DR)进行发送和接收。
    • **发送数据寄存器(TDR)接收数据寄存器(RDR)**在逻辑上分开,但共用同一地址。
    • 写入时操作发送缓冲区,读取时访问接收缓冲区。
    • 特点 :软件需通过状态寄存器(如USART_SR)检查当前是发送完成还是接收就绪。
  • 示例代码(STM32)

    c 复制代码
    // 发送数据
    USART1->DR = data; // 写入TDR
    // 接收数据
    data = USART1->DR; // 读取RDR

2. 独立收发寄存器

  • 高端/新型MCU (如STM32H7系列):
    • 提供独立的发送寄存器(TDR)和接收寄存器(RDR),有不同地址。
    • 优势:减少软件开销,避免读写冲突风险。
    • 示例
      • USART_TDR(发送)
      • USART_RDR(接收)

关键注意事项:

  1. 硬件差异:需查阅具体芯片的参考手册(如STM32的Reference Manual或AVR的Datasheet)。
  2. FIFO支持:部分USART带硬件FIFO,可缓存多个数据(如STM32 UART的16字节FIFO)。
  3. DMA支持:直接内存访问可绕过寄存器操作,提升效率。

总结:

  • 多数情况下,用户看到的是"一个数据寄存器",但硬件可能分开实现。
  • 开发建议 :优先使用库函数(如HAL库的HAL_UART_Transmit()),避免直接操作寄存器。

若有具体型号,可进一步分析其数据手册!

相关推荐
深圳市九鼎创展科技7 小时前
瑞芯微 RK3399 开发板 X3399 评测:高性能 ARM 平台的多面手
linux·arm开发·人工智能·单片机·嵌入式硬件·边缘计算
辰哥单片机设计7 小时前
STM32项目分享:车辆防盗报警系统
stm32·单片机·嵌入式硬件
風清掦8 小时前
【江科大STM32学习笔记-05】EXTI外部中断11
笔记·stm32·学习
小龙报8 小时前
【51单片机】从 0 到 1 玩转 51 蜂鸣器:分清有源无源,轻松驱动它奏响新年旋律
c语言·数据结构·c++·stm32·单片机·嵌入式硬件·51单片机
范纹杉想快点毕业8 小时前
嵌入式与单片机开发核心学习指南——从思维转变到第一性原理的深度实践
单片机·嵌入式硬件
Industio_触觉智能8 小时前
瑞芯微RK3566开发板规格书,详细参数配置,型号EVB3566-V1,基于RK3566核心板SOM3566邮票孔封装
嵌入式硬件·开发板·rk3568·rk3566·核心板·瑞芯微
czwxkn9 小时前
4STM32(stdl)TIM定时器
stm32·单片机·嵌入式硬件
Love Song残响9 小时前
NVIDIA显卡终极优化指南
stm32·单片机·嵌入式硬件
qq_672592759 小时前
电源芯片为什么发热
单片机·嵌入式硬件
天天爱吃肉82189 小时前
【跨界封神|周杰伦×王传福(陶晶莹主持):音乐创作与新能源NVH测试,底层逻辑竟完全同源!(新人必看入行指南)】
python·嵌入式硬件·算法·汽车