14.11.2016, 17:12
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: stm32 HAL UART - не могу понять
Сообщение от индюк
|
а не приходит на ум
|
Канэшна нэт! Не все же индюки!
Сообщение от индюк
|
я могу и не читать регистр например
|
Бред! Тогда к чему вся эта галиматья со сбросом флага?
Сообщение от индюк
|
мошт у меня оладка идет и я вместо чтения регистра смотрю заходит у меня прога в прерывание
|
Опять бред! А прерывание тут к чему?
Сообщение от индюк
|
ставлю маркер вот такой
|
Снова бред! Никто в здравомыслии портом не дёргает! Может с комбикормом что-то не так, в смысле в консерватории?
|
|
|
|
14.11.2016, 17:36
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: stm32 HAL UART - не могу понять
Сообщение от индюк
|
а не приходит на ум что я могу и не читать регистр например?
|
Жалкая попытка вылезть сухим из воды?
Нет уж, спалился так по полной, читать документацию не любишь...
__________________
Осторожно , злой кот
|
|
|
|
14.11.2016, 17:41
|
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,662
Сказал спасибо: 185
Сказали Спасибо 3,183 раз(а) в 2,063 сообщении(ях)
|
Re: stm32 HAL UART - не могу понять
Сообщение от dosikus
|
читать документацию не любишь...
|
да канешна ага)) чтоб не полдьзоваться спл и халом все сраницы порчитал а тут два предложения не рядом не прочитал.
да и вообще - пока что зависает тут не у меня из года в год.
у меня то гпс парсит на ура
__________________
кагмаподэ магмаподэ
Последний раз редактировалось индюк; 14.11.2016 в 17:44.
|
|
|
|
14.11.2016, 17:43
|
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,662
Сказал спасибо: 185
Сказали Спасибо 3,183 раз(а) в 2,063 сообщении(ях)
|
Re: stm32 HAL UART - не могу понять
STM32F0,
дядь - с такого песни то поешь свои галимые?
горшочек для кака подарить?
а то я смотрю ты усрался уже писанину тут писать и ей же радоваться
__________________
кагмаподэ магмаподэ
|
|
|
|
14.11.2016, 17:55
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: stm32 HAL UART - не могу понять
Сообщение от индюк
|
писанину тут писать
|
Та ладно, ты же не в курятнике. Вот объясни, попробуй, нахрена ты портом дёргаешь? У тя чё, 64386 портов на МК? Нахрена ты сбрасываешь флаг, если данные один хрен не читаешь? И что, прерывание в любом случае спасает твою грешную душу? ИМХО, ты уже путаешься в показаниях.
|
|
|
|
14.11.2016, 17:57
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: stm32 HAL UART - не могу понять
Сообщение от индюк
|
у меня то гпс парсит на ура
|
Угу! Помним! "ПисАл не я, я только разместил объяву!"(с). "Я памятник воздвиг себе нерукотворный, я крышу крыл, сей труд мой благородный!"(с).
|
|
|
|
14.11.2016, 18:02
|
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,662
Сказал спасибо: 185
Сказали Спасибо 3,183 раз(а) в 2,063 сообщении(ях)
|
Re: stm32 HAL UART - не могу понять
Сообщение от STM32F0
|
Та ладно, ты же не в курятнике. Вот объясни, попробуй, нахрена ты портом дёргаешь? У тя чё, 64386 портов на МК? Нахрена ты сбрасываешь флаг, если данные один хрен не читаешь? И что, прерывание в любом случае спасает твою грешную душу? ИМХО, ты уже путаешься в показаниях.
|
мне нет смысла комуто чото объяснять, ибо я ничего не спрашиваю.
среди таких как ты это породит еще больший ниочемный шквал гавна.
я просто работаю как мне удобно. у меня все работает.
ВСЁ!
__________________
кагмаподэ магмаподэ
|
|
|
|
14.11.2016, 19:14
|
|
Временная регистрация
Регистрация: 30.05.2005
Сообщений: 53
Сказал спасибо: 1
Сказали Спасибо 15 раз(а) в 11 сообщении(ях)
|
Re: stm32 HAL UART - не могу понять
Вот блин, какой переполох получился... Жаль...
По сабжу немного продвинулся. В обработчике чтения всё вроде нормально действует. Если строку слать назад в "блоковом" режиме, т.е. не через прерывание, то всё нормально. Если через прерывание, то.... то, о чём писал выше. Похоже, что обработка приёма конфликтует с обработкой передачи.... Хотя буфера-то разные - буду копать дальше.
dosikus,
Спасибо что ткнули носом в IDLE - немного почитал-разобрался вроде-бы. Но не очень подходит - во всяком случае от гипертерминала прерывание будет всё равно на каждый символ... а на пару 0x0d 0x0a скорее всего одно... С DMA заманчиво, если-бы была возможность на аппаратном уровне отслеживать поток и делать прерывание по совпадению... Кстати, о каких БОЛЕЕ СОВЕРШЕННЫХ ВОЗМОЖНОСТЯХ F0 вы упомянули?
И что Вы имели в виду
Цитата:
|
вы абсолютно не понимаете процесс, частично в этом виновна ваша любовь к авр , а в основном калокуб.
|
|
|
|
|
14.11.2016, 19:36
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
В том-то и дело что не понимаете , иначе забросили бы калокуб подальше.
В F0 есть прерывание по таймауту и по определенному символу. К примеру модбас, размер пакета не может быть больше 256. Да и у ЖПС строки не особо раличны по длинн. Заряжаем. DMA на максимум, в прерывании тормозим канал DMA,
в счетчик DMA имеем размер пакета.
Плюсом идет аппаратный расчет CRC.
индюк, то есть из вредности ты так и оставишь лишнию очистку?
__________________
Осторожно , злой кот
Последний раз редактировалось dosikus; 15.11.2016 в 16:32.
|
|
|
|
15.11.2016, 16:16
|
|
Временная регистрация
Регистрация: 30.05.2005
Сообщений: 53
Сказал спасибо: 1
Сказали Спасибо 15 раз(а) в 11 сообщении(ях)
|
Re: stm32 HAL UART - не могу понять
И всё-таки. Делаю дополнительную проверку ("заплатка")
Вызов Callback должен быть, если в начале буфера нет 0.
При приёме первого символа 0x0d в конец строки должен попасть 0.
После этого указатель перемещается в начало и вызов Callback.
В Callback-е строка копируется (strncpy) в другой буфер.
При приёме следующего символа 0x0a в начало строки должен попасть 0.
Т.к. там 0, то Callback не должен быть вызван.
НО ОН ВЫЗЫВАЕТСЯ!!!!! ? ? ? И ЭТО ТОЛЬКО ЕСЛИ терминаторами назначить 0x0d или 0x0a если другие символы то ВСЁ НОРМАЛЬНО!!!
Dosikus, что я тут не понимаю? - Поясните мне уж.....
Вот код:
Код:
|
static HAL_StatusTypeDef UART_Receive_IT(UART_HandleTypeDef *huart)
{
uint16_t* tmp;
uint32_t tmp_state = 0;
uint16_t temp;
tmp_state = huart-›State;
if((tmp_state == HAL_UART_STATE_BUSY_RX) ||
(tmp_state == HAL_UART_STATE_BUSY_TX_RX))
{
// читаем символ из приёмника
temp = huart-›Instance-›DR;
// проверка на завершающий символ
// завершающий символ меняем на символ завершения строки
if(temp == huart-›Terminator1) temp = 0x00;
if(temp == huart-›Terminator2) temp = 0x00;
// та самая дополнительная проверка - в начале строки не
// должно быть завершающего кода 0x00
if((temp != 0x00) || (huart-›pRxBuffPtr != huart-›pRxBuffSave))
{
if(huart-›Init.WordLength == UART_WORDLENGTH_9B)
{
tmp = (uint16_t*) huart-›pRxBuffPtr;
if(huart-›Init.Parity == UART_PARITY_NONE)
{
*tmp = (uint16_t)(temp & (uint16_t)0x01FF);
huart-›pRxBuffPtr += 2;
}
else
{
*tmp = (uint16_t)(temp & (uint16_t)0x00FF);
huart-›pRxBuffPtr += 1;
}
}
else
{
if(huart-›Init.Parity == UART_PARITY_NONE)
{
*huart-›pRxBuffPtr++ = (uint8_t)(temp & (uint8_t)0x00FF);
}
else
{
*huart-›pRxBuffPtr++ = (uint8_t)(temp & (uint8_t)0x007F);
}
}
}
// теперь, если был завершающий символ, надо сбросить
// счётчик, указатель и вызвать Callback
if(temp == 0x00) huart-›pRxBuffPtr = huart-›pRxBuffSave,
huart-›RxXferCount = huart-›RxXferSize;
// HAL_UART_RxCpltCallback(huart);
// Callback Вызвать только если строка непустая
if((temp == 0x00) && (*huart-›pRxBuffSave !=0)) HAL_UART_RxCpltCallback(huart);
// проверка на заполнение буфера - при полном буфере
// указатель и счётчик сбросить, Callback не вызывать
if(--huart-›RxXferCount == 0) huart-›pRxBuffPtr = huart-›pRxBuffSave,
huart-›RxXferCount = huart-›RxXferSize;
return HAL_OK;
}
else
{
return HAL_BUSY;
}
} |
Последний раз редактировалось Ioann_II; 15.11.2016 в 18:30.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:17.
|
|