@ru_arduino

Страница 3186 из 7737
Dmitry
03.09.2017
12:24:31


Dolphin
03.09.2017
12:28:51
а трансивер?

не такой часом? MCP2551

Dmitry
03.09.2017
12:29:25
TJA1042T/3

Google
Dolphin
03.09.2017
12:29:57
тут такое: I found a solution, though not an ideal one. I lowered the CAN baud rate by increasing the prescaler to 80 in CAN_Config. This has resulted in successful CAN communication. The problem was most likely with my CAN bus. The CAN bus length might have been to short (mere centimeters) to use the 120 ohm termination resistances and the bit right to high to use the bus without them.

Dmitry
03.09.2017
12:30:03
смотрю осциллографом, но на него ничего не приходит

Dolphin
03.09.2017
12:33:50
Дима покажи полностью MX_CAN_Init

Dmitry
03.09.2017
12:35:35
/* CAN init function */ void MX_CAN_Init(void) { hcan.Instance = CAN; hcan.Init.Prescaler = 12; hcan.Init.Mode = CAN_MODE_NORMAL; hcan.Init.SJW = CAN_SJW_1TQ; hcan.Init.BS1 = CAN_BS1_3TQ; hcan.Init.BS2 = CAN_BS2_3TQ; hcan.Init.TTCM = DISABLE; hcan.Init.ABOM = DISABLE; hcan.Init.AWUM = DISABLE; hcan.Init.NART = DISABLE; hcan.Init.RFLM = DISABLE; hcan.Init.TXFP = DISABLE; if (HAL_CAN_Init(&hcan) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } }

Dolphin
03.09.2017
12:38:07
клока нет

__HAL_RCC_CAN_CLK_ENABLE ();

а погоди, посмотри в MX_GPIO_Init

Dmitry
03.09.2017
12:43:04
__HAL_RCC_CAN1_CLK_ENABLE(); не помог

void HAL_CAN_MspInit(CAN_HandleTypeDef* canHandle) { GPIO_InitTypeDef GPIO_InitStruct; if(canHandle->Instance==CAN) { /* USER CODE BEGIN CAN_MspInit 0 */ /* USER CODE END CAN_MspInit 0 */ /* CAN clock enable */ __HAL_RCC_CAN1_CLK_ENABLE(); /**CAN GPIO Configuration PB8 ------> CAN_RX PB9 ------> CAN_TX */ GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct.Alternate = GPIO_AF4_CAN; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /* CAN interrupt Init */ HAL_NVIC_SetPriority(CEC_CAN_IRQn, 3, 0); HAL_NVIC_EnableIRQ(CEC_CAN_IRQn); /* USER CODE BEGIN CAN_MspInit 1 */ /* USER CODE END CAN_MspInit 1 */ } }

Dolphin
03.09.2017
12:45:00
смотрю это штатная проблема на кубе, через хал говорят без проблем

Dmitry
03.09.2017
12:45:55
наверное, опять какой-то бит в регистрах не ставится

Dolphin
03.09.2017
12:46:54
наверное, опять какой-то бит в регистрах не ставится
Посмозырь это мб: https://www.drive2.ru/c/472295770540736550/

Ht3
03.09.2017
12:47:20
Шо за проц? Если 103-й, то одновременно с USB не получиться

Google
Dmitry
03.09.2017
12:47:52
Шо за проц? Если 103-й, то одновременно с USB не получиться
почему? F072 но я уже прпробовал USB отключить и чуда тоже не произошло

Ht3
03.09.2017
12:48:45
В 103-м проблема и недоработка, там общее кое-что и прерывание, тому только одно

А в 072 норм

Dolphin
03.09.2017
12:50:15
В 103-м проблема и недоработка, там общее кое-что и прерывание, тому только одно
у меня куб при объединении USB и CAN предлагает другие пины для CAN

Ht3
03.09.2017
12:50:47
Да, физически все норм, но только с 105-го и выше все окей

http://we.easyelectronics.ru/STM32/druzhim-programmu-canhacker-i-modul-2can-ot-starline.html

Это уже много раз где писали, что "Дело в том, что одновременная работа CAN и USB в серии F1 возможна только в микроконтроллерах STM32F105/107"

Еще на 042 проверял, там тоже ок

А 103 чет, ну не вышло у них, у ST, ну

Dmitry
03.09.2017
12:54:04


Ht3
03.09.2017
12:55:57
А чтоб проверить все, стм должен к трансмиттеру подключен быть, а он - к другому, рабочему CAN устройству

Простая посылка ниче не даст, ну или loop тогда

Dmitry
03.09.2017
12:59:03
ну стм к трансмиттеру подключён, но в него ничего не передаёт почему посылка ничего не даст? мне хотя бы осциллографом её увидеть и перейти к уровню «два устройства»

Dolphin
03.09.2017
12:59:53
Инит трансмиттера должен быть виден имхо

Ht3
03.09.2017
13:01:19
А, т.е. даже ничего не отсылает?

Посмотрите в отладчике, все ли заинитено, зашло ли в прерывание после отсылки

Dmitry
03.09.2017
13:03:17
на трансмиттер ничего не приходит. высокие уровни по rx и tx я правильно понимаю, что этот вот HAL_TIMEOUT — это про то, что передатчик на кристалле не произвёл собственно передачу за отведённое время? ведь HAL_CAN_Transmit — это просто передача без приёма. какой ещё таймаут может быть?

Ht3
03.09.2017
13:03:19
ремап ГПИО выполнен?

Dmitry
03.09.2017
13:04:17
кубик отремапил /**CAN GPIO Configuration PB8 ------> CAN_RX PB9 ------> CAN_TX */ GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_9; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct.Alternate = GPIO_AF4_CAN; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

Ht3
03.09.2017
13:05:24
Это не ремап, да и он не нужен, это вроде как основные выводы

Google
Dmitry
03.09.2017
13:05:34
Посмотрите в отладчике, все ли заинитено, зашло ли в прерывание после отсылки
так отсылка же не через прерывание. и она не произошла, судя по ошибке

Ht3
03.09.2017
13:08:12
Прерывание к кубе галочка должна быть

Dolphin
03.09.2017
13:08:22
это 0й канал CAN+USB

Dmitry
03.09.2017
13:09:02


Dolphin
03.09.2017
13:09:02


Ht3
03.09.2017
13:10:19
Сейчас смотрю экземплы для кана, там много чего написано, проверьте все ли не забыли

Прерывание по коду у Вас настраивается, его куб добавил, проверьте, что он в него входит

Для кана еще должны быть вские фильтра\маски настроены, в Вашем ините этого не видно

Dmitry
03.09.2017
13:12:23
фильтры — они же на приём, чтобы проц не грузить

Ht3
03.09.2017
13:14:14
Несколько мейлбоксов, да. Вообще можно и без слейва, просто два вывода замкнуть и проверить и прием тогда сразу

Dolphin
03.09.2017
13:14:53
фильтры — они же на приём, чтобы проц не грузить
На что влияет соотношение BS1 к BS2 я так и не смог осознать или понять))), в разных источниках по разному, но по факту выходит, что BS1 должен быть больше BS2 или как в другом источнике BS1=~(87,5%(BS1+BS2)), мне встречалось следующее BS1/BS2 4/3, 13/2, 6/5, и даже 6/8, 5/6 что как мне показалось не есть правильно, но хз…

а у тебя 3/3

Dmitry
03.09.2017
13:16:18
Всё время делится на кванты длиной t_q, и номинальная длительность бита равна 1+BS1+BS2 квантов. Захват значения бита происходит на границе BS1 и BS2. В процессе приёма приёмник определяет, в какой из временных периодов произошёл перепад сигнала (т.е. начало приёма нового бита). В норме перепад должен произойти на границе SYNC и BS1, если он произошёл раньше — контроллер уменьшает BS1, если позже — увеличивает BS2 на величину SJW (от 1 до 4 квантов времени). Таким образом, происходит постоянная пересинхронизация с частотой других приёмников.

Dolphin
03.09.2017
13:17:20
о

самосинхронизация )

Ht3
03.09.2017
13:19:18
Калькулятор длительностей для многих МК - http://www.bittiming.can-wiki.info/

Dmitry
03.09.2017
13:20:58


Ht3
03.09.2017
13:22:48
Ээ, хз, вроде они только в момент работы становятся, т.е. взвели передачу, тот на миллисекунды стал 1 а птом обратно

Google
Ht3
03.09.2017
13:23:08
Но это лишь догадки, с каном в стм год назад дело имел

Ht3
03.09.2017
13:25:26
Ага, под разные семейства сразу

Вообще, отладчиком видно где зависло?

Он таймаут возвращает обычно, елси флаг не выставился где-то

Admin
ERROR: S client not available

Ht3
03.09.2017
13:26:14
Вот нужно узнать что за флаг

Решать задачу взад, так сказать )

Dmitry
03.09.2017
13:28:00
меняй размер кадра
так рано ещё, не?

Dolphin
03.09.2017
13:28:08
А 103 чет, ну не вышло у них, у ST, ну
хз че ты на него гонишь, нормальный камень )

Dmitry
03.09.2017
13:28:15
Вообще, отладчиком видно где зависло?
/* Check End of transmission flag */ while(!(__HAL_CAN_TRANSMIT_STATUS(hcan, transmitmailbox))) { /* Check for the Timeout */ if(Timeout != HAL_MAX_DELAY) { if((Timeout == 0U) || ((HAL_GetTick()-tickstart) > Timeout)) { hcan->State = HAL_CAN_STATE_TIMEOUT; /* Cancel transmission */ __HAL_CAN_CANCEL_TRANSMIT(hcan, transmitmailbox); /* Process unlocked */ __HAL_UNLOCK(hcan); return HAL_TIMEOUT; } } } ну оно не зависло, оно тут таймаут выплёвывает

Dolphin
03.09.2017
13:28:55
так рано ещё, не?
у тебя возможно инит не переварил длительности, задай фрейм нормально, по калькулятору

Ht3
03.09.2017
13:29:45
хз че ты на него гонишь, нормальный камень )
Да, норм, в сравнении, сам везде пихаю, но эррата все же не тонкая

Dolphin
03.09.2017
13:30:22
Да, норм, в сравнении, сам везде пихаю, но эррата все же не тонкая
еще раз спрошу ской козырный: Не разгонял случаем до 144? :)

Ht3
03.09.2017
13:30:36
Разгонял, а что?

Dolphin
03.09.2017
13:30:55
стабильность периферии интересует

Google
Dolphin
03.09.2017
13:31:09
я не все тесты проводил, лень было

Ht3
03.09.2017
13:32:37
/* Check End of transmission flag */ while(!(__HAL_CAN_TRANSMIT_STATUS(hcan, transmitmailbox))) { /* Check for the Timeout */ if(Timeout != HAL_MAX_DELAY) { if((Timeout == 0U) || ((HAL_GetTick()-tickstart) > Timeout)) { hcan->State = HAL_CAN_STATE_TIMEOUT; /* Cancel transmission */ __HAL_CAN_CANCEL_TRANSMIT(hcan, transmitmailbox); /* Process unlocked */ __HAL_UNLOCK(hcan); return HAL_TIMEOUT; } } } ну оно не зависло, оно тут таймаут выплёвывает
Не взвелся флаг какой-то там (посмотри по макросам). А еще посмотри флаги ошибок, если есть. И точно ли идет запуск трансмисии, по шагам короч посмотри, так все очевидно почти должно быть

Dolphin
03.09.2017
13:34:17
это с калькулятора?

Ht3
03.09.2017
13:34:40
я не все тесты проводил, лень было
Та я тоже, в смысле лень, помигал и ладно. Можно вообще GD32F103, у него штатная 108 и мегабайты флеши, и стоит почти столько же

Dmitry
03.09.2017
13:35:19


Dolphin
03.09.2017
13:35:47
Та я тоже, в смысле лень, помигал и ладно. Можно вообще GD32F103, у него штатная 108 и мегабайты флеши, и стоит почти столько же
да у меня и так зоопарк, а толку мало. Хз че написать... Лисицина повторить?! Чет не удовлетворение совсем )

ок похоже на правду )

Ht3
03.09.2017
13:42:17
На максимальной частоте лучше не играться, оно может при 22 °C работать, а при 23 подглючивать 1 раз из миллиона, а при 26 вообще в отрыв пойти

Хочется все больше мк с кусочком плисы попробовать, есть от микрочипов нечто и кипариса

Dmitry
03.09.2017
13:48:32
Dolphin
03.09.2017
13:49:02
говорят еще лупбэк помогает

Dmitry
03.09.2017
13:56:43
при этом ABRQ0=0 получается, вылетел где-то на трансмите

Dolphin
03.09.2017
13:57:53
при этом ABRQ0=0 получается, вылетел где-то на трансмите
Вот рабочий проект из статьи выше которую дал, с фильтрами приема: https://drive.google.com/file/d/0B8vg644OmU21di1PUV9ubW9CX0k/view

STM32F042K6T6

Dmitry
03.09.2017
13:58:48
угу, видел. ща попробую лупбэк или луп с сайлентом. если трабла уйдёт — что-то накосячил с IC физики

Dolphin
03.09.2017
13:59:24
Silent+ LoopBack — полностью отключен от внешнего мира)

Dmitry
03.09.2017
13:59:40
хм. с лупбэком вижу активность на TX пине

Dolphin
03.09.2017
13:59:52
;)

Страница 3186 из 7737