STM32H723 CANFD配置、调试

STM32H723 CANFD配置、调试

1cubemx配置

Fdcan时钟频率选择80Mhz(可以根据需求配置);

选择要配置的fdcan,配置好初始化参数

2初始化FDcan

2.1初始化示例:

void MX_FDCAN1_Init(void)

{

hfdcan1.Instance = FDCAN1;

  hfdcan1.Init.FrameFormat = FDCAN_FRAME_FD_BRS;//设置FDCAN的帧格式为灵活数据频率(FD)帧

  hfdcan1.Init.Mode = FDCAN_MODE_NORMAL;//FDCAN的工作模式设置为正常模式

  hfdcan1.Init.AutoRetransmission = DISABLE;//关闭自动重传功能。

  hfdcan1.Init.TransmitPause = DISABLE;//禁用发送暂停功胿

  hfdcan1.Init.ProtocolException = DISABLE;//关闭协议异常处理

  hfdcan1.Init.NominalPrescaler = 1;//仲裁段分频

  hfdcan1.Init.NominalSyncJumpWidth = 1;//仲裁段跳转宽度

  hfdcan1.Init.NominalTimeSeg1 = 127;//仲裁段时间段1

  hfdcan1.Init.NominalTimeSeg2 = 32;//仲裁段时间段2

  hfdcan1.Init.DataPrescaler = 1;//数据段分频

  hfdcan1.Init.DataSyncJumpWidth = 1;//数据段跳转宽庿

  hfdcan1.Init.DataTimeSeg1 = 15;//数据段时间段1

  hfdcan1.Init.DataTimeSeg2 = 4;//数据段时间段2

  hfdcan1.Init.MessageRAMOffset = 0;//RAM偏移量

  hfdcan1.Init.StdFiltersNbr = 4;//标准id过滤器个数

  hfdcan1.Init.ExtFiltersNbr = 4;//扩展id过滤器个数

  hfdcan1.Init.RxFifo0ElmtsNbr = 1;//fifo0个数

  hfdcan1.Init.RxFifo0ElmtSize = FDCAN_DATA_BYTES_64;

  hfdcan1.Init.RxFifo1ElmtsNbr = 1;

  hfdcan1.Init.RxFifo1ElmtSize = FDCAN_DATA_BYTES_64;

  hfdcan1.Init.RxBuffersNbr = 4;接收缓冲区个数

  hfdcan1.Init.RxBufferSize = FDCAN_DATA_BYTES_64;

  hfdcan1.Init.TxEventsNbr = 0;//tx事件缓冲区个数

  hfdcan1.Init.TxBuffersNbr = 1;//发送缓冲区个数

  hfdcan1.Init.TxFifoQueueElmtsNbr = 1;//txfifohuotx队列缓冲区个数

  hfdcan1.Init.TxFifoQueueMode = FDCAN_TX_FIFO_OPERATION;//选择TXFIFO模式或TX队列模式

  hfdcan1.Init.TxElmtSize = FDCAN_DATA_BYTES_64;//发送数据的字节数

}

2.2初始化参数配置

FrameFormat :FDCAN_FRAME_FD_BRS(用于设置CAN格式)

#define FDCAN_FRAME_CLASSIC   ((uint32_t)0x00000000U)       /* 经典CAN模式 */

#define FDCAN_FRAME_FD_NO_BRS ((uint32_t)FDCAN_CCCR_FDOE)   /* FD CAN不带可变波特率 */

#define FDCAN_FRAME_FD_BRS    ((uint32_t)(FDCAN_CCCR_FDOE | FDCAN_CCCR_BRSE)) /* FD CAN带可变波特率 */

Mode :FDCAN_MODE_NORMAL(用于设置CAN操作模式)

#define FDCAN_MODE_NORMAL               ((uint32_t)0x00000000U) /*!< 正常模式                 */

#define FDCAN_MODE_RESTRICTED_OPERATION ((uint32_t)0x00000001U) /*!< 有限制的操作模式          */

#define FDCAN_MODE_BUS_MONITORING       ((uint32_t)0x00000002U) /*!< 总线监测模式              */

#define FDCAN_MODE_INTERNAL_LOOPBACK    ((uint32_t)0x00000003U) /*!< 内部环回模式              */

#define FDCAN_MODE_EXTERNAL_LOOPBACK    ((uint32_t)0x00000004U) /*!< 外部环回模式             */

 AutoRetransmission:DISABLE(使能自动重传模式。使能ENABLE或者禁止DISABLE)。

TransmitPause:DISABLE(使能或者禁止传输暂停特性。ENABLE使能或者DISABLE禁止)。

ProtocolException:DISABLE(使能或者禁止协议异常管理。ENABLE表示使能,DISABLE表示禁止)。

NominalPrescaler:1(用于CAN FD仲裁阶段分频设置,产生标称位时间量,参数范围1-512)。

NominalSyncJumpWidth:1(设置FD CAN仲裁阶段最大支持的时间量来加长或者缩短一个bit来实现再同步,参数范围1-128)。

NominalTimeSeg1:127(设置仲裁阶段Bit Segment 1的时间量,范围2 – 256)。

NominalTimeSeg2:32(设置仲裁阶段Bit Segment 2的时间量,范围2 – 128)。

DataPrescaler:1(用于CAN FD数据阶段分频设置,范围1-32)。

DataSyncJumpWidth:1(设置FD CAN数据阶段最大支持的时间量来加长或者缩短一个bit来实现数据再同步,参数范围1-16)。

DataTimeSeg1:15(设置数据阶段Data Bit Segment 1的时间量,范围1 – 32)。

DataTimeSeg2:4(设置数据阶段Data Bit Segment 2的时间量,范围1 – 16)。

MessageRAMOffset:0(设置消息RAM起始地址,范围0到2560)。

StdFiltersNbr:4(标准ID过滤个数,范围0到128)。

ExtFiltersNbr:4(扩展ID过滤个数,范围0到64)。

RxFifo0ElmtsNbr:1(RX FIFO0元素个数,范围0到64)。

RxFifo0ElmtSize:FDCAN_DATA_BYTES_64(RX FIFO0每个元素中数据大小)。

#define FDCAN_DATA_BYTES_8  ((uint32_t)0x00000004U) /*!< 8 bytes data field  */

#define FDCAN_DATA_BYTES_12 ((uint32_t)0x00000005U) /*!< 12 bytes data field */

#define FDCAN_DATA_BYTES_16 ((uint32_t)0x00000006U) /*!< 16 bytes data field */

#define FDCAN_DATA_BYTES_20 ((uint32_t)0x00000007U) /*!< 20 bytes data field */

#define FDCAN_DATA_BYTES_24 ((uint32_t)0x00000008U) /*!< 24 bytes data field */

#define FDCAN_DATA_BYTES_32 ((uint32_t)0x0000000AU) /*!< 32 bytes data field */

#define FDCAN_DATA_BYTES_48 ((uint32_t)0x0000000EU) /*!< 48 bytes data field */

#define FDCAN_DATA_BYTES_64 ((uint32_t)0x00000012U) /*!< 64 bytes data field */

Rx

### 使用STM32CubeMX配置并生成STM32H7系列微控制器的初始化代码 #### 创建新项目 通过打开STM32CubeMX,点击`File`菜单中的`New Project...`选项来启动一个新的工程项目[^1]。此时会弹出一个窗口让用户选择目标MCU型号,在这里选择了适用于项目的特定版本即STM32H743IIT6之后确认所选设备无误后按下`Start Project`按钮以继续。 #### 配置时钟树与时钟设置 进入主界面后可以看到左侧有多个标签页用于不同方面的参数调整;其中`Clock Configuration`部分允许修改系统的时钟频率和其他相关属性。对于大多数应用来说,默认值通常已经足够满足需求,但对于某些高性能应用场景可能需要手动优化这些数值以达到最佳性能表现。 #### 设置外设功能 在外设配置区域能够轻松启用或禁用各种硬件模块比如UART、SPI、I2C等通信接口以及ADC/DAC模拟信号处理单元等功能组件。只需简单勾选对应框体就能激活相应特性,并可通过右侧显示的具体寄存器视图进一步细化各项控制位的状态设定。 #### 生成初始化源文件 当完成了所有必要的定制化工作以后就可以准备导出最终成果了——点击界面上方工具栏里的绿色箭头图标(Generate Code),这将会触发一系列自动化流程包括但不限于自动生成完整的初始化程序框架结构及其配套的支持库函数定义等内容。整个过程结束后会在本地磁盘指定路径下形成一套可以直接编译运行于选定平台上的固件工程模板。 ```c // 示例:生成的部分初始化代码片段 HAL_Init(); SystemClock_Config(); // 调整系统时钟至所需频率 MX_GPIO_Init(); // 初始化GPIO端口配置 MX_USARTx_UART_Init();// 启动串行通讯服务 (假设启用了USART外设) ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值