@ru_electronics

Страница 535 из 718
Maksim
17.04.2018
18:43:58
Этот тоже отлично

Kyle
17.04.2018
22:55:20
Как правильно пользоваться I2C слейв в стм? Какая-то фигня, если писать HAL_I2C_Slave_Receive_DMA(&hi2c1, (uint8_t*)aRxBuffer, 1) То возвращает HAL_BUSY Возвращает он это до тех пор пока мастер не постучится, т.е. надо делать так: while(HAL_I2C_Slave_Receive_DMA(&hi2c1, (uint8_t*)aRxBuffer, 1) != HAL_OK); Но это херь полная, она подвешивает все приложение мне

Egor
18.04.2018
06:05:35
Как правильно пользоваться I2C слейв в стм? Какая-то фигня, если писать HAL_I2C_Slave_Receive_DMA(&hi2c1, (uint8_t*)aRxBuffer, 1) То возвращает HAL_BUSY Возвращает он это до тех пор пока мастер не постучится, т.е. надо делать так: while(HAL_I2C_Slave_Receive_DMA(&hi2c1, (uint8_t*)aRxBuffer, 1) != HAL_OK); Но это херь полная, она подвешивает все приложение мне
Исходя из «HAL_Reference», после назначения приоритета прерываний в DMA, вам нужно дождаться прерывания от DMA. Т.е. Единожды вызывать функцию слэйв_дма и потом ждать прерывание от него. (Страница 221, документ STM32F0_HAL_Reference.pdf)

Google
Юра
18.04.2018
07:49:58
Да, но когда я подключаю я сер к 6ому, то есть задержка в тик, подключаю к 5му, нет задержки, но я кажется понял почему. Тк запись происходит на rising edge импульса, а вывод на следующий rising edge, то при подключении к сер к 6ому логично, что будет задержка, тк 6й выводит с задержкой на 1 такт. Я вот таким образом это понял
Если кому интересно, то я разобрался. Я предположил про отставание вывода верно, но у чипа есть специальный вывод QH’, это вывод непосредственно из хранилища, а не аутпут юнита (который может работать с другим генератором импульсов). QH’ специально предназначен для соединения нескольких регистров в цепь или зацикливания регистра

Вот такой вот результат

Kyle
18.04.2018
08:35:52
Исходя из «HAL_Reference», после назначения приоритета прерываний в DMA, вам нужно дождаться прерывания от DMA. Т.е. Единожды вызывать функцию слэйв_дма и потом ждать прерывание от него. (Страница 221, документ STM32F0_HAL_Reference.pdf)
В том то и дело, единожды работает с UART, с SPI, но не с I2C. У меня I2C всегда возвращает HAL_BUSY, он не запускает прослушку, и делает он это до тех пор пока не постучится мастер

Eduard
18.04.2018
09:07:14
Чем можно организовать низкоскоростную проводную линию связи для передачи ? Дано: Передач 200 байт каждые 2-3 секунды ? Простой ногодрыг (NRZ) по экранированной витой паре может серьезно рассматриваться как вариант ?

Dmitry
18.04.2018
09:07:57
485?

Eduard
18.04.2018
09:09:31
30 метров

kiltum
18.04.2018
09:09:50
тогда точно не ногодрыг. RS485. дешево, просто, везде обсосано от и до

Eduard
18.04.2018
09:10:07
Ногодрыг через транзистор на 12V линии нет?

kiltum
18.04.2018
09:10:48
на 30 метрах наловишь всего вокруг. зачем? когда трансиверы стоят как транзистор

Eduard
18.04.2018
09:11:24
Встречал такую вещь как CLUNET на хабре https://habrahabr.ru/post/160469/. Хотел поинтересоваться смыслом подобных затей ?

Eduard
18.04.2018
09:13:15
Очень смешно )

Google
Кирилл
18.04.2018
09:13:53
Очень смешно )
Вообще то нет

Eduard
18.04.2018
09:14:29
Я знаю, что можно передеать данные по электросети, но нужны условия, дроссели на вводе и так далее

Maksim
18.04.2018
09:14:47
Микросхема и трансформатор

Admin
ERROR: S client not available

Eduard
18.04.2018
09:15:00
Даже сейчас ее назову.. минутку)

Maksim
18.04.2018
09:16:42
AMIS-49587

или ST7540

Evgeny
18.04.2018
09:17:34
в рф разве не запрещено?

Maksim
18.04.2018
09:17:41


в рф разве не запрещено?
РКН если что заблокирует

Kyle
18.04.2018
09:29:53
Конфиг совершенно обычный, все что я сделал это указал адрес static void MX_I2C1_Init(void) { hi2c1.Instance = I2C1; hi2c1.Init.ClockSpeed = 400000; hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_16_9; hi2c1.Init.OwnAddress1 = 0x20 << 1; hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; hi2c1.Init.OwnAddress2 = 0; hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; if (HAL_I2C_Init(&hi2c1) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } } Дебажил, да, при HAL_I2C_Slave_Receive_DMA зависает на 10 секунд (время таймаута в конфиге хала) и после выплевывает HAL_BUSY, зависает внутри I2C_WaitOnFlagUntilTimeout

Смогу посмотреть только завтра. Скинь конфигурацию i2c. А еще debug делал?
При этом подтяжки есть, на шине вообще больше никого, ощущение что он ждет это время привет от мастера, но бл, это же не обычный режим, тут все по прерыванию должно быть

Страница 535 из 718