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

stm32f107vct непонятки с CAN

Придется дальше время поубивать на поиски решения.

заработало и у меня

Изначальная проблема была - запустить CAN2 (на stm32f105rc/vc), который при настройках, аналогичных CAN1, работать отказывался...

При экспериментах выяснилось, что CAN2 работает только на отправку. Принять на него что-либо не получается, при этом передающая сторона докладывает, что всё отправлено, все OK.

Для решения проблемы необходимо произвести дополнительные настройки:

- первым делом при настройке второго CAN нужно затактировать CAN1!

- далее (как говорилось ранее/выше) нужно настроить фильтры под второй CAN: в структуре инициализации параметр CAN_FilterNumber для CAN2 должен иметь номер с 14 по 27.

альтернативно - использовать функцию CAN_SlaveStartBank(номер нужного фильтра), которая изменяет номер начального фильтр для CAN2.

 

Регистры фильтров у CAN1 и CAN2 общие, и настраиваются они в CAN1 (для этого он должен быть затактирован).

При этом в окне регистров CAN2 (в Keil) флаг FINIT - режим инициализации фильтров, в котором приём не активен! - будет находится в установленном состоянии (то есть что-то не то показыавется). Видимо, так как настройки фильтров общие, смотреть их для CAN2 нужно в настройках для CAN1.

 

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


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

заработало и у меня

Изначальная проблема была - запустить CAN2 (на stm32f105rc/vc), который при настройках, аналогичных CAN1, работать отказывался...

При экспериментах выяснилось, что CAN2 работает только на отправку. Принять на него что-либо не получается, при этом передающая сторона докладывает, что всё отправлено, все OK.

Для решения проблемы необходимо произвести дополнительные настройки:

- первым делом при настройке второго CAN нужно затактировать CAN1!

- далее (как говорилось ранее/выше) нужно настроить фильтры под второй CAN: в структуре инициализации параметр CAN_FilterNumber для CAN2 должен иметь номер с 14 по 27.

альтернативно - использовать функцию CAN_SlaveStartBank(номер нужного фильтра), которая изменяет номер начального фильтр для CAN2.

 

Регистры фильтров у CAN1 и CAN2 общие, и настраиваются они в CAN1 (для этого он должен быть затактирован).

При этом в окне регистров CAN2 (в Keil) флаг FINIT - режим инициализации фильтров, в котором приём не активен! - будет находится в установленном состоянии (то есть что-то не то показыавется). Видимо, так как настройки фильтров общие, смотреть их для CAN2 нужно в настройках для CAN1.

 

Таже проблема:(

 

Не могу настроить оба CANа. Камень STM32F105RC. Из CAN1 данные отправляются и даже поступают на вход CAN2 (В регистре CAN_RF0R значнеие FMP0 становится 0х01), но если пытаюсь послать это же сообщение еще раз, то программа зависает:((((((((((

 

Вы можете привести листинг где вы сконфигурировали фильтры?

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


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

Таже проблема:(

 

Не могу настроить оба CANа. Камень STM32F105RC. Из CAN1 данные отправляются и даже поступают на вход CAN2 (В регистре CAN_RF0R значнеие FMP0 становится 0х01), но если пытаюсь послать это же сообщение еще раз, то программа зависает:((((((((((

 

Вы можете привести листинг где вы сконфигурировали фильтры?

 

Все заработало!!!!!!!!!!!! Всем спасибо. Был прецеплен startup_HD вместо нужного startup_CL

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


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

Привет всем! Камень STM32F407 Пытаюсь настроить прием по CAN . Порты PD0 и PD1 (can1 RX , can1 TX) светодиод PB9 (плата от ТЕРРАЭЛЕКТРОНИКИ TE-stm32fx07) передачу настроил, работает нормально а вот прием никак... Может кто подскажет где собака порылась :smile3046:

 

 

#include "stm32f4xx.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_can.h"
#include "misc.h"
#include "system_stm32f4xx.h"

#define USE_CAN1
/* #define USE_CAN2 */

#ifdef  USE_CAN1
 #define CANx CAN1
#else /* USE_CAN1 */
 #define CANx CAN1
#endif  /* USE_CAN1*/

 void NVIC_Config();
 void Rxmsg ();

 void main()
		 {
SystemInit();
CAN_InitTypeDef CAN_InitStructure;
CAN_FilterInitTypeDef  CAN_FilterInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;

// Enable GPIO clock
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
// Configure CAN1 as alternate function
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_Init(GPIOD, &GPIO_InitStructure);



GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);

// Connect PXx to CAN 1  2

GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_CAN1); //CAN_RX = PD0
GPIO_PinAFConfig(GPIOD, GPIO_PinSource1, GPIO_AF_CAN1); //CAN_TX = PD1


// init CAN1
RCC_APB1PeriphClockCmd (RCC_APB1Periph_CAN1, ENABLE);

CAN_InitStructure.CAN_TTCM = DISABLE;
CAN_InitStructure.CAN_ABOM = DISABLE;
CAN_InitStructure.CAN_AWUM = DISABLE;
CAN_InitStructure.CAN_NART = DISABLE;
CAN_InitStructure.CAN_RFLM = DISABLE;
CAN_InitStructure.CAN_TXFP = DISABLE;

CAN_InitStructure.CAN_Prescaler = 16;// 125kbs
CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;//LoopBack
CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
CAN_InitStructure.CAN_BS1 = CAN_BS1_14tq;
CAN_InitStructure.CAN_BS2 = CAN_BS2_6tq;

CAN_DeInit(CAN1);
CAN_Init(CAN1, &CAN_InitStructure);

// IT Configuration for CAN1 FIFO 0 message received interrupt
	 	CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);
	 	// IT Configuration for CAN1 FIFO 1 message received interrupt
	 	CAN_ITConfig(CAN1, CAN_IT_FMP1, ENABLE);

  /* CAN filter init */
#ifdef  USE_CAN1
  CAN_FilterInitStructure.CAN_FilterNumber = 0;
#else /* USE_CAN1 */
  CAN_FilterInitStructure.CAN_FilterNumber = 0;
#endif  /* USE_CAN1 */
  CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
  CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
  CAN_FilterInitStructure.CAN_FilterIdHigh = 0xFFFF;
  CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000;
  CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFFF;
  CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000;
  CAN_FilterInitStructure.CAN_FilterFIFOAssignment =CAN_FIFO0;

  CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
  CAN_FilterInit(&CAN_FilterInitStructure);

uint8_t TransmitMailbox = 0;
CanTxMsg TxMessage;
CanRxMsg RxMessage;
uint32_t i = 0;


void NVIC_Config()
{
  NVIC_InitTypeDef NVIC_InitStructure;

  /* Enable CANx RX0 interrupt IRQ channel */
#ifdef  USE_CAN1
  NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn;
#else  /* USE_CAN1 */
  NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn;
#endif /* USE_CAN1 */

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}



  void Rxmsg()
  {
	RxMessage.StdId = 0x00;
	RxMessage.ExtId = 0x00;
	RxMessage.IDE = CAN_ID_STD;
	RxMessage.DLC = 0;
 	 RxMessage.FMI = 0;
 	 for (i = 0; i < 8; i++)
	  {
			RxMessage.Data[i] = 0;
	  }
 	CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);

  }


  while(1){
	   CSsendmsg (),Rxmsg();
	   if (RxMessage.Data[0]== 0x01) GPIOB->BSRRL = GPIO_Pin_9;
		int time = 3000000;
		while(time>1){time--;}
		time = 3000000;
		while(time>1){time--;}
		GPIOB->BSRRH = GPIO_Pin_9;



}}

Изменено пользователем IgorKossak
[codebox] для длинного кода, [code] - для короткого!!!

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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