Added CAN
This commit is contained in:
parent
526b689693
commit
fc1f245eb2
13 changed files with 489 additions and 183 deletions
104
App/CAN_API.c
Normal file
104
App/CAN_API.c
Normal file
|
@ -0,0 +1,104 @@
|
|||
/*
|
||||
* CanCallBacks.c
|
||||
*
|
||||
* Created on: 23 авг. 2023 г.
|
||||
* Author: on4ip
|
||||
*/
|
||||
#include "CAN_API.h"
|
||||
|
||||
void initCAN(enum CAN_API_BAUD baud) {
|
||||
|
||||
|
||||
CAN_FilterTypeDef sFilterConfig;
|
||||
hcan2.Instance = CAN2;
|
||||
hcan2.Init.Prescaler = 5;
|
||||
hcan2.Init.Mode = CAN_MODE_NORMAL;
|
||||
hcan2.Init.SyncJumpWidth = CAN_SJW_1TQ;
|
||||
hcan2.Init.TimeSeg1 = CAN_BS1_1TQ;
|
||||
hcan2.Init.TimeSeg2 = CAN_BS2_7TQ;
|
||||
hcan2.Init.TimeTriggeredMode = DISABLE;
|
||||
hcan2.Init.AutoBusOff = DISABLE;
|
||||
hcan2.Init.AutoWakeUp = DISABLE;
|
||||
hcan2.Init.AutoRetransmission = DISABLE;
|
||||
hcan2.Init.ReceiveFifoLocked = DISABLE;
|
||||
hcan2.Init.TransmitFifoPriority = DISABLE;
|
||||
|
||||
switch(baud)
|
||||
{
|
||||
case CAN_BAUD_125:
|
||||
hcan2.Init.Prescaler = 20;
|
||||
hcan2.Init.TimeSeg1 = CAN_BS1_15TQ;
|
||||
hcan2.Init.TimeSeg2 = CAN_BS2_2TQ;
|
||||
break;
|
||||
case CAN_BAUD_250:
|
||||
hcan2.Init.Prescaler = 10;
|
||||
hcan2.Init.TimeSeg1 = CAN_BS1_15TQ;
|
||||
hcan2.Init.TimeSeg2 = CAN_BS2_2TQ;
|
||||
break;
|
||||
case CAN_BAUD_500:
|
||||
hcan2.Init.Prescaler = 10;
|
||||
hcan2.Init.TimeSeg1 = CAN_BS1_1TQ;
|
||||
hcan2.Init.TimeSeg2 = CAN_BS2_7TQ;
|
||||
break;
|
||||
case CAN_BAUD_1000:
|
||||
hcan2.Init.Prescaler = 5;
|
||||
hcan2.Init.TimeSeg1 = CAN_BS1_1TQ;
|
||||
hcan2.Init.TimeSeg2 = CAN_BS2_7TQ;
|
||||
break;
|
||||
default:
|
||||
hcan2.Init.Prescaler = 5;
|
||||
hcan2.Init.TimeSeg1 = CAN_BS1_1TQ;
|
||||
hcan2.Init.TimeSeg2 = CAN_BS2_7TQ;
|
||||
break;
|
||||
}
|
||||
|
||||
if (HAL_CAN_Init(&hcan2) != HAL_OK) {
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
sFilterConfig.FilterBank = 0;
|
||||
sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
|
||||
sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
|
||||
sFilterConfig.FilterIdHigh = 0x0000;
|
||||
sFilterConfig.FilterIdLow = 0x0000;
|
||||
sFilterConfig.FilterMaskIdHigh = 0x0000;
|
||||
sFilterConfig.FilterMaskIdLow = 0x0000;
|
||||
sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0;
|
||||
sFilterConfig.FilterActivation = ENABLE;
|
||||
sFilterConfig.SlaveStartFilterBank = 14;
|
||||
if (HAL_CAN_ConfigFilter(&hcan2, &sFilterConfig) != HAL_OK) {
|
||||
/* Filter configuration Error */
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
HAL_CAN_Start(&hcan2);
|
||||
|
||||
/*##-4- Activate CAN RX notification #######################################*/
|
||||
if (HAL_CAN_ActivateNotification(&hcan2, CAN_IT_RX_FIFO0_MSG_PENDING)
|
||||
!= HAL_OK) {
|
||||
/* Notification Error */
|
||||
Error_Handler();
|
||||
}
|
||||
}
|
||||
CAN_RxHeaderTypeDef RxHeader1;
|
||||
uint8_t RxData1[8];
|
||||
void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan) {
|
||||
/* Get RX message */
|
||||
if (HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO1, &RxHeader1, RxData1) != HAL_OK)
|
||||
{
|
||||
/* Reception Error */
|
||||
Error_Handler();
|
||||
}
|
||||
|
||||
}
|
||||
CAN_RxHeaderTypeDef RxHeader0;
|
||||
uint8_t RxData0[8];
|
||||
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
|
||||
{
|
||||
/* Get RX message */
|
||||
if (HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &RxHeader0, RxData0) != HAL_OK)
|
||||
{
|
||||
/* Reception Error */
|
||||
Error_Handler();
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue