123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- #include "can.h"
- #include "fly_param.h"
- #include <string.h>
- CanRxMsg can1_recv_msg;
- CanRxMsg can2_recv_msg;
- CanData_TypeDef CanDataCan1;
- CanData_TypeDef CanDataCan2;
- void can_network_init(void)
- {
- CAN_InitTypeDef can_parameter;
- CAN_FilterInitTypeDef can_filter;
- CAN_StructInit(&can_parameter);
- CAN_FilterInit(&can_filter);
-
- CAN_DeInit(CAN1);
- CAN_DeInit(CAN2);
-
- can_parameter.CAN_TTCM = DISABLE;
- can_parameter.CAN_ABOM = DISABLE;
- can_parameter.CAN_AWUM = DISABLE;
- can_parameter.CAN_NART = DISABLE;
- can_parameter.CAN_RFLM = DISABLE;
- can_parameter.CAN_TXFP = DISABLE;
- can_parameter.CAN_Mode = CAN_Mode_Normal;
- can_parameter.CAN_SJW = CAN_SJW_1tq;
- can_parameter.CAN_BS1 = CAN_BS1_10tq;
- can_parameter.CAN_BS2 = CAN_BS2_3tq;
-
- #if CAN_BAUDRATE == 1000
- can_parameter.prescaler = 5;
-
- #elif CAN_BAUDRATE == 500
- can_parameter.prescaler = 10;
-
- #elif CAN_BAUDRATE == 250
- can_parameter.CAN_Prescaler = 12;
-
- #elif CAN_BAUDRATE == 125
- can_parameter.prescaler = 40;
-
- #elif CAN_BAUDRATE == 100
- can_parameter.prescaler = 50;
-
- #elif CAN_BAUDRATE == 50
- can_parameter.prescaler = 100;
-
- #elif CAN_BAUDRATE == 20
- can_parameter.prescaler = 250;
- #else
- #error "please select list can baudrate in private defines in main.c "
- #endif
-
- CAN_Init(CAN1, &can_parameter);
- CAN_Init(CAN2, &can_parameter);
-
- can_filter.CAN_FilterNumber = 0;
- can_filter.CAN_FilterMode = CAN_FilterMode_IdMask;
- can_filter.CAN_FilterScale = CAN_FilterScale_32bit;
- can_filter.CAN_FilterIdHigh = 0x0000;
- can_filter.CAN_FilterIdLow = 0x0000;
- can_filter.CAN_FilterMaskIdHigh = 0x0000;
- can_filter.CAN_FilterMaskIdLow = 0x0000;
- can_filter.CAN_FilterFIFOAssignment = CAN_FIFO0;
- can_filter.CAN_FilterActivation = ENABLE;
- CAN_FilterInit(&can_filter);
-
- can_filter.CAN_FilterNumber = 15;
- can_filter.CAN_FilterMode = CAN_FilterMode_IdMask;
- can_filter.CAN_FilterScale = CAN_FilterScale_32bit;
- can_filter.CAN_FilterIdHigh = 0x0000;
- can_filter.CAN_FilterIdLow = 0x0000;
- can_filter.CAN_FilterMaskIdHigh = 0x0000;
- can_filter.CAN_FilterMaskIdLow = 0x0000;
- can_filter.CAN_FilterFIFOAssignment = CAN_FIFO0;
- can_filter.CAN_FilterActivation = ENABLE;
- CAN_FilterInit(&can_filter);
- can_nvic_config();
-
- CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);
-
- CAN_ITConfig(CAN2, CAN_IT_FMP0, ENABLE);
- }
- void can_nvic_config(void)
- {
-
- NVIC_InitTypeDef NVIC_InitStructure;
- NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
-
- NVIC_InitStructure.NVIC_IRQChannel = CAN2_RX0_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
- NVIC_Init(&NVIC_InitStructure);
- }
- void CAN1_RX0_IRQHandler(void)
- {
-
- CAN_Receive(CAN1, CAN_FIFO0, &can1_recv_msg);
- if ((can1_recv_msg.IDE == CAN_Id_Extended) && (CAN_MSG_LEN == can1_recv_msg.DLC))
- {
- memcpy(CanDataCan1.buf, can1_recv_msg.Data, CAN_MSG_LEN);
- CanDataCan1.can_id = can1_recv_msg.ExtId;
- InsertQueue(&CanQueueCan1, CanDataCan1);
- }
- OSSemPost(can1_sem);
- }
- void CAN2_RX0_IRQHandler(void)
- {
-
- CAN_Receive(CAN1, CAN_FIFO0, &can2_recv_msg);
- if (CAN_MSG_LEN == can2_recv_msg.DLC)
- {
- memcpy(CanDataCan2.buf, can2_recv_msg.Data, CAN_MSG_LEN);
- if (can2_recv_msg.IDE == CAN_Id_Extended)
- {
- CanDataCan2.can_id = can2_recv_msg.ExtId;
- }
- else
- {
- CanDataCan2.can_id = can2_recv_msg.StdId;
- }
- InsertQueue(&CanQueueCan2, CanDataCan2);
- }
- OSSemPost(can2_sem);
- }
|