STM32的CANFD寄存器
时间: 2024-12-25 14:22:22 浏览: 8
### STM32 CANFD 寄存器详解
#### 配置寄存器 (FDCAN_CCCR)
此寄存器用于控制和配置 FDCAN 模块的操作模式和其他基本参数。通过设置 CCCR 中的不同位可以启用或禁用某些特性,比如协议异常处理、测试模式等。
- **PROTOCOL EXCEPTION HANDLING (PXHD)**: 控制是否开启协议例外情况下的特殊行为。
- **TEST MODE**: 设置进入不同的诊断测试模式。
CCCR 的初始化应在 INIT 请求标志被激活时完成[^1]。
```c
// 初始化并配置 CCCR 寄存器的例子
fdcan->CCCR |= FDCAN_CCCR_INIT; // 进入初始化模式
```
#### 波特率预分频器寄存器 (FDCAN_BRP)
BRP 寄存器定义了波特率整形因子 BRP 值,它决定了时间量化单位 TQ 的长度。TQ 是由振荡器周期乘以 BRP 得来,在标准 CAN 和 FD 数据阶段都可以独立设定。
对于多个 FDCAN 实例共享同一内核时钟源的情况,可以通过调整 `CKDIV` 来改变输入给各个实例的实际频率,这会影响到所有共用相同时钟树的模块如 FDCAN2 和 FDCAN3。
```c
// 设定 BRP 寄存器值为例程
fdcan->NBTP.BRPE = brp_value;
```
#### 名义比特定时及 prescaler register (FDCAN_NBTP)
这个寄存器用来指定名义上的同步跳转宽度 SJW 及两个相位缓冲区 PBS1 和 PBS2 的大小,还有传播延时 PT 时间段。这些参数共同决定了一次通信中的每一位所占用的时间间隔。
- **NSJW (Nominal Synchronization Jump Width)**: 定义最大允许跳跃范围。
- **NPBS1, NPBS2 (Nominal Phase Buffer Size 1 & 2)**: 分别对应 BS1 和 BS2 的持续期数。
- **NBRP (Nominal Bit Rate Prescaler)**: 影响整个位周期内的采样点位置。
```c
// NBTP 寄存器配置示例
fdcan->NBTP.NSJW = sjw_value;
fdcan->NBTP.NTSEG1 = tseg1_value;
fdcan->NBTP.NTSEG2 = tseg2_value;
fdcan->NBTP.NBRP = nbrp_value;
```
#### 数据比特定时及 prescaler register (FDCAN_DBTP)
当使用灵活数据速率功能时,DBTP 寄存器提供了额外的选项去单独调节高速部分的数据传输速度。其结构类似于 NBTP,但是针对的是数据字段而非仲裁域。
- **DSJW (Data Synchronization Jump Width), DPBS1, DPBS2, DPRESDIV**: 类似于上述提到的概念,只是应用于更高带宽的数据流上。
```c
// DBTP 寄存器配置示例
fdcan->DBTP.DSJW = dsjw_data_rate;
fdcan->DBTP.DTSEG1 = dtseg1_data_rate;
fdcan->DBTP.DTSEG2 = dtseg2_data_rate;
fdcan->DBTP.DBRP = dbrp_data_rate;
```
#### 错误计数器寄存器 (FDCAN_ECR)
ECR 记录着当前节点作为接收者或发送者的错误次数统计信息。每当检测到总线上有不一致的现象发生时就会更新这里的数值,并据此判断设备应该采取何种类型的错误信号响应方式—主动还是被动形式[^3]。
```c
uint8_t tx_error_count = fdcan->ECSR.TEC;
uint8_t rx_error_count = fdcan->ECSR.REC;
```
阅读全文