一、CAN的时钟和波特率设置
1.先找到CAN时钟,GD32F470的CAN用的是APB1,最大是60M主频
2.在根据用户手册里描述的CAN波特率算法
CAN波特率= APB1(60MHz)/(SYNC_SEG+BS1+BS2)/prescaler
采样点=(1+BS1)/(SYNC_SEG+BS1+BS2)
比如要实现500K的速率,90%采样点,对应的参数如下:
SYNC_SEG=1, BS1=8,BS2=1,Prescaler=12;
二、库函数配置
1.引入库
代码如下(示例):
/* initialize CAN */
can_parameter.time_triggered = DISABLE;
can_parameter.auto_bus_off_recovery = DISABLE;
can_parameter.auto_wake_up = DISABLE;
can_parameter.auto_retrans = ENABLE;
can_parameter.rec_fifo_overwrite = DISABLE;
can_parameter.trans_fifo_order = DISABLE;
can_parameter.working_mode = CAN_LOOPBACK_MODE;
/* configure baudrate to 500kbps */
can_parameter.resync_jump_width = CAN_BT_SJW_1TQ;
can_parameter.time_segment_1 = CAN_BT_BS1_8TQ;
can_parameter.time_segment_2 = CAN_BT_BS2_1TQ;
can_parameter.prescaler = 12;
can_init(CANX, &can_parameter);