涟水网站建设,什么是网络营销 职能是什么,太原电脑培训班哪家好,深圳网站建设首选全通网络双CAN开发板 双CAN、一路485开发板的设计开发板配置器件选型CAN设计硬件设计软件设计 485设计硬件设计软件设计 其他设计LED硬件按键硬件 PCB板子和实物图开发板测试视频其他资料 双CAN、一路485开发板的设计
最近工作经常会出现一些小问题。就想设计一款带CAN的开发板用来测试… 双CAN开发板 双CAN、一路485开发板的设计开发板配置器件选型CAN设计硬件设计软件设计 485设计硬件设计软件设计 其他设计LED硬件按键硬件 PCB板子和实物图开发板测试视频其他资料 双CAN、一路485开发板的设计
最近工作经常会出现一些小问题。就想设计一款带CAN的开发板用来测试代码于是就设计了一款双CAN带一路485的开发板。 此篇文章是关于开发板的设计方案。
开发板配置
双路CAN通信一路485通信两路串口可选一个EEPROM存储三个LED指示灯三个按键其余所有IO口引出
器件选型
主控采用了国产兆易的GD互联型芯片有两路CAN通信CAN采用目前比较流程TJA1057方案。以下是主要的器件选型
主控MCU GD32F105RBT6CAN芯片TJA1057T485芯片MAX3485ESAEEPROM芯片AT24C128电源芯片芯片ASM1117-3.3V
CAN设计
硬件设计
CAN设计采用TJA1057T设计由于TJA1057T是5V芯片需要在Rx到单片机采用一个电压转换电路。为了节省成本我们采用一个分压电阻将电压调试到3.3V。设计还并联了一个120欧的匹配电阻和一个跳线帽串联起来用户可以通过跳线帽先择是否接入120电阻。这题设计如图所示。
软件设计 CAN波特率计算波特率 APB1频率 / CAN分频 / BS1 BS2 1; 这里初始化采用的是掩码模式掩码中设置的为1时报文ID为必须匹配掩码为0时报文ID为无关紧要。例如ID为0x18FF1111。当掩码设置为0x1FFF FFFF时。只有接收到0x18FF1111才会通过滤波进入CAN接收中断。当掩码设置为0x1FFFFFFE时可以接收到0x18FF1110和0x18FF1111。 void SysInit_CAN(void)
{/* CANs configuration */CAN_Config();/* IT Configuration for CAN1 */can_interrupt_enable(CAN0, ENABLE);can_interrupt_enable(CAN1, ENABLE);
}
/*CAN初始化*/
void CAN_Config(void)
{uint32_t id ;can_parameter_struct CAN_InitStructure;can_filter_parameter_struct CAN_FilterInitStructure;rcu_periph_clock_enable(RCU_GPIOA);rcu_periph_clock_enable(RCU_GPIOB);rcu_periph_clock_enable(RCU_CAN0);rcu_periph_clock_enable(RCU_CAN1);rcu_periph_clock_enable(RCU_AF);/* Configure CAN1 RX pin */gpio_pin_remap_config(GPIO_CAN0_PARTIAL_REMAP, ENABLE);gpio_init(GPIOB, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, GPIO_PIN_8);gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);gpio_init(GPIOB, GPIO_MODE_IPU, GPIO_OSPEED_10MHZ, GPIO_PIN_12);gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_13);/* Configure CAN1 TX pin *//* CAN1 and CAN2 register init */can_deinit(CAN0);can_deinit(CAN1);/* initialize CAN */CAN_InitStructure.time_triggered DISABLE;CAN_InitStructure.auto_bus_off_recovery ENABLE;CAN_InitStructure.auto_wake_up DISABLE;CAN_InitStructure.auto_retrans DISABLE;CAN_InitStructure.rec_fifo_overwrite DISABLE;CAN_InitStructure.trans_fifo_order DISABLE;CAN_InitStructure.working_mode CAN_NORMAL_MODE;CAN_InitStructure.resync_jump_width CAN_BT_SJW_1TQ;CAN_InitStructure.time_segment_1 CAN_BT_BS1_6TQ;CAN_InitStructure.time_segment_2 CAN_BT_BS2_1TQ;/* baudrate 250K bps */CAN_InitStructure.prescaler 6;can_init(CAN0, CAN_InitStructure);CAN_InitStructure.prescaler 6;can_init(CAN1, CAN_InitStructure);/* initialize filter */id 0x18ffffff;//需过滤的EXT_ID/* CAN0 filter number */CAN_FilterInitStructure.filter_number 0;/* initialize filter */CAN_FilterInitStructure.filter_mode CAN_FILTERMODE_MASK;CAN_FilterInitStructure.filter_bits CAN_FILTERBITS_32BIT;CAN_FilterInitStructure.filter_list_high (((u32)id 3)0xFFFF0000)16;;CAN_FilterInitStructure.filter_list_low (((u32)id 3)|CAN_FF_STANDARD|CAN_FF_EXTENDED)0xFFFF;;CAN_FilterInitStructure.filter_mask_high 0x0000;CAN_FilterInitStructure.filter_mask_low 0x0000;CAN_FilterInitStructure.filter_fifo_number CAN_FIFO0;CAN_FilterInitStructure.filter_enable ENABLE;can_filter_init(CAN_FilterInitStructure);/* initialize filter */id 0x18ffffff;//需过滤的EXT_ID/* CAN0 filter number */CAN_FilterInitStructure.filter_number 15;/* initialize filter */CAN_FilterInitStructure.filter_mode CAN_FILTERMODE_MASK;CAN_FilterInitStructure.filter_bits CAN_FILTERBITS_32BIT;CAN_FilterInitStructure.filter_list_high (((u32)id 3)0xFFFF0000)16;;CAN_FilterInitStructure.filter_list_low (((u32)id 3)|CAN_FF_STANDARD|CAN_FF_EXTENDED)0xFFFF;;CAN_FilterInitStructure.filter_mask_high 0x0000;CAN_FilterInitStructure.filter_mask_low 0x0000;CAN_FilterInitStructure.filter_fifo_number CAN_FIFO0;CAN_FilterInitStructure.filter_enable ENABLE;can_filter_init(CAN_FilterInitStructure);can_interrupt_enable(CAN0, CAN_INT_RFNE0);can_interrupt_enable(CAN1, CAN_INT_RFNE0);
}
/*CAN0接收中断*/
void CAN0_RX0_IRQHandler(void)
{Init_RxMes(RxMessage);can_message_receive(CAN0, CAN_FIFO0, RxMessage);CAN0_RXData();
}
/*CAN1接收中断*/
void CAN1_RX0_IRQHandler(void)
{Init_RxMes(RxMessage);can_message_receive(CAN1, CAN_FIFO0, RxMessage);CAN1_RXData();
}485设计 485硬件设计采用了自动收发报文的设计。具体实现方案可以自行百度搜索。 硬件设计 软件设计 软件就是一般的串口初始化。 /*IO口初始化*/
void usart_init(void)
{rcu_periph_clock_enable(RCU_GPIOA);rcu_periph_clock_enable(RCU_AF);rcu_periph_clock_enable(RCU_USART0);gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_10);usart_deinit(USART0);usart_baudrate_set(USART0, 9600);usart_word_length_set(USART0, USART_WL_8BIT);usart_stop_bit_set(USART0, USART_STB_1BIT);usart_parity_config(USART0, USART_PM_NONE);usart_hardware_flow_rts_config(USART0, USART_RTS_DISABLE);usart_hardware_flow_cts_config(USART0, USART_CTS_DISABLE);usart_receive_config(USART0, USART_RECEIVE_ENABLE);usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);usart_enable(USART0);usart_interrupt_enable(USART0, USART_INT_RBNE);nvic_irq_enable(USART0_IRQn,1,2);
}/* retarget the C library printf function to the usart */
int fputc(int ch, FILE *f)
{usart_data_transmit(USART0, (uint8_t) ch);while (RESET usart_flag_get(USART0, USART_FLAG_TBE));return ch;
}
/*串口0接收中断*/
void USART0_IRQHandler(void)
{uint16_t data;if(RESET ! usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE)){/* receive data */data usart_data_receive(USART0);usart_data_receive(USART0);}
}其他设计
LED硬件 硬件LED采用的是共阴极IO口驱动的话输出高电平LED点亮。 按键硬件 硬件按键采用的是监测地。配置IO口时要配置为上拉输入。当IO口监测到低电平时表示按键按下。 PCB板子和实物图 开发板测试视频 板子焊接好后按照如图所示插上相应的跳线帽通过5VType-C口给模块供电。测试代码固件烧录进去之后三个LED点亮其中一个LED0.5HZ频率闪烁。按下按键后相应的LED灯切换状态。串口波特率为9600并且每1秒输出Shiboven PCB-018 测试固件 V1.0 CAN测试请使用5VUSB供电。两路CAN波特率都为250k。两路CAN都是250K波特率并每1秒输出一路为ID0x12345678另一路为0x17654321。 注意CANH、CANL别接反了。485A、485B也别接反了 双CAN一路485演示视频演示视频 其他资料 资料包中有硬件软件源码及其他资料。包括一堆CAN资料包。