// // Created by cfif on 17.03.2024. // #include "CanSerialPorts.h" #include "SerialPorts.h" tCanSerialPorts CAN_SERIAL_PORTS; void CanHWControlSet(void) { GPIO_InitType GPIO_InitStructure; GPIO_InitStruct(&GPIO_InitStructure); RCC_EnableAPB2PeriphClk( RCC_APB2_PERIPH_GPIOC | RCC_APB2_PERIPH_GPIOD, ENABLE); // STB GPIO_InitStructure.Pin = GPIO_PIN_2; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitPeripheral(GPIOC, &GPIO_InitStructure); GPIO_ResetBits(GPIOC, GPIO_PIN_2); // STB GPIO_InitStructure.Pin = GPIO_PIN_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitPeripheral(GPIOD, &GPIO_InitStructure); GPIO_ResetBits(GPIOD, GPIO_PIN_9); } void vCanSerialPorts_InitRCC() { RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_CAN1 | RCC_APB1_PERIPH_CAN2, ENABLE); } void USB_LP_CAN1_RX0_IRQHandler(void) { CanSerialPortIrqRxProcessing(&SERIAL_PORTS.SerialPortCan1); } void vCanSerialPort_InitCAN1(tCanSerialPortNation *env) { GPIO_InitType GPIO_InitStructure; GPIO_InitStruct(&GPIO_InitStructure); RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_AFIO | RCC_APB2_PERIPH_GPIOB, ENABLE); // Configure CAN1 RX pin GPIO_InitStructure.Pin = GPIO_PIN_8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitPeripheral(GPIOB, &GPIO_InitStructure); // Configure CAN1 TX pin GPIO_InitStructure.Pin = GPIO_PIN_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitPeripheral(GPIOB, &GPIO_InitStructure); GPIO_ConfigPinRemap(GPIO_RMP2_CAN1, ENABLE); vCanSerialPortInit( env, CAN1, CAN_BAUD_RATE_250K, 0xFF, CAN_STD_ID, 0x400, true, 0x400, 0x00, 512, 0 ); } void CAN2_RX0_IRQHandler(void) { CanSerialPortIrqRxProcessing(&SERIAL_PORTS.SerialPortCan2); } void vCanSerialPort_InitCAN2(tCanSerialPortNation *env) { GPIO_InitType GPIO_InitStructure; GPIO_InitStruct(&GPIO_InitStructure); RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_AFIO | RCC_APB2_PERIPH_GPIOD, ENABLE); GPIO_InitStructure.Pin = GPIO_PIN_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitPeripheral(GPIOD, &GPIO_InitStructure); GPIO_InitStructure.Pin = GPIO_PIN_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitPeripheral(GPIOD, &GPIO_InitStructure); GPIO_ConfigPinRemap(GPIO_RMP3_CAN2, ENABLE); vCanSerialPortInit( env, CAN2, CAN_BAUD_RATE_250K, 0xFF, CAN_STD_ID, 0x400, true, 0x400, 0x00, 512, 0 ); } void CanSerialPorts_Init() { tCanSerialPorts *env = &CAN_SERIAL_PORTS; vCanSerialPorts_InitRCC(); CanHWControlSet(); vCanSerialPort_InitCAN1(&env->can1); env->can1IO = CanPort_GetIo(&env->can1); vCanSerialPort_InitCAN2(&env->can2); env->can2IO = CanPort_GetIo(&env->can2); }