首页 » 通讯 » GD32F307芯片中CAN驱动总结_过滤器_时钟

GD32F307芯片中CAN驱动总结_过滤器_时钟

落叶飘零 2025-01-13 23:25:43 0

扫一扫用手机浏览

文章目录 [+]

INT8U init_can1(INT8U tsjw, INT8U tbs2, INT8U tbs1, INT16U brp)

{

GD32F307芯片中CAN驱动总结_过滤器_时钟 通讯

can_parameter_struct can_parameter;

// can_filter_parameter_struct can_filter;

// can_trasnmit_message_struct transmit_message;

can_filter_parameter_struct CAN_FilterInitStructure;

// INT32U ext_id= 0x06&CAN_EFF_MASK;//can_get_local_addr()&CAN_EFF_MASK;

//INT32U mask = 0x0;

// PA11,CAN_RXD PA12,CAN_TXD //使能干系时钟 //使能PORTB时钟 //使能CAN1时钟 rcu_periph_clock_enable(RCU_GPIOA); rcu_periph_clock_enable(RCU_CAN0); //初始化GPIO gpio_init(GPIOA,GPIO_MODE_AF_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_12); gpio_init(GPIOA,GPIO_MODE_IPU,GPIO_OSPEED_50MHZ,GPIO_PIN_11); // gpio_pin_remap_config(GPIO_CAN0_FULL_REMAP, ENABLE); // CAN单元设置 can_deinit(CAN0); 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_NORMAL_MODE;//CAN_LOOPBACK_MODE;//CAN_NORMAL_MODE; can_parameter.resync_jump_width = tsjw; can_parameter.time_segment_1 = tbs1; can_parameter.time_segment_2 =tbs2; can_parameter.prescaler = brp; can_init(CAN0,&can_parameter); // hzd: 过滤器ID和MASK最低3位[2:0]表示: IDE RTR 0, 以是下面设置ID和MASK的时候都左移了3位 // 本地CAN addr过滤器 #if 1 CAN_FilterInitStructure.filter_number = 0; // 过滤器0 CAN_FilterInitStructure.filter_mode = CAN_FILTERMODE_MASK; CAN_FilterInitStructure.filter_bits = CAN_FILTERBITS_32BIT; // 32位 // 32位ID CAN_FilterInitStructure.filter_list_high = 0x0; // (uint16)(((can_get_local_addr() << CAN_MSG_NODE_ADDR_BITS) << 3) >> 16); CAN_FilterInitStructure.filter_list_low = 0x0; // (uint16)(((can_get_local_addr() << CAN_MSG_NODE_ADDR_BITS) << 3) & 0xFFFF); // 32位MASK CAN_FilterInitStructure.filter_mask_high =0x0;//(uint16)((CAN_MSG_NODE_ADDR_MASK << 3) >> 16); CAN_FilterInitStructure.filter_mask_low =0x0;//(uint16)((CAN_MSG_NODE_ADDR_MASK << 3) & 0xFFFF); CAN_FilterInitStructure.filter_fifo_number = CAN_FIFO0; // 过滤器0关联到FIFO0 CAN_FilterInitStructure.filter_enable = ENABLE; // 激活过滤器0 can_filter_init(&CAN_FilterInitStructure); #endif // 广播报文过滤器 can_interrupt_enable(CAN0, CAN_INTEN_RFNEIE0); //nvic_priority_group_set(NVIC_PRIGROUP_PRE4_SUB0); nvic_irq_enable(CAN0_RX0_IRQn, 1, 0); return 0;

}

相关文章