Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


Закрытая тема
Опции темы
Непрочитано 15.02.2014, 16:44   #21
Catethysis
Прохожий
 
Регистрация: 15.02.2014
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Catethysis на пути к лучшему
По умолчанию Re: Кто-нибудь запустил CAN на STM32 ???

Сообщение от k0der Посмотреть сообщение
может скинуть кто исходники полностью с инициализацией и отправкой?
Писал программу общения с автомобильным CAN - правда, на IARе. Вот код инициализации, отправки сообщения, и реакции на прерывание от приёма ответа). Возможно, здесь найдёте ещё полезную информацию: http://catethysis.ru/index.php/stm32...8%D0%BD%D0%B0/
Код инициализации мной тоже откуда-то взят, но всё работало успешно - принималось, отправлялось. Это был проект моста CAN‹-›USB.
Код:
#define CAN1_CLK                    RCC_APB1Periph_CAN1
#define CAN1_RX_PIN                 GPIO_Pin_0
#define CAN1_TX_PIN                 GPIO_Pin_1
#define CAN1_GPIO_PORT              GPIOD
#define CAN1_GPIO_CLK               RCC_AHB1Periph_GPIOD
#define CAN1_AF_PORT                GPIO_AF_CAN1
#define CAN1_RX_SOURCE              GPIO_PinSource0
#define CAN1_TX_SOURCE              GPIO_PinSource1

CAN_InitTypeDef        CAN_InitStructure;
CAN_FilterInitTypeDef  CAN_FilterInitStructure;
CanTxMsg TxMessage;

void CAN1_Config(void)
{
  GPIO_InitTypeDef  GPIO_InitStructure;
  
  /* CAN GPIOs configuration **************************************************/

  /* Enable GPIO clock */
  RCC_AHB1PeriphClockCmd(CAN1_GPIO_CLK, ENABLE);

  /* Connect CAN pins to AF9 */
  GPIO_PinAFConfig(CAN1_GPIO_PORT, CAN1_RX_SOURCE, CAN1_AF_PORT);
  GPIO_PinAFConfig(CAN1_GPIO_PORT, CAN1_TX_SOURCE, CAN1_AF_PORT); 
  
  /* Configure CAN RX and TX pins */
  GPIO_InitStructure.GPIO_Pin = CAN1_RX_PIN | CAN1_TX_PIN;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
  GPIO_Init(CAN1_GPIO_PORT, &GPIO_InitStructure);

  /* CAN configuration **************************************************  ******/  
  /* Enable CAN clock */
  RCC_APB1PeriphClockCmd(CAN1_CLK, ENABLE);
  
  /* CAN register init */
  CAN_DeInit(CAN1);

  /* CAN cell init */
  CAN_InitStructure.CAN_TTCM = DISABLE;
  CAN_InitStructure.CAN_ABOM = DISABLE;
  CAN_InitStructure.CAN_AWUM = DISABLE;
  CAN_InitStructure.CAN_NART = ENABLE;//DISABLE;//один раз или бесконечно
  CAN_InitStructure.CAN_RFLM = DISABLE;
  CAN_InitStructure.CAN_TXFP = DISABLE;//
  CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;
  CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
    
  /* CAN Baudrate = 125 kBps (CAN clocked at 42 MHz) */
  CAN_InitStructure.CAN_BS1 = CAN_BS1_3tq;
  CAN_InitStructure.CAN_BS2 = CAN_BS2_3tq;
  CAN_InitStructure.CAN_Prescaler = 12;
  CAN_Init(CAN1, &CAN_InitStructure);

  /* CAN filter init */
  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);
  
  /* Transmit Structure preparation */
  TxMessage.StdId = 0x321;
  TxMessage.ExtId = 0x01;
  TxMessage.RTR = CAN_RTR_DATA;
  TxMessage.IDE = CAN_ID_STD;
  TxMessage.DLC = 1;
  
  /* Enable FIFO 0 message pending Interrupt */
  CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);
  CAN_ITConfig(CAN1, CAN_IT_FMP1, ENABLE);
}


void CAN1_RX0_IRQHandler (void)
{
  if (CAN_GetITStatus(CAN1,CAN_IT_FMP0))
  {           
      CAN_ClearITPendingBit(CAN1,CAN_IT_FMP0);
      CanRxMsg msg_buf;
      CAN_Receive(CAN1, CAN_FIFO0, &msg_buf);
      
      uint32_t a,b;
      a=((((((msg_buf.Data[0]*255+msg_buf.Data[1])*255+msg_buf.Data[2])*255+msg_buf.Data[3])*255+msg_buf.Data[4])*255+msg_buf.Data[5])*255+msg_buf.Data[6])*255+msg_buf.Data[7];
      b=a%100000; a=a/100000; 
      printf("%d%d\r\n",a,b);
  }   
}

void main()
{
  CAN1_Config();

  //Формируем сообщение
  TxMessage.StdId=134222929;
  TxMessage.ExtId=31462954;  
  TxMessage.Data[0] = 64;
  TxMessage.Data[1] = 48;
  TxMessage.Data[2] = 0;
  TxMessage.Data[3] = 81;
  TxMessage.Data[4] = 4;
  TxMessage.Data[5] = 0;
  TxMessage.Data[6] = 25;
  TxMessage.Data[7] = 0;

  //Посылаем сообщение
  CAN_Transmit(CAN1, &TxMessage);
}
Реклама:
Catethysis вне форума  
Непрочитано 15.02.2014, 21:54   #22
k0der
Прохожий
 
Регистрация: 24.10.2013
Сообщений: 2
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
k0der на пути к лучшему
По умолчанию Re: Кто-нибудь запустил CAN на STM32 ???

у меня лично в нормал моде не завелся. девайс делаю тока для чтения. перевел его в этот режим и принимаю. для отправки использовал режим только отправки
k0der вне форума  
Непрочитано 04.06.2014, 06:53   #23
mrKirill
Вид на жительство
 
Аватар для mrKirill
 
Регистрация: 12.04.2007
Сообщений: 348
Сказал спасибо: 2
Сказали Спасибо 36 раз(а) в 32 сообщении(ях)
mrKirill на пути к лучшему
По умолчанию Re: Кто-нибудь запустил CAN на STM32 ???

Сообщение от k0der Посмотреть сообщение
у меня лично в нормал моде не завелся. девайс делаю тока для чтения. перевел его в этот режим и принимаю. для отправки использовал режим только отправки
Если на шине нет ни одного устройства, кроме Вашего, то в Normal Mode блок будет висеть в состоянии CAN_TxStatus_Pending.
Для тестирования "на столе" вполне сгодятся Loop mode, Silent mode и их комбинация.
__________________
Гидравлика + электроника = POWER
mrKirill вне форума  
Непрочитано 05.06.2014, 07:43   #24
neyvert
Прописка
 
Регистрация: 29.06.2010
Сообщений: 104
Сказал спасибо: 14
Сказали Спасибо 9 раз(а) в 7 сообщении(ях)
neyvert на пути к лучшему
По умолчанию Re: Кто-нибудь запустил CAN на STM32 ???

Catethysis, При твоей инициализации будет отправлен только 1 байт, так как у тебя TxMessage.DLC = 1;
Да и это ни к чему TxMessage.ExtId=31462954; у тебя в инициализации только стандартный ID, и он может быть максимум 0x7FF а у тебя TxMessage.StdId=134222929;
Должно быть наверное вот так!
//Формируем сообщение
TxMessage.StdId=0x7FF; //это максимум для стандартного ID
TxMessage.DLC= 8; // Количество передаваемых байт в сообщении максимум 8
TxMessage.Data[0] = 64;
TxMessage.Data[1] = 48;
TxMessage.Data[2] = 0;
TxMessage.Data[3] = 81;
TxMessage.Data[4] = 4;
TxMessage.Data[5] = 0;
TxMessage.Data[6] = 25;
TxMessage.Data[7] = 0;
neyvert вне форума  
Непрочитано 22.07.2014, 19:43   #25
neyvert
Прописка
 
Регистрация: 29.06.2010
Сообщений: 104
Сказал спасибо: 14
Сказали Спасибо 9 раз(а) в 7 сообщении(ях)
neyvert на пути к лучшему
По умолчанию Re: Кто-нибудь запустил CAN на STM32 ???

Настройка фильтра и маски на прием сообщения со стандартным 11 битным ID 123, для правильной работы необходим сдвиг в лево на 5.
Не могу врубится как занести 29 битный ID? в доке не совсем понятно подскажите кто в курсе?
/* CAN filter init */
CAN_FilterInitStructure.CAN_FilterNumber = 0;
CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0123 ‹‹5;
CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x07FF ‹‹5;
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
CAN_FilterInit(&CAN_FilterInitStructure);
neyvert вне форума  
Непрочитано 26.07.2014, 16:47   #26
neyvert
Прописка
 
Регистрация: 29.06.2010
Сообщений: 104
Сказал спасибо: 14
Сказали Спасибо 9 раз(а) в 7 сообщении(ях)
neyvert на пути к лучшему
По умолчанию Re: Кто-нибудь запустил CAN на STM32 ???

Все вопрос решен!
neyvert вне форума  
Непрочитано 26.07.2014, 20:44   #27
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Кто-нибудь запустил CAN на STM32 ???

Сообщение от neyvert Посмотреть сообщение
в доке не совсем понятно
Правда, что на самом деле в доке всё очень даже понятно?
niXto вне форума  
Непрочитано 26.07.2014, 21:02   #28
neyvert
Прописка
 
Регистрация: 29.06.2010
Сообщений: 104
Сказал спасибо: 14
Сказали Спасибо 9 раз(а) в 7 сообщении(ях)
neyvert на пути к лучшему
По умолчанию Re: Кто-нибудь запустил CAN на STM32 ???

Да спасибо! молчание сподвигло к внимательному изучению! думал мож кто делал так попроще объяснят, но увы! Да еще чуть не забыл в библиотеке не нашел прерывания USB_LP_CAN1_RX0_IRQHandler хотя в доке описано! пришлось в startup_stm32f10x_md_vl.s файл ручками добавлять! это нормально этот файл править?

Последний раз редактировалось neyvert; 26.07.2014 в 21:09.
neyvert вне форума  
Непрочитано 15.12.2015, 11:16   #29
serb-radio
Гражданин KAZUS.RU
 
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
serb-radio на пути к лучшему
По умолчанию Re: Кто-нибудь запустил CAN на STM32 ???

В продолжение темы: вы все работаете на внешнем кварце HSE, а подключить и запустить CAN на внутренне HSI возможно?
__________________
То, что нас не убивает - делает нас сильнее
serb-radio вне форума  
Непрочитано 15.12.2015, 13:30   #30
serb-radio
Гражданин KAZUS.RU
 
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
serb-radio на пути к лучшему
По умолчанию Re: Кто-нибудь запустил CAN на STM32 ???

Первый раз с CAN сталкиваюсь. Помогите, господа знатоки, что я неправильно сделал в коде. Проц STM32f103c8, тактирую от HSI 24Мгц Fpclk=24MHz Fahb=24MHz, хочу слать данныеные по CAN в цикле.
Какая ситуация:при старте программы TX что то отсылает, затем в цикле ничего не происходит.
void pll_init (void)
{
FLASH-›ACR|= FLASH_ACR_PRFTBE;
FLASH-›ACR&=~FLASH_ACR_LATENCY;
FLASH-›ACR|= FLASH_ACR_LATENCY_1;


//Iano?ieea PLL
RCC-›CFGR &= ~RCC_CFGR_PLLSRC; //Enoi?ieeii neaiaea aey PLL aua?ai HSI n aaeaieai ia 2
RCC-›CR &= ~RCC_CR_PLLON; //Ioee??eou aaia?aoi? PLL
RCC-›CFGR &= ~RCC_CFGR_PLLMULL; //I?enoeou PLLMULL
RCC-›CFGR |= RCC_CFGR_PLLMULL6; //Eiaoeoeaio oiii?aiey = 6
RCC-›CR |= RCC_CR_PLLON; //Aee??eou aaia?aoi? PLL
while((RCC-›CR & RCC_CR_PLLRDY)==0) {} //I?eaaiea aioiaiinoe PLL

//Ia?aee??eouny ia oaeoe?iaaiea io PLL
RCC-›CFGR &= ~RCC_CFGR_SW; //I?enoea aeoia auai?a enoi?ieea oaeoiaiai neaiaea
RCC-›CFGR |= RCC_CFGR_SW_PLL; //Aua?aou enoi?ieeii oaeoiaiai neaiaea PLL
while((RCC-›CFGR&RCC_CFGR_SWS)!=0x08){}//I?eaaiea ia?aee??aiey ia PLL
//Iano?ieou aaeeoaeu aey AHB
RCC-›CFGR &= ~RCC_CFGR_HPRE; //I?enoea aeoia i?aaaaeeoaey "AHB Prescaler"
RCC-›CFGR |= RCC_CFGR_HPRE_DIV1; //Onoaiiaeou "AHB Prescaler" ?aaiui 1
// Fpclk=24MHz Fahb=24MHz

return;
}


int main (void)
{
pll_init ();
pio_config ();
// ?acaeiee?iaaiea oeyoa

NVIC_CAN_Configuration();

CAN_config2();


//_____________________________CAN__________________ ____________

// CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);
// CAN_ITConfig(CAN1, CAN_IT_TME, ENABLE);
// CAN_DBGFreeze(CAN1,DISABLE);


TxMessage.StdId=0x7FF;
TxMessage.DLC= 8;
TxMessage.Data[0] = 64;
TxMessage.Data[1] = 48;
TxMessage.Data[2] = 0;
TxMessage.Data[3] = 81;
TxMessage.Data[4] = 4;
TxMessage.Data[5] = 0;
TxMessage.Data[6] = 25;
TxMessage.Data[7] = 0;

CAN_Transmit(CAN1,&TxMessage);

__enable_irq();

while(1)
{

CAN_Transmit(CAN1,&TxMessage);
pause(500);
}

void NVIC_CAN_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;;

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




NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

NVIC_InitStructure.NVIC_IRQChannel = USB_HP_CAN1_TX_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriori ty = 0x1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

}


void CAN_config2(void)
{

CAN_InitTypeDef CAN_InitStructure;
CAN_FilterInitTypeDef CAN_FilterInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;

//Tx
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12; //PA2=Tx;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // Alt Function - Push Pull
GPIO_Init(GPIOA, &GPIO_InitStructure);
//Rx
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11; //PA3=Rx;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //
GPIO_Init(GPIOA, &GPIO_InitStructure);


/* CAN1 Periph clock enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);

/* CAN register init */
CAN_DeInit(CAN1);
CAN_StructInit(&CAN_InitStructure);

/* CAN cell init */
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_SJW = CAN_SJW_1tq;
CAN_InitStructure.CAN_BS1 = CAN_BS1_3tq;
CAN_InitStructure.CAN_BS2 = CAN_BS2_5tq;
CAN_InitStructure.CAN_Prescaler = 24;
CAN_Init(CAN1, &CAN_InitStructure);

/* CAN filter init */
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);


}
__________________
То, что нас не убивает - делает нас сильнее

Последний раз редактировалось serb-radio; 15.12.2015 в 13:35.
serb-radio вне форума  
Закрытая тема

Закладки


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кто нибудь имеет описание, как обращаться к KEELOQовскому регистру в PIC12F635/PIC16F636? Make_Pic Микроконтроллеры, АЦП, память и т.д 1 07.05.2010 12:53
Кто - нибудь углубленно знаком с AVR309? graham Микроконтроллеры, АЦП, память и т.д 0 15.02.2006 19:24
Кто нибудь делал вольтметр на ПИК - откликнитесь AnB Измерительное оборудование 23 20.12.2005 22:49
Люди! Кто нибудь видел в России MAX 3353, и где? walrus Информация по радиокомпонентам 1 13.09.2004 22:00


Часовой пояс GMT +4, время: 01:41.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot