打印

有用STM32F7做CAN的不

[复制链接]
3596|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hello110300509|  楼主 | 2016-6-7 11:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为啥我只发送一次,却一再进入错误中断里面呢
#include "stm32f7xx.h"
#include "Drv_Can.h"
#include "stdlib.h"

#define CAN1_CLK_ENABLE()           __HAL_RCC_CAN1_CLK_ENABLE()
#define CAN1_GPIOB_CLK_ENABLE()      __HAL_RCC_GPIOB_CLK_ENABLE()

#define CAN1_TX_PORT GPIOB
#define CAN1_RX_PORT GPIOB
#define CAN1_TX_PIN GPIO_PIN_9
#define CAN1_RX_PIN GPIO_PIN_8

extern UART_HandleTypeDef UartHandle;

void HAL_CAN_TxCpltCallback(CAN_HandleTypeDef* hcan)
{
        HAL_UART_Transmit_IT(&UartHandle, "2\r\n", 3);
}

void CAN1_TX_IRQHandler(void)
{
        CAN_HandleTypeDef hcan;
        /* enter interrupt */

        HAL_CAN_IRQHandler(&hcan);

    /* leave interrupt */

}

void HAL_CAN_RxCpltCallback(CAN_HandleTypeDef* hcan)
{
        HAL_UART_Transmit_IT(&UartHandle, "1\r\n", 3);
}

void CAN1_RX0_IRQHandler(void)
{
       
        CAN_HandleTypeDef hcan;
        /* enter interrupt */

        HAL_CAN_IRQHandler(&hcan);

    /* leave interrupt */

}

void CAN1_RX1_IRQHandler(void)
{
       
        CAN_HandleTypeDef hcan;
        /* enter interrupt */

        HAL_CAN_IRQHandler(&hcan);

        /* leave interrupt */

}

void HAL_CAN_ErrorCallback(CAN_HandleTypeDef *hcan)
{
        if((hcan->ErrorCode & HAL_CAN_ERROR_EWG) == HAL_CAN_ERROR_EWG)
                HAL_UART_Transmit_IT(&UartHandle, "3\r\n", 3);
        if ((hcan->ErrorCode & HAL_CAN_ERROR_EPV) == HAL_CAN_ERROR_EPV)
                HAL_UART_Transmit_IT(&UartHandle, "4\r\n", 3);
        if ((hcan->ErrorCode & HAL_CAN_ERROR_BOF) == HAL_CAN_ERROR_BOF)
                HAL_UART_Transmit_IT(&UartHandle, "5\r\n", 3);
        if ((hcan->ErrorCode & HAL_CAN_ERROR_STF) == HAL_CAN_ERROR_STF)
                HAL_UART_Transmit_IT(&UartHandle, "6\r\n", 3);
        if ((hcan->ErrorCode & HAL_CAN_ERROR_FOR) == HAL_CAN_ERROR_FOR)
                HAL_UART_Transmit_IT(&UartHandle, "7\r\n", 3);
        if ((hcan->ErrorCode & HAL_CAN_ERROR_ACK) == HAL_CAN_ERROR_ACK)
                HAL_UART_Transmit_IT(&UartHandle, "8\r\n", 3);
        if ((hcan->ErrorCode & HAL_CAN_ERROR_BR) == HAL_CAN_ERROR_BR)
                HAL_UART_Transmit_IT(&UartHandle, "9\r\n",3);
        if ((hcan->ErrorCode & HAL_CAN_ERROR_BD) == HAL_CAN_ERROR_BD)
                HAL_UART_Transmit_IT(&UartHandle, "10\r\n", 4);
        if ((hcan->ErrorCode & HAL_CAN_ERROR_CRC) == HAL_CAN_ERROR_CRC)
                HAL_UART_Transmit_IT(&UartHandle, "11\r\n", 3);
       
        HAL_NVIC_DisableIRQ(CAN1_SCE_IRQn);
}

void CAN1_SCE_IRQHandler(void)
{
        CAN_HandleTypeDef hcan;

        /* enter interrupt */

        HAL_CAN_IRQHandler(&hcan);

        /* leave interrupt */

}


void CANtx(void)
{
        CAN_HandleTypeDef hcan;
        char i;
        static CanTxMsgTypeDef        TxMessage;
  static CanRxMsgTypeDef        RxMessage;

        hcan.Instance  = CAN1;
        hcan.pTxMsg = &TxMessage;
        hcan.pRxMsg = &RxMessage;
        if((hcan.pTxMsg != NULL) && (hcan.pRxMsg != NULL))
        {
                HAL_UART_Transmit_IT(&UartHandle, "malloc\r\n", 8);

                hcan.pTxMsg->ExtId =  0x1234;
                //hcan.pTxMsg->StdId = 0x11;
                hcan.pTxMsg->IDE = CAN_ID_EXT;
                hcan.pTxMsg->RTR = CAN_RTR_DATA;
                hcan.pTxMsg->DLC = 2;
               
                for(i=0;i<hcan.pTxMsg->DLC;i++)
                {
                        hcan.pTxMsg->Data[i] = 0x55;
                }
                if (HAL_CAN_Transmit_IT(&hcan) == HAL_OK)
                {
                        //rt_kprintf("CAN tx success!\r\n");
                        HAL_UART_Transmit_IT(&UartHandle, "ITsuc\r\n", 7);

                }
                else
                {
                        HAL_UART_Transmit_IT(&UartHandle, "ITfail\r\n", 8);
                }
        }
}



void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan)
{
  GPIO_InitTypeDef  GPIO_InitStruct;
       
        CAN1_CLK_ENABLE();
        CAN1_GPIOB_CLK_ENABLE();

        GPIO_InitStruct.Alternate = GPIO_AF9_CAN1;
        GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStruct.Pin = CAN1_TX_PIN;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
        GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
        HAL_GPIO_Init(CAN1_TX_PORT, &GPIO_InitStruct);       
       
        GPIO_InitStruct.Pin = CAN1_RX_PIN;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
        HAL_GPIO_Init(CAN1_RX_PORT, &GPIO_InitStruct);       
       
        HAL_NVIC_SetPriority(CAN1_TX_IRQn,5,0);
        HAL_NVIC_EnableIRQ(CAN1_TX_IRQn);
       
        HAL_NVIC_SetPriority(CAN1_RX0_IRQn,5,0);
        HAL_NVIC_EnableIRQ(CAN1_RX0_IRQn);

        HAL_NVIC_SetPriority(CAN1_RX1_IRQn,5,0);
        HAL_NVIC_EnableIRQ(CAN1_RX1_IRQn);

        HAL_NVIC_SetPriority(CAN1_SCE_IRQn,5,0);
        HAL_NVIC_EnableIRQ(CAN1_SCE_IRQn);
}


int Can_hw_init(void)
{
        CAN_HandleTypeDef hcan;
        hcan.Instance = CAN1;
        if(HAL_CAN_DeInit(&hcan)!= HAL_OK)
        {
                return 0;
        }
        hcan.Init.ABOM = DISABLE;
        hcan.Init.AWUM = DISABLE;
        hcan.Init.BS1 = CAN_BS1_13TQ;
        hcan.Init.BS2 = CAN_BS2_2TQ;
        hcan.Init.Mode = CAN_MODE_LOOPBACK;
        hcan.Init.NART = DISABLE;
        hcan.Init.Prescaler = 12;
        hcan.Init.RFLM = ENABLE;
        hcan.Init.SJW = CAN_SJW_2TQ;
        hcan.Init.TTCM = DISABLE;
        hcan.Init.TXFP = DISABLE;
       
        if(HAL_CAN_Init(&hcan)!= HAL_OK)
        {
                return 0;
        }       
       
        CAN_FilterConfTypeDef sFilterConfig;
        sFilterConfig.BankNumber = 14;
        sFilterConfig.FilterActivation = ENABLE;
        sFilterConfig.FilterFIFOAssignment = CAN_FILTER_FIFO0;
        sFilterConfig.FilterIdHigh = 0x0000;
        sFilterConfig.FilterIdLow = 0x0000;
        sFilterConfig.FilterMaskIdHigh = 0x0000;
        sFilterConfig.FilterMaskIdLow = 0x0000;
        sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
        sFilterConfig.FilterNumber = 0;
        sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
        HAL_CAN_ConfigFilter(&hcan,&sFilterConfig);

       
}



相关帖子

沙发
snowmay118| | 2016-6-7 18:21 | 只看该作者
路过看看,不能解答

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

2

帖子

0

粉丝