реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> stm32f107vct непонятки с CAN, в loopback CAN1 работает а CAN2 нет
igler_u
сообщение Feb 3 2013, 09:06
Сообщение #16





Группа: Новичок
Сообщений: 3
Регистрация: 24-07-12
Пользователь №: 72 885



Цитата(igler_u @ Feb 1 2013, 14:27) *
Придется дальше время поубивать на поиски решения.

заработало и у меня
Изначальная проблема была - запустить 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.
Go to the top of the page
 
+Quote Post
AlexanderB
сообщение Jul 3 2013, 09:06
Сообщение #17





Группа: Новичок
Сообщений: 2
Регистрация: 3-07-13
Пользователь №: 77 367



Цитата(igler_u @ Feb 3 2013, 13:06) *
заработало и у меня
Изначальная проблема была - запустить 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.


Таже проблемаsad.gif

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

Вы можете привести листинг где вы сконфигурировали фильтры?
Go to the top of the page
 
+Quote Post
AlexanderB
сообщение Jul 3 2013, 10:24
Сообщение #18





Группа: Новичок
Сообщений: 2
Регистрация: 3-07-13
Пользователь №: 77 367



Цитата(AlexanderB @ Jul 3 2013, 13:06) *
Таже проблемаsad.gif

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

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


Все заработало!!!!!!!!!!!! Всем спасибо. Был прецеплен startup_HD вместо нужного startup_CL
Go to the top of the page
 
+Quote Post
ROOS81
сообщение Jul 12 2013, 06:58
Сообщение #19





Группа: Новичок
Сообщений: 1
Регистрация: 12-07-13
Пользователь №: 77 498



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


CODE
#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 - Jul 12 2013, 13:02
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 4th July 2025 - 16:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.01412 секунд с 7
ELECTRONIX ©2004-2016