Перейти к содержанию
    

Не откликается CAN stm32f103

Пробую простенький тестовый проект с CAN. Но я или что то упустил или что то не разрешил. На ножках нет передачи . На прием тоже нет прерывания.  

Может свежим глазом что- то бросится.

 

#include "state.h"
#include "can_my.h"
#include "stm32f1xx_hal_cortex.h"

CAN_HandleTypeDef hcan;

/* USER CODE BEGIN PV */
CAN_FilterTypeDef canFilterConfig;/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_CAN_Init(void);

int main(void)
{
  
  HAL_Init();

 
  SystemClock_Config();


  MX_GPIO_Init();
  MX_CAN_Init();
  /* USER CODE BEGIN 2 */
  HAL_CAN_Start(&hcan);
	HAL_CAN_ActivateNotification(&hcan, CAN_IT_RX_FIFO0_MSG_PENDING);

  while (1)
  {
   
     if(flag_1s==1){
		                 flag_1s=0;
		 
			 if (HAL_CAN_GetTxMailboxesFreeLevel(&hcan) != 0)
                                                             {

                                                                 msgTxHeader.StdId = 0x200;
                                                                 msgTxHeader.DLC = 8;
                                                                 msgTxHeader.TransmitGlobalTime = DISABLE;
                                                                 msgTxHeader.RTR = CAN_RTR_DATA;// ïåðåäàåì ñàìè íå çàïðîñ ïàðàìåòðà
                                                                 msgTxHeader.IDE = CAN_ID_STD;
                                                                 uint32_t mailBoxNum = 0;
  
                                                                 for (uint8_t i = 0; i < 8; i++)
                                                                                                 {
                                                                                                  msgTxData[i] = i;
                                                                                    }
               
                                                               HAL_CAN_AddTxMessage(&hcan, &msgTxHeader, msgTxData, &mailBoxNum);
                                                              }
		 
		                 }//flag 1 s
   
                  }//while
 
}//main
                                                                                           
                                                                                           
static void MX_CAN_Init(void)
{

 
canFilterConfig.FilterBank = 0;
canFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
canFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;

canFilterConfig.FilterIdHigh = 0x0000;//ñòàðøàÿ ÷àñòü ID
canFilterConfig.FilterIdLow = 0x0000;// ìëàäøàÿ ÷àñòü ID

canFilterConfig.FilterMaskIdHigh = 0x0000;//  ñòàðøàÿ ÷àñòü ìàñêè
canFilterConfig.FilterMaskIdLow = 0x0000;//  ìëàäíàÿ ÷àñòü ìàñêè

canFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0;
canFilterConfig.FilterActivation = ENABLE;
canFilterConfig.SlaveStartFilterBank = 14;
HAL_CAN_ConfigFilter(&hcan, &canFilterConfig);

  hcan.Instance = CAN1;
  hcan.Init.Prescaler = 16;
  hcan.Init.Mode = CAN_MODE_NORMAL;
  hcan.Init.SyncJumpWidth = CAN_SJW_1TQ;
  hcan.Init.TimeSeg1 = CAN_BS1_13TQ;
  hcan.Init.TimeSeg2 = CAN_BS2_2TQ;
  hcan.Init.TimeTriggeredMode = DISABLE;
  hcan.Init.AutoBusOff = DISABLE;
  hcan.Init.AutoWakeUp = ENABLE ;
  hcan.Init.AutoRetransmission = DISABLE;
  hcan.Init.ReceiveFifoLocked = DISABLE;
  hcan.Init.TransmitFifoPriority = DISABLE;
  if (HAL_CAN_Init(&hcan) != HAL_OK)
  {
    Error_Handler();
  }
 

}      
                                                                                           
void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};
  if(hcan->Instance==CAN1)
  {
 
    __HAL_RCC_CAN1_CLK_ENABLE();

    __HAL_RCC_GPIOA_CLK_ENABLE();
    /**CAN GPIO Configuration
    PA11     ------> CAN_RX
    PA12     ------> CAN_TX
    */
    GPIO_InitStruct.Pin = GPIO_PIN_11;
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    GPIO_InitStruct.Pull = GPIO_PULLUP ;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    GPIO_InitStruct.Pin = GPIO_PIN_12;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    /* CAN1 interrupt Init */
    HAL_NVIC_SetPriority(USB_HP_CAN1_TX_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(USB_HP_CAN1_TX_IRQn);
    HAL_NVIC_SetPriority(USB_LP_CAN1_RX0_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(USB_LP_CAN1_RX0_IRQn);
  
  }

}
                                                                   
 
                                                                   
void USB_LP_CAN1_RX0_IRQHandler(void)
{
 
  HAL_CAN_IRQHandler(&hcan);
 
}
                                                                                           
    
                                                                   
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
{

  
  HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &msgRxHeader, msgRxData);
    
  if (msgRxHeader.IDE == CAN_ID_EXT)
  {
    msgId = msgRxHeader.ExtId;
  }
  else
  {
    msgId = msgRxHeader.StdId;
  } 
}                                                                   

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

40 минут назад, firstvald сказал:

Но я или что то упустил или что то не разрешил.

Может USB одновременно подключен?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Специально я не разрешал,  но просмотрю в эту сторону. Я думал сначала, что в голубую таблетку can не доложили ,  попробовал с nucleo / а то же самое.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, firstvald сказал:

Специально я не разрешал

У нас такой прикол был, на входе VUSB забыли подтяжку на землю включить, и проц думал что подключен к USB, CAN естественно отваливался.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...