GD32F407的CAN初始化需要注意哪些细节

[复制链接]
1943|11
 楼主| stormwind123 发表于 2025-2-10 15:41 | 显示全部楼层 |阅读模式
GD32F407的CAN初始化需要注意哪些细节
598330983 发表于 2025-2-10 18:20 | 显示全部楼层
时钟配置
确保CAN外设的时钟已经使能。例如,如果使用CAN1,需要通过rcu_periph_clock_enable(RCU_CAN1);来使能CAN1的时钟。
598330983 发表于 2025-2-10 18:20 | 显示全部楼层
GPIO配置
需要正确配置CAN的GPIO引脚,包括CAN的RX和TX引脚。
598330983 发表于 2025-2-10 18:21 | 显示全部楼层
  1. __rcu_periph_clock_enable(RCU_GPIOB);
  2. __rcu_periph_clock_enable(RCU_AF);
  3. gpio_init(GPIOB, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, GPIO_PIN_5); // CAN1_RX
  4. gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_6); // CAN1_TX
  5. gpio_pin_remap_config(GPIO_CAN1_REMAP, ENABLE);

确保GPIO引脚的模式、速度和复用功能配置正确

598330983 发表于 2025-2-10 18:21 | 显示全部楼层
CAN参数配置
工作模式:设置为CAN_NORMAL_MODE,即正常工作模式。
自动重传:根据需求配置是否需要自动重传功能。如果需要,可以设置can_parameter.auto_retrans = ENABLE;。
总线关闭恢复:建议使能自动总线关闭恢复功能,即can_parameter.auto_bus_off_recovery = ENABLE;。
接收FIFO覆盖模式:根据需求配置是否允许接收FIFO覆盖,例如can_parameter.rec_fifo_overwrite = DISABLE;。
598330983 发表于 2025-2-10 18:22 | 显示全部楼层
波特率设置
波特率的设置需要根据系统时钟频率计算分频系数、时间段1(TSEG1)和时间段2(TSEG2)。例如,对于1Mbps的波特率,可以设置如下:
  1. can_parameter.resync_jump_width = CAN_BT_SJW_1TQ;
  2. can_parameter.time_segment_1 = CAN_BT_BS1_7TQ;
  3. can_parameter.time_segment_2 = CAN_BT_BS2_2TQ;
  4. can_parameter.prescaler = 9U;

不同波特率的配置参数需要根据公式计算,确保波特率的准确性。
598330983 发表于 2025-2-10 18:22 | 显示全部楼层
本帖最后由 598330983 于 2025-2-10 18:25 编辑

过滤器配置
配置CAN过滤器以接收特定的ID或范围的ID。
  1. can_filter.filter_fifo_number = CAN_FIFO0;
  2. can_filter.filter_enable = ENABLE;
  3. can_filter.filter_bits = CAN_FILTERBITS_32BIT;
  4. can_filter.filter_number = 0;
  5. can_filter.filter_mode = CAN_FILTERMODE_MASK;
  6. can_filter.filter_list_high = 0x0000;
  7. can_filter.filter_list_low = 0x0000;
  8. can_filter.filter_mask_high = 0x0000;
  9. can_filter.filter_mask_low = 0x0000;
  10. can_filter_init(&can_filter);
根据实际需求配置过滤器的数量、模式、位宽等参数。

598330983 发表于 2025-2-10 18:26 | 显示全部楼层
中断配置
如果需要使用中断处理接收数据或发送完成等事件,需要配置相关的中断。例如,启用接收FIFO0非空中断:
  1. can_interrupt_enable(CAN1, CAN_INTEN_RFNEIE0);

确保中断优先级和中断服务函数(ISR)正确配置。
598330983 发表于 2025-2-10 18:26 | 显示全部楼层
FIFO配置
配置接收FIFO的覆盖模式和发送FIFO的顺序模式。例如:
  1. can_parameter.rec_fifo_overwrite = DISABLE; // 禁止接收FIFO覆盖
  2. can_parameter.trans_fifo_order = DISABLE; // 禁用发送FIFO顺序模式

根据实际需求选择是否启用这些功能。
598330983 发表于 2025-2-10 18:26 | 显示全部楼层
其他注意事项
初始化顺序:先进行GPIO和时钟配置,再进行CAN参数初始化。
调试时的波特率问题:如果波特率设置不正确,可能会导致通信失败。建议先使用较低的波特率(如100Kbps)进行调试,确认通信正常后再调整波特率。
硬件连接:确保CAN总线的硬件连接正确,包括终端电阻的配置。
通过以上细节的注意,可以更好地完成GD32F407的CAN初始化,确保其正常工作。
是你的乱码 发表于 2025-2-28 16:37 | 显示全部楼层
在 GD32F407 中初始化 CAN 总线时,除了进行基础的硬件配置和寄存器设置,还需要注意一些细节和步骤。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

605

主题

3747

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部