You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
206 lines
5.6 KiB
206 lines
5.6 KiB
/*
|
|
*********************************************************************************************************
|
|
*
|
|
* 模块名称 : FDCAN驱动模块
|
|
* 文件名称 : bsp_can.c
|
|
* 版 本 : V1.0
|
|
* 说 明 : CAN驱动.
|
|
*
|
|
* 修改记录 :
|
|
* 版本号 日期 作者 说明
|
|
* V1.0 2018-11-14 armfly 正式发布
|
|
*
|
|
* Copyright (C), 2018-2030, 安富莱电子 www.armfly.com
|
|
*
|
|
*********************************************************************************************************
|
|
*/
|
|
|
|
#include "bsp_can.h"
|
|
#include "bsp_msg.h"
|
|
#include "fdcan.h"
|
|
|
|
/*
|
|
启用CAN1,需要将V7主板上的J12、J13两个跳线帽都插到1-2脚。(缺省是不插)
|
|
启用CNA2,硬件无需跳线,以太网功能需要屏蔽(有引脚复用)
|
|
*/
|
|
|
|
/* FDCAN1 GPIO定义 */
|
|
#define FDCAN1_TX_PIN GPIO_PIN_12
|
|
#define FDCAN1_TX_GPIO_PORT GPIOA
|
|
#define FDCAN1_TX_AF GPIO_AF9_FDCAN1
|
|
#define FDCAN1_TX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
|
|
|
|
#define FDCAN1_RX_PIN GPIO_PIN_11
|
|
#define FDCAN1_RX_GPIO_PORT GPIOA
|
|
#define FDCAN1_RX_AF GPIO_AF9_FDCAN1
|
|
#define FDCAN1_RX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
|
|
|
|
FDCAN_HandleTypeDef hfdcan1;
|
|
FDCAN_FilterTypeDef sFilterConfig1;
|
|
|
|
/* FDCAN1 GPIO定义 */
|
|
#define FDCAN2_TX_PIN GPIO_PIN_13
|
|
#define FDCAN2_TX_GPIO_PORT GPIOB
|
|
#define FDCAN2_TX_AF GPIO_AF9_FDCAN2
|
|
#define FDCAN2_TX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
|
|
|
|
#define FDCAN2_RX_PIN GPIO_PIN_12
|
|
#define FDCAN2_RX_GPIO_PORT GPIOB
|
|
#define FDCAN2_RX_AF GPIO_AF9_FDCAN2
|
|
#define FDCAN2_RX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()
|
|
|
|
FDCAN_FilterTypeDef sFilterConfig2;
|
|
|
|
FDCAN_RxHeaderTypeDef g_Can2RxHeader;
|
|
uint8_t g_Can2RxData[64];
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* 函 数 名: bsp_InitCan1
|
|
* 功能说明: 初始CAN1
|
|
* 形 参: 无
|
|
* 返 回 值: 无
|
|
*********************************************************************************************************
|
|
*/
|
|
void bsp_InitCan1(void)
|
|
{
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* 函 数 名: bsp_InitCan2
|
|
* 功能说明: 初始CAN2
|
|
* 形 参: 无
|
|
* 返 回 值: 无
|
|
*********************************************************************************************************
|
|
*/
|
|
void bsp_InitCan2(void)
|
|
{
|
|
MX_FDCAN2_Init();
|
|
}
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* 函 数 名: bsp_DeInitCan1
|
|
* 功能说明: 释放CAN1
|
|
* 形 参: 无
|
|
* 返 回 值: 无
|
|
*********************************************************************************************************
|
|
*/
|
|
void bsp_DeInitCan1(void)
|
|
{
|
|
HAL_FDCAN_MspDeInit(&hfdcan1);
|
|
}
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* 函 数 名: bsp_DeInitCan2
|
|
* 功能说明: 释放CAN2
|
|
* 形 参: 无
|
|
* 返 回 值: 无
|
|
*********************************************************************************************************
|
|
*/
|
|
void bsp_DeInitCan2(void)
|
|
{
|
|
HAL_FDCAN_MspDeInit(&hfdcan2);
|
|
}
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* 函 数 名: HAL_FDCAN_RxFifo0Callback
|
|
* 功能说明: CAN中断服务程序-回调函数
|
|
* 形 参: hfdcan
|
|
* 返 回 值: 无
|
|
*********************************************************************************************************
|
|
*/
|
|
void HAL_FDCAN_RxFifo0Callback(FDCAN_HandleTypeDef *hfdcan, uint32_t RxFifo0ITs)
|
|
{
|
|
if (hfdcan == &hfdcan2)
|
|
{
|
|
/* Retreive Rx messages from RX FIFO0 */
|
|
if(HAL_FDCAN_GetRxMessage(hfdcan, FDCAN_RX_FIFO0, &g_Can2RxHeader, g_Can2RxData)==HAL_OK)
|
|
{
|
|
/* Activate Rx FIFO 0 watermark notification */
|
|
HAL_FDCAN_ActivateNotification(hfdcan, FDCAN_IT_RX_FIFO0_WATERMARK, 0);
|
|
|
|
if(g_Can2RxHeader.Identifier == 0x110 && g_Can2RxHeader.IdType == FDCAN_STANDARD_ID)
|
|
{
|
|
if(g_Can2RxData[0]==0x55)
|
|
{
|
|
Update_EN = 1;
|
|
}
|
|
}
|
|
|
|
if (g_Can2RxHeader.Identifier == 0x222 && g_Can2RxHeader.IdType == FDCAN_STANDARD_ID)
|
|
{
|
|
bsp_PutMsg(MSG_CAN2_RX, 0); /* 发消息收到数据包,结果在g_Can1RxHeader, g_Can1RxData */
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* 函 数 名: can2_SendPacket
|
|
* 功能说明: 发送一包数据
|
|
* 形 参:_DataBuf 数据缓冲区
|
|
* _Len 数据长度, 0-8字节
|
|
* 返 回 值: 无
|
|
*********************************************************************************************************
|
|
*/
|
|
FDCAN_TxHeaderTypeDef TxHeader;
|
|
void can2_SendPacket(uint8_t *_DataBuf, uint8_t _Len)
|
|
{
|
|
if (_Len > 8)
|
|
{
|
|
return;
|
|
}
|
|
|
|
/* Prepare Tx Header */
|
|
TxHeader.Identifier = 0x1FF;
|
|
TxHeader.IdType = FDCAN_STANDARD_ID;
|
|
TxHeader.TxFrameType = FDCAN_DATA_FRAME;
|
|
TxHeader.DataLength = (uint32_t)_Len << 16;
|
|
TxHeader.ErrorStateIndicator = FDCAN_ESI_ACTIVE;
|
|
TxHeader.BitRateSwitch = FDCAN_BRS_OFF;
|
|
TxHeader.FDFormat = FDCAN_CLASSIC_CAN;
|
|
TxHeader.TxEventFifoControl = FDCAN_NO_TX_EVENTS;
|
|
TxHeader.MessageMarker = 0;
|
|
|
|
/* Add messages to TX FIFO */
|
|
HAL_FDCAN_AddMessageToTxFifoQ(&hfdcan2, &TxHeader, _DataBuf);
|
|
}
|
|
|
|
/*
|
|
*********************************************************************************************************
|
|
* 函 数 名: FDCAN1_IT0_IRQHandler
|
|
* 功能说明: CAN中断服务程序
|
|
* 形 参: hfdcan
|
|
* 返 回 值: 无
|
|
*********************************************************************************************************
|
|
*/
|
|
void FDCAN1_IT0_IRQHandler(void)
|
|
{
|
|
HAL_FDCAN_IRQHandler(&hfdcan1);
|
|
}
|
|
|
|
void FDCAN1_IT1_IRQHandler(void)
|
|
{
|
|
HAL_FDCAN_IRQHandler(&hfdcan1);
|
|
}
|
|
|
|
void FDCAN2_IT1_IRQHandler(void)
|
|
{
|
|
HAL_FDCAN_IRQHandler(&hfdcan2);
|
|
}
|
|
|
|
void FDCAN_CAL_IRQHandler(void)
|
|
{
|
|
HAL_FDCAN_IRQHandler(&hfdcan1);
|
|
|
|
HAL_FDCAN_IRQHandler(&hfdcan2); // ???
|
|
}
|
|
|
|
/***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/
|
|
|