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

 
 
> stm32f107vct непонятки с CAN, в loopback CAN1 работает а CAN2 нет
klen
сообщение Feb 5 2010, 23:43
Сообщение #1


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Сабж в заголовке .
пробую запустить сразу два CAN
сначала решил по одиночке запустить в режиме loopback - генерацию прерываний. написано по образу примера из фирменной библиотеки.

функции инициализации и отправки пакета идентичны , принимают параметр CAN1 или CAN2.

CAN2 не генерит прерываний и не принимает пакет. передачик говорит что все передано CAN_TransmitStatus(CANx, TransmitMailbox) возвращает CANTXOK. Приемник CAN2 тупо ниче нихочет делать sad.gif

че делать? после просмотра подиаганаоли даташита терзают смутные сомнения что CAN1 и CAN2 "две большие разницы" ....


вод код инициализации модулей, мутотень с GPIO вырезал

Код
void can_init(CAN_TypeDef* CANx)
  {
    // активация модуля CAN1
    //RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
    if (CANx==CAN1)
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1,ENABLE);
    else
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2,ENABLE);


    NVIC_InitTypeDef  NVIC_InitStructure;
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

    // установка канала CANx_RX0_IRQn контроллера прервыаний NVIC
    if (CANx==CAN1)
        NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn;
    else
        NVIC_InitStructure.NVIC_IRQChannel = CAN2_RX0_IRQn;

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

    // сброс регистров модуля CAN
    CAN_DeInit(CANx);

    CAN_InitTypeDef   CAN_InitStructure;
    CAN_StructInit(&CAN_InitStructure);
    // инициалищация модуля CAN
    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_Mode = CAN_Mode_Normal;
    CAN_InitStructure.CAN_Mode = CAN_Mode_LoopBack;
    CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
    CAN_InitStructure.CAN_BS1 = CAN_BS1_3tq;
    CAN_InitStructure.CAN_BS2 = CAN_BS2_5tq;
    CAN_InitStructure.CAN_Prescaler = 4;//2
    CAN_Init(CANx, &CAN_InitStructure);

    // инициализация фильтра CAN
    CAN_FilterInitTypeDef  CAN_FilterInitStructure;
    CAN_FilterInitStructure.CAN_FilterNumber=0;
    CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
    CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;
    CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;
    CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
    CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;
    CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
    CAN_FilterInitStructure.CAN_FilterFIFOAssignment=0;
    CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
    CAN_FilterInit(&CAN_FilterInitStructure);

    // разрешение прерыания по приему сообщения в FIFO #0 модуля CAN1
    CAN_ITConfig(CANx, CAN_IT_FMP0 , ENABLE);

  }
//---------------------------------------------------------------------------------------
uint32_t can_tx(CAN_TypeDef* CANx , uint8_t* data , uint32_t size)
{
   CanTxMsg TxMessage;
    uint8_t TransmitMailbox = 0;

    //подготовка пакета для передачи
    TxMessage.StdId = 0x321;
    TxMessage.ExtId = 0x01;
    TxMessage.RTR = CAN_RTR_DATA;
    TxMessage.IDE = CAN_ID_STD;
    TxMessage.DLC = 1;
    TxMessage.Data[0] = 0x55;

    // передача пакета
    TransmitMailbox=CAN_Transmit(CANx, &TxMessage);
    uint32_t i = 0xffff;  // таймер таймаута по завершении передачи
    while((CAN_TransmitStatus(CANx, TransmitMailbox) != CANTXOK) && i )
      {
        i--;
      }
     if ( !i ) return 0xFFFFFFFF;
     return size;
  }
//--------------------------------------------------------------------------
void CAN1_RX0_IRQHandler(void)
{
  while(1); // ловим прерывания под отладчиком
}
void CAN2_RX0_IRQHandler(void)
{
  while(1); // ловим прерывания под отладчиком
}



для теста вызываются
can_init(CAN1);
tmp = can_tx( CAN1 , NULL , 32) ;
программа зацикливается в обработчике прерывания CAN1_RX0_IRQHandler

can_init(CAN2);
tmp = can_tx( CAN2 , NULL , 32) ;
программа не циклится sad.gif

чек делать кроме чтения даташита который уже читаю?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ROOS81
сообщение Jul 12 2013, 06:58
Сообщение #2





Группа: Новичок
Сообщений: 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

Сообщений в этой теме
- klen   stm32f107vct непонятки с CAN   Feb 5 2010, 23:43
- - klen   так я и не смог разобратся в чем дело. второй CAN ...   Feb 25 2010, 18:35
|- - AlexandrY   Зачем вам эти либы от ST? Ведь видно, что ламерами...   Feb 25 2010, 19:12
|- - AHTOXA   Цитата(klen @ Feb 25 2010, 23:35) просба ...   Feb 25 2010, 20:40
|- - klen   2_AHTOXA мдя... очень интересный подход - продать...   Feb 25 2010, 20:59
- - SasaVitebsk   Ббббб. А я уже заложил f105 для использования двух...   Feb 26 2010, 08:04
|- - klen   Цитата(SasaVitebsk @ Feb 26 2010, 11:04) ...   Feb 26 2010, 08:49
|- - AlexandrY   Вы как будто не в Keil-е работаете. Пару минут в с...   Feb 26 2010, 20:18
- - cebotor   в 105 два CAN-а отлично работают.. Какая крышка г...   Feb 28 2010, 13:04
|- - klen   Цитата(cebotor @ Feb 28 2010, 16:04) в 10...   Feb 28 2010, 23:33
|- - cebotor   Цитата(klen @ Mar 1 2010, 02:33) а не под...   Mar 1 2010, 12:21
|- - klen   Цитата(cebotor @ Mar 1 2010, 15:21) я не ...   Mar 1 2010, 13:14
|- - igler_u   Цитата(klen @ Mar 1 2010, 18:14) дело был...   Feb 1 2013, 09:27
|- - igler_u   Цитата(igler_u @ Feb 1 2013, 14:27) Приде...   Feb 3 2013, 09:06
|- - AlexanderB   Цитата(igler_u @ Feb 3 2013, 13:06) зараб...   Jul 3 2013, 09:06
|- - AlexanderB   Цитата(AlexanderB @ Jul 3 2013, 13:06) Та...   Jul 3 2013, 10:24
- - Pavlike   Добрый всем вечер! Я пробую запустить CAN на ...   Aug 5 2011, 15:39
|- - Pavlike   Цитата(Pavlike @ Aug 5 2011, 14:39) Добры...   Aug 6 2011, 09:45


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

 


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


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