打印

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

[复制链接]
1014|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 | 只看该作者
__rcu_periph_clock_enable(RCU_GPIOB);
__rcu_periph_clock_enable(RCU_AF);
gpio_init(GPIOB, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, GPIO_PIN_5); // CAN1_RX
gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_6); // CAN1_TX
gpio_pin_remap_config(GPIO_CAN1_REMAP, ENABLE);

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

使用特权

评论回复
5
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;。

使用特权

评论回复
6
598330983| | 2025-2-10 18:22 | 只看该作者
波特率设置
波特率的设置需要根据系统时钟频率计算分频系数、时间段1(TSEG1)和时间段2(TSEG2)。例如,对于1Mbps的波特率,可以设置如下:
can_parameter.resync_jump_width = CAN_BT_SJW_1TQ;
can_parameter.time_segment_1 = CAN_BT_BS1_7TQ;
can_parameter.time_segment_2 = CAN_BT_BS2_2TQ;
can_parameter.prescaler = 9U;

不同波特率的配置参数需要根据公式计算,确保波特率的准确性。

使用特权

评论回复
7
598330983| | 2025-2-10 18:22 | 只看该作者
本帖最后由 598330983 于 2025-2-10 18:25 编辑

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

使用特权

评论回复
8
598330983| | 2025-2-10 18:26 | 只看该作者
中断配置
如果需要使用中断处理接收数据或发送完成等事件,需要配置相关的中断。例如,启用接收FIFO0非空中断:
can_interrupt_enable(CAN1, CAN_INTEN_RFNEIE0);

确保中断优先级和中断服务函数(ISR)正确配置。

使用特权

评论回复
9
598330983| | 2025-2-10 18:26 | 只看该作者
FIFO配置
配置接收FIFO的覆盖模式和发送FIFO的顺序模式。例如:
can_parameter.rec_fifo_overwrite = DISABLE; // 禁止接收FIFO覆盖
can_parameter.trans_fifo_order = DISABLE; // 禁用发送FIFO顺序模式

根据实际需求选择是否启用这些功能。

使用特权

评论回复
10
598330983| | 2025-2-10 18:26 | 只看该作者
其他注意事项
初始化顺序:先进行GPIO和时钟配置,再进行CAN参数初始化。
调试时的波特率问题:如果波特率设置不正确,可能会导致通信失败。建议先使用较低的波特率(如100Kbps)进行调试,确认通信正常后再调整波特率。
硬件连接:确保CAN总线的硬件连接正确,包括终端电阻的配置。
通过以上细节的注意,可以更好地完成GD32F407的CAN初始化,确保其正常工作。

使用特权

评论回复
11
是你的乱码| | 2025-2-28 16:37 | 只看该作者
在 GD32F407 中初始化 CAN 总线时,除了进行基础的硬件配置和寄存器设置,还需要注意一些细节和步骤。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

491

主题

2811

帖子

3

粉丝