Dr
23.05.2017
09:19:23
Konstantin
23.05.2017
09:22:30
Мы про ардуину говорим сейчас, да? :)
ОлегЪ
23.05.2017
09:23:21
Dr
23.05.2017
09:23:42
Google
Konstantin
23.05.2017
09:24:47
Ладно, я не вижу смысла спорить. Для меня это - дичь и нркмания. Даже если принять во внимание специфику плк.
Petr
23.05.2017
09:25:51
ОлегЪ
23.05.2017
09:42:26
Petr
23.05.2017
09:44:49
Нехис
23.05.2017
09:45:15
Roman
23.05.2017
13:30:32
ну жесть конечно)
ладно, мысли такие:
если есть таймер - читай по таймеру и через него же шли в порт.
если таймера нету, может есть отлов события изменения на ноге и в нем же слать.
ну и было бы не плохо дать название этой дичи))
кстати, если не любишь код, помимо этой штуки есть ещё пара таких же диких штуковин с графическим программированием, но там аля ассемблер. ну то есть тот же асм только в графических блоках. будет интересно скажу тебе название.
Иван
23.05.2017
13:31:35
Roman
23.05.2017
13:31:55
Иван
23.05.2017
13:32:15
Я люблю деньги! :))
Roman
23.05.2017
13:32:30
кто ж их не любит)
Alexandre
24.05.2017
09:41:09
Человек -
24.05.2017
13:40:48
Я еще вернусь)0))
Dolphin
24.05.2017
13:44:27
Google
Serg
25.05.2017
14:48:44
Обнаружил в одном проекте такую функцию отправки байта по SPI
SPI_I2S_SendData(SPIx, data);
// Зависнуть тут не может, потому что SPI всё равно отработает посылку
while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_BSY));
// В силу особенностей организации SPI на STM32, нельзя только писать,
// после любой записи нужно прочитать, дополнительного времени это не требует
return SPI_I2S_ReceiveData(SPIx);
Что за такая особенность SPI в STM32, что нельзя только писать?
metaclass
25.05.2017
14:59:45
потому что SPI двухнаправленный
он когда пишет, одновременно и читает
поэтому входной буфер получает данные от слейва, даже если тот ничего писать не хочет
и буфер нужно зачистить, прочитав его.
Serg
25.05.2017
15:06:49
почему ни в одном примере SPI об этом ни слова?
metaclass
25.05.2017
15:07:28
я так понимаю, что если не включать разрешение прерывания и не проверять флаг переполнения - это ни на что не повлияет
а
хотя если попытаться потом читать
то будет прочитан первый байт, а не тот который пришел на самом деле
т.е. если сначала write-only: записать и не прочесть SPI_DR, а потом послать FF и попытаться прочитать ответ - то придет не то, что слейв записал во второй раз
а то что записал в первый.
Each iteration consists of sending
a byte, waiting for the receiver to complete, and then receiving a byte. In
the case of the write-only routine, an internal buffer is used to catch and
discard a received byte. Similarly, the read-only routine transmits a sequence
of 0xff (effectively idle) bytes while receiving.
https://www.cs.indiana.edu/~geobrown/book.pdf это отсюда цитата
хотя вот в reference manual написано, что это касается только slave
An overrun condition occurs when the master device has sent data bytes and the slave
device has not cleared the RXNE bit resulting from the previous data byte transmitted.
In this case, the receiver buffer contents will not be updated with the newly received data
from the master device. A read from the SPI_DR register returns this byte. All other
subsequently transmitted bytes are lost.
Serg
25.05.2017
15:15:16
Вот из примеров SPL:
Google
Serg
25.05.2017
15:15:27
void SPIx_IRQHANDLER(void)
{
#ifdef SPI_SLAVE
/* SPI in Slave Receiver mode--------------------------------------- */
if (SPI_I2S_GetITStatus(SPIx, SPI_I2S_IT_RXNE) == SET)
{
RxBuffer[Rx_Idx++] = SPI_I2S_ReceiveData(SPIx);
}
#endif
#ifdef SPI_MASTER
/* SPI in Master Tramitter mode--------------------------------------- */
if (SPI_I2S_GetITStatus(SPIx, SPI_I2S_IT_TXE) == SET)
{
if (CmdStatus == 0x00)
{
/* Send Transaction code */
SPI_I2S_SendData(SPIx, CmdTransmitted);
CmdStatus = 0x01;
}
else
{
if (Tx_Idx < GetVar_NbrOfData())
{
/* Send Transaction data */
SPI_I2S_SendData(SPIx, TxBuffer[Tx_Idx++]);
}
else
{
/* Disable the Tx buffer empty interrupt */
SPI_I2S_ITConfig(SPIx, SPI_I2S_IT_TXE, DISABLE);
}
}
}
#endif /* SPI_SLAVE */
}
В #ifdef SPI_MASTER только отправляется, ничего принудительно не принимается
metaclass
25.05.2017
15:19:00
да, похоже, что мастера overrun не касается
по крайней мере упоминаний про это я найти не могу
Serg
25.05.2017
15:21:44
А в каких случаях нужно вызывать SPI_I2S_ClearFlag(..) ?
В примере выше не вызывается
metaclass
25.05.2017
15:25:39
* @param SPI_I2S_FLAG: specifies the SPI flag to clear.
* This function clears only CRCERR flag.
только при проверке CRC
остальные флаги очищаются чтением SPI_DR и/или SPI_SR
http://www.disca.upv.es/aperles/arm_cortex_m3/curset/STM32F4xx_DSP_StdPeriph_Lib_V1.0.1/html/group___s_p_i___group5.html#ga3aabd9e2437e213056c0ed9bdfa1a724
https://electronics.stackexchange.com/questions/193820/spi-wrong-received-data вот тут кстати, про чтение
надо проверить как этот SPI вообще на приход новых данных при наличии данных в буфере, в режиме мастера реагирует
kaktys
25.05.2017
17:33:49
cp2104 в qfn никто сам не паял? Спаял вроде все верно, но даже усб не распознает её вообще, как будто нет
777Andrej
25.05.2017
17:43:23
Значит видать не пропай
Какая то реакция должна быть у юсби
Dr
25.05.2017
17:51:37
kaktys
25.05.2017
18:04:44
777Andrej
25.05.2017
18:05:21
kaktys
25.05.2017
18:16:46
Всё прозвонил
Vagiz
25.05.2017
18:20:55
а пад под чипом тоже запаян к земле? или это не обязательно ?
Google
kaktys
25.05.2017
18:28:08
Написано что опционально
Странно
На выходе внутреннего регулятора 3.1в вместо 3.45 по даташыту
Konstantin
25.05.2017
19:27:36
Serg
25.05.2017
19:36:13
kaktys
25.05.2017
19:39:57
Konstantin
25.05.2017
19:41:21
kaktys
25.05.2017
19:46:16
Serg
26.05.2017
11:00:42
Поделитесь реализацией двунаправленного обмена на STM32 по SPI на прерываниях.
Двунаправленная имеется ввиду дал запрос - получил ответ.
Не одновременно
Не на прерываних все работает
С прерываниями ересь какая-то
Дмитрий
26.05.2017
11:43:20
есть же официальные примеры от STM в их библиотеках
Serg
26.05.2017
11:43:59
они или без прерываний, или только на прием или передачу
Дмитрий
26.05.2017
11:45:15
Кстати, прием и передача происходит одновременно всегда
Serg
26.05.2017
11:46:00
Примера на прерываних не нашел
Дмитрий
26.05.2017
11:46:04
какую библиотеку используете Cube или SPL? Какой МК?
Serg
26.05.2017
11:46:14
SPL, STM32F2
Andrey
26.05.2017
11:55:13
Поищи еще библиотеки от Tilen Majerle
Google
Andrey
26.05.2017
11:55:20
Там ваще толковые примеры
Я на них учусь
Дмитрий
26.05.2017
11:58:01
Есть из Челябинска? Надо сделать заказ в Элитане, а сумма заказа не большая. Кто-нибудь хочет присоедениться?
Ruslan
26.05.2017
11:58:41
там разве есть минимум?
Дмитрий
26.05.2017
11:59:02
SPL, STM32F2
STM32F2xx_StdPeriph_Lib_V1.1.0/Project/STM32F2xx_StdPeriph_Examples/SPI/SPI_TwoBoards/DataExchangeInterrupt/