关于S32DS的LPUART2串口的波特率的配置

关于S32DS的LPUART2的波特率的配置 实测可用

12-0   SBR
Baud Rate Modulo Divisor.
The 13 bits in SBR[12:0] set the modulo divide rate for the baud rate generator. When SBR is 1 - 8191,
the baud rate equals "baud clock / ((OSR+1) × SBR)". The 13-bit baud rate setting [SBR12:SBR0] must
only be updated when the transmitter and receiver are both disabled (LPUART_CTRL[RE] and
LPUART_CTRL[TE] are both 0).
 
28-24
OSR
Oversampling Ratio
This field configures the oversampling ratio for the receiver. This field should only be changed when the
transmitter and receiver are both disabled.

 

由于电脑加密,不能截图,数据手册只用上两个位定义就够

公式为    baud= clock / ((OSR+1) × SBR)

也就是    baud=8M/((OSR+1)× SBR )

所以9600的波特率为  //LPUART2->BAUD = 0x0F000034;  //波特率 9600    baud=8M/((15+1)× 52 )

所以115200的波特率为  //LPUART2->BAUD = 0x0D000005;  //波特率 115200    baud=8M/((13+1)× 5)

### S32K3 微控制器 UART 波特率配置方法 在 S32K3 系列微控制器中,UART 的波特率设置是一个重要的环节,它决定了数据传输的速度和准确性。以下是关于如何配置 S32K3 中 LPUART(低功耗通用异步收发器)的波特率及相关参数的内容。 #### 配置环境准备 在开始配置之前,需确保开发环境中已加载必要的驱动程序和支持库。通过 S32DS 开发工具打开项目后,在引脚图上定位到 `LPUART_0` 并选择对应的 TX 和 RX 引脚(如 PTA2 和 PTA3)。这一步骤已在参考资料中提及[^1]。 #### 波特率计算原理 UART 的波特率由以下公式决定: \[ \text{Baud Rate} = \frac{\text{Bus Clock}}{\text{(OSR + 1)} \times \text{Prescaler Value}} \] 其中: - **Bus Clock**: 总线时钟频率。 - **OSR (Over Sampling Ratio)**: 过采样比率,默认值通常为 16 或者其他预定义值。 - **Prescaler Value**: 分频系数,用于调整最终的波特率。 具体实现过程中,可以通过修改寄存器中的分频值来达到目标波特率的要求。 #### 寄存器配置 对于 S32K3 而言,主要涉及以下几个关键寄存器: 1. **BAUD Register** 此寄存器控制波特率的具体数值。其字段包括 BAUD_M[9:0], OSR, 和 BAUDDIV_LPF。这些字段共同影响实际波特率的设定。 2. **CTRL Register** 控制功能使能状态以及停止位长度等选项。例如,启用发送/接收模式、奇偶校验等功能均在此处完成初始化。 3. **DATA Register** 数据缓冲区操作区域,负责存储待发送的数据或者接收到的信息包。 下面展示一段典型的 C 语言代码片段用来演示如何初始化并设置指定的波特率为 115200bps: ```c #include "uart.h" void init_uart(void){ uint32_t clock_speed = CLOCK_GetFreq(kCLOCK_BusClk); // 获取当前总线时钟速度 /* 计算合适的 prescale 值 */ uint16_t baud_prescaler = ((clock_speed / (16 * 115200)) - 1); /* 初始化 LPUART 模块 */ LPUART_Type* base = LPUART0; /* 设置波特率相关的寄存器 */ base->BAUD &= ~(LPUART_BAUD_OSR_MASK | LPUART_BAUD_MAEN1_MASK); base->BAUD |= LPUART_BAUD_OSR(16) | LPUART_BAUD_MBGEN_MASK; base->BAUD &= ~LPUART_BAUD_SBR_MASK; base->BAUD |= LPUART_BAUD_SBR(baud_prescaler >> 4); /* 启用发送与接收功能 */ base->CTRL |= LPUART_CTRL_TE_MASK | LPUART_CTRL_RE_MASK; } ``` 上述代码实现了基本的功能需求,并且遵循了官方文档推荐的最佳实践方式[^2]。 #### 主函数扩展支持 printf 功能 如果希望进一步简化调试过程,则可以引入标准输入输出流的支持机制。将自定义实现版本的 `printf.c` 及头文件加入工程目录下即可满足此目的。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值