
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

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

Google

Dmitry
03.09.2017
12:47:52

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

Dolphin
03.09.2017
12:50:15

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

Dolphin
03.09.2017
13:08:07

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
Но это лишь догадки, с каном в стм год назад дело имел

Dolphin
03.09.2017
13:23:25
Дима
меняй размер кадра

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

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

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

Dmitry
03.09.2017
13:33:18

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

Ht3
03.09.2017
13:34:40

Dmitry
03.09.2017
13:35:19

Dolphin
03.09.2017
13:35:47
ок похоже на правду )

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

Dolphin
03.09.2017
13:43:28
Ну где ты там?

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
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
;)