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

 
 
> Посылка по CAN в STM32F3
Jenya7
сообщение Aug 17 2018, 09:56
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Настраиваю CAN
CODE
void CAN_Setup(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
CAN_InitTypeDef CAN_InitStructure;
CAN_FilterInitTypeDef CAN_FilterInitStructure;

/* CAN GPIOs configuration **************************************************/

/* Enable GPIO clock */
RCC->AHBENR |= RCC_AHBPeriph_GPIOB;

/* Connect CAN pins to AF9 */
GPIO_PinAFConfig(GPIOB, GPIO_PinSource8, GPIO_AF_9);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource9, GPIO_AF_9);

/* Configure CAN RX and TX pins */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8| GPIO_Pin_9;
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(CAN_GPIO_PORT, &GPIO_InitStructure);

/* NVIC configuration *******************************************************/
NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

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

/* CAN configuration ********************************************************/
/* Enable CAN clock */
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 Baudrate = 1MBps (CAN clocked at 36 MHz) */
CAN_InitStructure.CAN_BS1 = CAN_BS1_9tq;
CAN_InitStructure.CAN_BS2 = CAN_BS2_8tq;
CAN_InitStructure.CAN_Prescaler = 2;
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 = 39;
//CAN_InitStructure.CAN_SJW = 2;

CAN_Init(CANx, &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);

/* Enable FIFO 0 message pending Interrupt */
CAN_ITConfig(CANx, CAN_IT_FMP0, ENABLE);
/* Enable FIFO 1 message pending Interrupt */
CAN_ITConfig(CANx, CAN_IT_FMP1, ENABLE);
}

Посылаю
Код
    TxMessage.StdId = ( (0x100 *(i+1)) + CAN_COM_WHO_IS);
    TxMessage.DLC = 1;
    TxMessage.RTR = CAN_RTR_DATA;
    TxMessage.IDE = CAN_ID_STD;
     CAN_Transmit(CAN1, &TxMessage);
В функции посылки - все мейлбоксы заняты - я попадаю в transmit_mailbox = CAN_TxStatus_NoMailBox;
CODE
uint8_t CAN_Transmit(CAN_TypeDef* CANx, CanTxMsg* TxMessage)
{
uint8_t transmit_mailbox = 0;
/* Check the parameters */
assert_param(IS_CAN_ALL_PERIPH(CANx));
assert_param(IS_CAN_IDTYPE(TxMessage->IDE));
assert_param(IS_CAN_RTR(TxMessage->RTR));
assert_param(IS_CAN_DLC(TxMessage->DLC));

/* Select one empty transmit mailbox */
if ((CANx->TSR&CAN_TSR_TME0) == CAN_TSR_TME0)
{
transmit_mailbox = 0;
}
else if ((CANx->TSR&CAN_TSR_TME1) == CAN_TSR_TME1)
{
transmit_mailbox = 1;
}
else if ((CANx->TSR&CAN_TSR_TME2) == CAN_TSR_TME2)
{
transmit_mailbox = 2;
}
else
{
transmit_mailbox = CAN_TxStatus_NoMailBox;
}

if (transmit_mailbox != CAN_TxStatus_NoMailBox)
{
/* Set up the Id */
CANx->sTxMailBox[transmit_mailbox].TIR &= TMIDxR_TXRQ;
if (TxMessage->IDE == CAN_Id_Standard)
{
assert_param(IS_CAN_STDID(TxMessage->StdId));
CANx->sTxMailBox[transmit_mailbox].TIR |= ((TxMessage->StdId << 21) | \
TxMessage->RTR);
}
else
{
assert_param(IS_CAN_EXTID(TxMessage->ExtId));
CANx->sTxMailBox[transmit_mailbox].TIR |= ((TxMessage->ExtId << 3) | \
TxMessage->IDE | \
TxMessage->RTR);
}

/* Set up the DLC */
TxMessage->DLC &= (uint8_t)0x0000000F;
CANx->sTxMailBox[transmit_mailbox].TDTR &= (uint32_t)0xFFFFFFF0;
CANx->sTxMailBox[transmit_mailbox].TDTR |= TxMessage->DLC;

/* Set up the data field */
CANx->sTxMailBox[transmit_mailbox].TDLR = (((uint32_t)TxMessage->Data[3] << 24) |
((uint32_t)TxMessage->Data[2] << 16) |
((uint32_t)TxMessage->Data[1] << 8) |
((uint32_t)TxMessage->Data[0]));
CANx->sTxMailBox[transmit_mailbox].TDHR = (((uint32_t)TxMessage->Data[7] << 24) |
((uint32_t)TxMessage->Data[6] << 16) |
((uint32_t)TxMessage->Data[5] << 8) |
((uint32_t)TxMessage->Data[4]));
/* Request transmission */
CANx->sTxMailBox[transmit_mailbox].TIR |= TMIDxR_TXRQ;
}
return transmit_mailbox;
}
Если принимающая сторона не приняла мейлбокс он не освободился ?

Сообщение отредактировал IgorKossak - Aug 19 2018, 20:06
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Jenya7   Посылка по CAN в STM32F3   Aug 17 2018, 09:56
- - Obam   Коллега, вы хрензнает сколько лет на форуме, листи...   Aug 17 2018, 15:47
|- - esaulenka   Цитата(Obam @ Aug 17 2018, 18:47) листинг...   Aug 17 2018, 16:02
- - x893   Цитата(Jenya7 @ Aug 17 2018, 12:56) Настр...   Aug 17 2018, 18:20
- - Jenya7   для отладки я изменил случай когда все мейлбоксы з...   Aug 19 2018, 07:31
- - Jenya7   CAN по прежнему не работает.Вопрос - нужно ли чист...   Sep 13 2018, 13:02
- - Jenya7   CAN заработал. надо было перемычку замкнуть на пин...   Sep 17 2018, 04:59
|- - Alechek   Цитата(Jenya7 @ Sep 17 2018, 09:59) Друга...   Sep 17 2018, 05:27
|- - Jenya7   Цитата(Alechek @ Sep 17 2018, 10:27) Ниче...   Sep 17 2018, 06:04
|- - Alechek   Цитата(Jenya7 @ Sep 17 2018, 11:04) CAN ...   Sep 17 2018, 10:11
|- - Jenya7   Цитата(Alechek @ Sep 17 2018, 15:11) CAN ...   Sep 17 2018, 10:35
- - редактор   Цитатая что то не нашел где там АСК отменить По...   Sep 17 2018, 12:47
|- - Jenya7   Цитата(редактор @ Sep 17 2018, 17:47) П...   Sep 17 2018, 14:11
|- - adnega   Цитата(Jenya7 @ Sep 17 2018, 17:11) там р...   Sep 17 2018, 18:48
|- - Jenya7   Цитата(adnega @ Sep 18 2018, 00:48) Может...   Sep 18 2018, 04:49
- - Jenya7   фигня какая то с этим КАНом. Прием на мастере и сл...   Sep 21 2018, 07:21
- - esaulenka   Не, я понимаю, что читать спецификации не модно, е...   Sep 21 2018, 13:04
|- - Jenya7   Цитата(esaulenka @ Sep 21 2018, 18:04) Не...   Sep 21 2018, 13:49
|- - Alechek   Цитата(Jenya7 @ Sep 21 2018, 18:49) а так...   Sep 21 2018, 14:17
|- - Jenya7   Цитата(Alechek @ Sep 21 2018, 19:17) По-ч...   Sep 21 2018, 14:26
- - Jenya7   ОК. вроде заработало. настраиваю маску на слейве ...   Sep 28 2018, 07:53


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

 


RSS Текстовая версия Сейчас: 27th April 2024 - 22:59
Рейтинг@Mail.ru


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