Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту


 
Опции темы

stm32 HAL UART - не могу понять

Непрочитано 14.11.2016, 17:12  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: stm32 HAL UART - не могу понять

Сообщение от индюк Посмотреть сообщение
а не приходит на ум
Канэшна нэт! Не все же индюки!
Сообщение от индюк Посмотреть сообщение
я могу и не читать регистр например
Бред! Тогда к чему вся эта галиматья со сбросом флага?
Сообщение от индюк Посмотреть сообщение
мошт у меня оладка идет и я вместо чтения регистра смотрю заходит у меня прога в прерывание
Опять бред! А прерывание тут к чему?
Сообщение от индюк Посмотреть сообщение
ставлю маркер вот такой
Снова бред! Никто в здравомыслии портом не дёргает! Может с комбикормом что-то не так, в смысле в консерватории?
Реклама:
STM32F0 вне форума  
Непрочитано 14.11.2016, 17:36  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: stm32 HAL UART - не могу понять

Сообщение от индюк Посмотреть сообщение
а не приходит на ум что я могу и не читать регистр например?
Жалкая попытка вылезть сухим из воды?
Нет уж, спалился так по полной, читать документацию не любишь...
__________________
Осторожно , злой кот
dosikus вне форума  
Непрочитано 14.11.2016, 17:41  
индюк
Гуру портала
 
Аватар для индюк
 
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 11,117
Сказал спасибо: 202
Сказали Спасибо 3,281 раз(а) в 2,148 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: stm32 HAL UART - не могу понять

Сообщение от dosikus Посмотреть сообщение
читать документацию не любишь...
да канешна ага)) чтоб не полдьзоваться спл и халом все сраницы порчитал а тут два предложения не рядом не прочитал.

да и вообще - пока что зависает тут не у меня из года в год.
у меня то гпс парсит на ура
__________________
кагмаподэ магмаподэ

Последний раз редактировалось индюк; 14.11.2016 в 17:44.
индюк вне форума  
Непрочитано 14.11.2016, 17:43  
индюк
Гуру портала
 
Аватар для индюк
 
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 11,117
Сказал спасибо: 202
Сказали Спасибо 3,281 раз(а) в 2,148 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: stm32 HAL UART - не могу понять

STM32F0,
дядь - с такого песни то поешь свои галимые?
горшочек для кака подарить?
а то я смотрю ты усрался уже писанину тут писать и ей же радоваться
__________________
кагмаподэ магмаподэ
индюк вне форума  
Непрочитано 14.11.2016, 17:55  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: stm32 HAL UART - не могу понять

Сообщение от индюк Посмотреть сообщение
писанину тут писать
Та ладно, ты же не в курятнике. Вот объясни, попробуй, нахрена ты портом дёргаешь? У тя чё, 64386 портов на МК? Нахрена ты сбрасываешь флаг, если данные один хрен не читаешь? И что, прерывание в любом случае спасает твою грешную душу? ИМХО, ты уже путаешься в показаниях.
STM32F0 вне форума  
Непрочитано 14.11.2016, 17:57  
STM32F0
Заблокирован
 
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
STM32F0 на пути к лучшему
По умолчанию Re: stm32 HAL UART - не могу понять

Сообщение от индюк Посмотреть сообщение
у меня то гпс парсит на ура
Угу! Помним! "ПисАл не я, я только разместил объяву!"(с). "Я памятник воздвиг себе нерукотворный, я крышу крыл, сей труд мой благородный!"(с).
STM32F0 вне форума  
Непрочитано 14.11.2016, 18:02  
индюк
Гуру портала
 
Аватар для индюк
 
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 11,117
Сказал спасибо: 202
Сказали Спасибо 3,281 раз(а) в 2,148 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: stm32 HAL UART - не могу понять

Сообщение от STM32F0 Посмотреть сообщение
Та ладно, ты же не в курятнике. Вот объясни, попробуй, нахрена ты портом дёргаешь? У тя чё, 64386 портов на МК? Нахрена ты сбрасываешь флаг, если данные один хрен не читаешь? И что, прерывание в любом случае спасает твою грешную душу? ИМХО, ты уже путаешься в показаниях.
мне нет смысла комуто чото объяснять, ибо я ничего не спрашиваю.
среди таких как ты это породит еще больший ниочемный шквал гавна.
я просто работаю как мне удобно. у меня все работает.
ВСЁ!
__________________
кагмаподэ магмаподэ
индюк вне форума  
Непрочитано 14.11.2016, 19:14  
Ioann_II
Временная регистрация
 
Регистрация: 30.05.2005
Сообщений: 53
Сказал спасибо: 1
Сказали Спасибо 15 раз(а) в 11 сообщении(ях)
Ioann_II на пути к лучшему
По умолчанию Re: stm32 HAL UART - не могу понять

Вот блин, какой переполох получился... Жаль...

По сабжу немного продвинулся. В обработчике чтения всё вроде нормально действует. Если строку слать назад в "блоковом" режиме, т.е. не через прерывание, то всё нормально. Если через прерывание, то.... то, о чём писал выше. Похоже, что обработка приёма конфликтует с обработкой передачи.... Хотя буфера-то разные - буду копать дальше.

dosikus,
Спасибо что ткнули носом в IDLE - немного почитал-разобрался вроде-бы. Но не очень подходит - во всяком случае от гипертерминала прерывание будет всё равно на каждый символ... а на пару 0x0d 0x0a скорее всего одно... С DMA заманчиво, если-бы была возможность на аппаратном уровне отслеживать поток и делать прерывание по совпадению... Кстати, о каких БОЛЕЕ СОВЕРШЕННЫХ ВОЗМОЖНОСТЯХ F0 вы упомянули?

И что Вы имели в виду
Цитата:
вы абсолютно не понимаете процесс, частично в этом виновна ваша любовь к авр , а в основном калокуб.
Ioann_II вне форума  
Непрочитано 14.11.2016, 19:36  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
dosikus на пути к лучшему
По умолчанию

В том-то и дело что не понимаете , иначе забросили бы калокуб подальше.
В F0 есть прерывание по таймауту и по определенному символу. К примеру модбас, размер пакета не может быть больше 256. Да и у ЖПС строки не особо раличны по длинн. Заряжаем. DMA на максимум, в прерывании тормозим канал DMA,
в счетчик DMA имеем размер пакета.
Плюсом идет аппаратный расчет CRC.

индюк, то есть из вредности ты так и оставишь лишнию очистку?
__________________
Осторожно , злой кот

Последний раз редактировалось dosikus; 15.11.2016 в 16:32.
dosikus вне форума  
Непрочитано 15.11.2016, 16:16  
Ioann_II
Временная регистрация
 
Регистрация: 30.05.2005
Сообщений: 53
Сказал спасибо: 1
Сказали Спасибо 15 раз(а) в 11 сообщении(ях)
Ioann_II на пути к лучшему
По умолчанию 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.
Ioann_II вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хочу собрать схемку, не могу понять что за транзисторы sobyninsk Электроника - это просто 10 27.09.2013 12:37
Помогите разобраться со схемой. я не могу понять что не так. sofist Источники питания и свет 17 15.11.2007 15:52
Ошибка ISP режима (ISP Mode Error) Не могу понять в чём дело zhan99999 Микроконтроллеры, АЦП, память и т.д 4 11.01.2007 02:21
[Решено] Всем эмбеддерам посвящается... Decan Отвлекитесь, эмбеддеры! 0 24.10.2005 14:43
Не могу понять про float в PicBasicPro Raushan Микроконтроллеры, АЦП, память и т.д 3 13.06.2005 13:57


Часовой пояс GMT +4, время: 07:04.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.