|
stm32f103 can шина, помогите сил нет |
|
|
|
Feb 10 2015, 17:50
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 10-02-15
Пользователь №: 85 066

|
прошу помощи stm32f103 + mcp2551 подключены к автомобильной кан шине, пакеты получаю успешно в прерывании, а вот отправка ни в какую не работает, ножка PA12(CANTX) молчит, в верхем положении. Инициализация CODE void CAN1_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; CAN_InitTypeDef CAN_InitStructure; CAN_FilterInitTypeDef CAN_FilterInitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );
//CAN_RX GPIO_InitStructure.GPIO_Pin = GPIO_PinSource11; //PA11 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOA, &GPIO_InitStructure);
//CAN_TX GPIO_InitStructure.GPIO_Pin = GPIO_PinSource12; //PA12 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); CAN_DeInit(CAN1);
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;
//расчет на 500кб CAN_InitStructure.CAN_SJW = CAN_SJW_1tq; CAN_InitStructure.CAN_BS1 = CAN_BS1_3tq; CAN_InitStructure.CAN_BS2 = CAN_BS2_2tq; CAN_InitStructure.CAN_Prescaler = 12; CAN_Init(CAN1, &CAN_InitStructure);
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 = CAN_FIFO0; CAN_FilterInitStructure.CAN_FilterActivation = ENABLE; CAN_FilterInit(&CAN_FilterInitStructure);
TxMessage.StdId = 0x321; TxMessage.RTR = CAN_RTR_DATA; TxMessage.IDE = CAN_ID_STD; TxMessage.DLC = 8;
CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE); } Отправка Код TxMessage.StdId=PID_REQUEST; TxMessage.RTR = CAN_RTR_DATA; TxMessage.IDE = CAN_ID_STD; TxMessage.DLC = 8; TxMessage.Data[0] = 0x02; TxMessage.Data[1] = 0x01; TxMessage.Data[2] = ENGINE_COOLANT_TEMP; TxMessage.Data[3] = 0x00; TxMessage.Data[4] = 0x00; TxMessage.Data[5] = 0x00; TxMessage.Data[6] = 0x00; TxMessage.Data[7] = 0x00;
do { transmit_mailbox = CAN_Transmit( CAN1, &TxMessage ); } while( transmit_mailbox =! CAN_NO_MB );
txStat1 = CAN_TransmitStatus(CAN1, 0); //0x02 CAN_TxStatus_Pending txStat2 = CAN_TransmitStatus(CAN1, 1); //0x02 CAN_TxStatus_Pending txStat3 = CAN_TransmitStatus(CAN1, 2); //0x02 CAN_TxStatus_Pending
if (txStat1 == CANTXOK || txStat2 == CANTXOK || txStat3 == CANTXOK) ok = 1; Заполняет все мэил боксы и так и стоит. В режиме Loopback отправка работает, получаю свое же сообщение, но нога не дрыгается. В режиме нормал работает только получение пакетов с кан шины авто. Уже сил моих нет.
Сообщение отредактировал IgorKossak - Feb 10 2015, 18:48
Причина редактирования: [codebox] для длинного кода, [code] - для короткого
|
|
|
|
|
Feb 10 2015, 18:43
|

Знающий
   
Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467

|
А почему: Код GPIO_Mode_Out_PP для ТХ? Разве не альтернативную функцию включать надо?
--------------------
Верить нельзя никому, даже себе. Мне - можно.
|
|
|
|
|
Feb 10 2015, 19:20
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 10-02-15
Пользователь №: 85 066

|
Все верно, должно быть af, это я уже от безисходности поставил в последний раз) и так и так не работает
|
|
|
|
|
Feb 10 2015, 19:24
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 10-02-15
Пользователь №: 85 066

|
ноги правильные, ремап на pb8-9 пробовал, тоже самое
|
|
|
|
|
Feb 10 2015, 19:46
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 10-02-15
Пользователь №: 85 066

|
Ну когда ремап делал, включал, сейчас нет
|
|
|
|
|
Feb 11 2015, 04:19
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 10-02-15
Пользователь №: 85 066

|
Все тесты проводил с подключением к шине авто. Ноги смотрю лог анализатором на базе ардуины. На canrx отчетливо вижу импульсы. На счет того что авто не отдает ack подтверждение тоже думал. Но если всетаки пакет ушел, то должен придти ответ с данными, а его нет. Ноги никто больше не занимает. Беда прям какаято.
Если бы были проблемы с шиной, getLastErrorCode давал бы 0x50 bitDominantError. Это я наблюдал в начале, потом выпаял все подтяжки на плате, там был распаян юсб, сейчас все проверено и getLastErrorCode говорит noError
Сообщение отредактировал aneox - Feb 11 2015, 04:09
|
|
|
|
|
Feb 11 2015, 05:35
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 10-02-15
Пользователь №: 85 066

|
Цитата(AHTOXA @ Feb 10 2015, 20:39)  Тактирование AFIO включили? сегодня проверил без ремапа, затактировал RCC_APB2Periph_AFIO, результат тот же, данные получаю, отправить не могу Уже не знаю куда смотреть. Переписать все на hal или грешить на железо. Есть в наличии такие же камни только в другом корпусе, травить плату для проверки, времени много отнимет( Цитата(Golikov A. @ Feb 10 2015, 21:39)  это вроде как признак что шина занята или нет? линия rx в промежутках между импульсами тоже вверху, думаю это свободное состояние
|
|
|
|
|
Feb 11 2015, 07:40
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 10-02-15
Пользователь №: 85 066

|
Цитата(qwqw @ Feb 11 2015, 08:08)  Когда успешно принимаете пакет, ACK от вас тоже не выставляется? если в режиме loopback то выставляется, tx status = ok кое что нащюпал, убрал питание с mcp2551 трансивера, ноги опустились, перевел в режим лупбак, отключил от авто, начал слать сам себе. Беру резистор 100ком, на кантх и к 3.3в, а нога то внизу, чето шлет думаю, беру резистор 4.7ком вместо сотки, и начинаю наблюдать какието импульсы на ноге, но в то же время импульсы появились и на canrx, хотя их там не должно быть. Куда копать дальше не знаю. mcp2551 питается от 5в, мож ей всетаки не хватает 3,3 импульса с стма? хотя встречал много примеров в сети использования такой связки( мож с процом чтото, нога померла или еще чего, пойду светодиод прикручу поморгаю ей
|
|
|
|
|
Feb 11 2015, 08:24
|
Участник

Группа: Участник
Сообщений: 16
Регистрация: 10-02-15
Пользователь №: 85 066

|
на сколько я знаю в режиме лупбак наружу тх ногой должен дрыгать, а вот в режиме сайлентЛупбак полная изоляция. Вообщем выпаял трансивер, делаю так Код int main(void) {
SystemInit();
GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC, ENABLE ); GPIO_InitStructure.GPIO_Pin = GPIO_PinSource12 | GPIO_PinSource11 | GPIO_PinSource10 | GPIO_PinSource15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_PinSource3 | GPIO_PinSource8 | GPIO_PinSource9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_PinSource15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_SetBits(GPIOA, GPIO_PinSource12); GPIO_SetBits(GPIOA, GPIO_PinSource11); GPIO_SetBits(GPIOA, GPIO_PinSource10); GPIO_SetBits(GPIOA, GPIO_PinSource15);
GPIO_SetBits(GPIOB, GPIO_PinSource3); GPIO_SetBits(GPIOB, GPIO_PinSource8); GPIO_SetBits(GPIOB, GPIO_PinSource9);
GPIO_SetBits(GPIOC, GPIO_PinSource15);
while (1) { } } ни на одной ноге не горит светодиод, что не так то или финит аля комедия?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|