Перейти к содержанию

Integro

Свой
  • Публикаций

    179
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о Integro

  • Звание
    Частый гость
  • День рождения 13.04.1988

Контакты

  • Сайт
    http://
  • ICQ
    0

Информация

  • Город
    Минск

Старые поля

  • skype
    deniska_igorevich
  • Vkontakte
    http://vk.com/krasutski_denis
  • LinkedIn
    https://www.linkedin.com/in/denis-krasutski-721865104/
  1. PIC32MZ - Проблемы. I2C

    Да, согласен все ОК! Тогда предлагаю добавить проверку TBF, как-то так: ... I2C1TRN = pcfByte; while(I2C1STATbits.TBF); //wait for data transmission while(I2C1STATbits.TRSTAT) { ; } // wait for the transmission to finish if(!I2C1STATbits.ACKSTAT) { // if this is high, slave has not acknowledged ...
  2. PIC32MZ - Проблемы. I2C

    Исходя из фразы "Работает не стабильно" я бы сказал что проблема в коммуникации: частота не верная, длинные связи или подтягивающие резаки "большие". Больше деталей! Сколько слейвов,один? Кто это? Как это подключено? Частоту проверяли? Как запитано?
  3. STM32F107+WiFi по Ethernet

    Опять, это для проводов, WiFi модуля будут работать c 22Mb или 54Mb. И согласен, для stm32f1 это много!
  4. STM32F107+WiFi по Ethernet

    Так в Почему однозначно, может ТС вообще не нужен ethernet, мне кажется что тут проблема с терминологией) И да, не сказано в каком режиме должен работать WiFi, AP или STA?
  5. STM32F107+WiFi по Ethernet

    Во первых, парни, давайте не путать! Ethernet это набор стандартов описывающий канальный уровень и формат пакетов. Ethernet это провода! WiFi это беспроводной интерфейс, это другие стандарты (IEEE 802.11) По этому вопрос звучит не однозначно. Если Вам нужно просто подключить WiFi модуль к STM32, то проблем нет, выбираем модуль с необходимым интерфейсом обычно используют MDIO, SPI или UART зависит от модуля, на 107 камне SDIO вроде нет, нужно искать модуль с SPI и UART Но если Вам нужен Ethernet и WiFi в этом случае нужно поддержка интерфейсов MII, RMII или GMII(интерфейсы подключения PHY) для обеспечения работы Ethernet и отдельно подключить WiFi как описано выше. Маршрутизацию пакетов при необходимости нужно делать софтово, но это будет медленно на таком камне. По этому для начала предлагаю уточнить, Вам нужен: Ethernet либо WiFi или Ethernet + WiFi? *Существуют ethernet модули работающие по SPI даже с TCP стеком, но это отдельная история :)
  6. да, GCC так же бы отреагировал, но он бы пояснил что uint32_t это long unsigned int Edit: хотя нет, в данном случае он так бы и предупредил что не совместимые типы
  7. Прототипы COM_Start, COM_Stop соответствуют? Какие там? Покажите!
  8. Странная проблема при оптимизации

    Про статическую функцию я писал, Вы видимо, не заметили! Вот этот код не скомпилируется С компилятором: struct Typ { static int member; };
  9. Странная проблема при оптимизации

    Тут речи про классы и плюсы небыло, я про чистый С. Повторюсь, три случая: 1. static void _local_func(void); // функция видна в рамках обьектника 2. static my_type_t _local_common_variable = 0; // переменна видна в рамках обьектника 3. static uint32_t call_counter = 0; // Переменная в функции Или есть еще какие варианты? я про чистый си. Если можите развернуто ответить про CPP, рад послушать про статические члены структур (но не классов).
  10. Странная проблема при оптимизации

    Вот не совсем понял, используете ли Вы volatile, возможно да, но позвольте расставить точки... int flag = 0; void ISR(void) { flag = 1; } void RX_Func(void) { if (flag) { flag = 0; //do something } } Вот это пример того где переменная flag должна использоваться с volatile. Без volatile действия будут происходить примерно так: Оптимизатор, увидит что функцию ISR() никто не вызывает и решит что переменную flag можно оставить в инициализированном значении, потом смотрит, а там if а значение не меняется, ну и выкасит весь или одну из частей if/else если оно есть. Если Вы используете volatile, оптимизатор просто не анализирует данную переменную и оставляет все как есть. И самое главное правило при работе с оптимизацией: Не пытайся предугадать что сделает оптимизатор! Поэтому выше описанный алгоритм это только мои фантазии, как себя поведет оптимизация никто не знает :) , но что делает ключевое слово volatile Вы сможете найти в стандарте С. Теперь про static, разберитесь для чего это ключевое слово и не подставляйте его бездумно, хотя бы постесняйтесь писать нам об этом)! Это не проффесионально! Если на пальцах: Есть всего три варианта использования static, два из них ограничить область видимости функции либо глобальной переменной, рамками одного объектного файла Третий вариант использования говорит о том, что локальная переменная располагается не на стеке и инициализируется единожды! Теперь по поводу заявок на то что не работает оптимизация. В 99.999% это не плохой компилятор, это ошибки в коде! И в данном случае чтобы помочь нам, найти вам проблему, нужен весь листинг этого случая!
  11. STM32F429 Discovery / uGFX

    Везде критично! 100MHz это не мало, но и это не 300MHz! Нужно считать, но лень, на вскидку могу сказать что разброс между мин-макс допустим в пару десятков мм, но могу ошибаться. Мало входных данных :), но я бы залил. И понятно, если есть какой RF тракт, это нужно делать с пониманием.
  12. STM32F429 Discovery / uGFX

    нет, выше писали про burst mode, он сломается. Либо нужно это обдуманно делать и соответсвенно распологать данные... но проще петлю сделать :)))
  13. STM32F429 Discovery / uGFX

    Ради интереса решил разобраться как влияет ширина шины и выходной формат на ST'шных контроллерах... Открываю интернет, а там уже все посчитано :biggrin: Оригинал
  14. Если простыми словами, NB-IoT это тот же GSM только без голоса и только SMS. Что подходит для редкого опроса датчиков с малым кол-вом данных, как например, Вы и сказали счетчики воды. 10 лет это конечно громко сказано но реальность, все зависит от интенсивности передачи и емкости батареи. Токи передачи, от 50 до 200мА, зависит от модема и выходной мощности. Токи сна микроамперы. Для примера, токи можно посмотреть на модеме ublox https://www.u-blox.com/sites/default/files/...15025564%29.pdf Изучал вопрос год назад, тогда было доступно 3 производителя, сейчас двух других не назову, но думаю за год рынок таких модемов вырос. В Беларуси, NB-IoT первым стал поддерживать оператор "Velcom" в декабре 2017, поэтому думаю что в России эта технология уже давно в ходу.
  15. Вам нужно посмотреть на примеры реализации механизма callback. Вкратце, реализовываете функцию для настройки таймера в one shot режиме и в прерывании таймера (через n us) вызываете необходимый вам callback static void (*_cb)(void) = NULL; void TIMERn_Handler(void) { // TODO: Clear timer status or stop if neccesary if( _cb ) { _cb(); } } void setup_timer(uint32_t delay_us, void *callback ) { _cb = callback ; //TODO: configure hardware timer } Далее, набрасываем функции которые будут вызываться последовательно: static void _save_t1(void); static void _reset(void); void start(void) { Switch_Out(); setup_timer(480, _reset); } static void _reset(void) { Switch_In(); setup_timer(80, _save_t1); } static void _save_t1(void) { Ack[0]=T1; //TODO ... if(Ack[0] == 1) { setup_timer(80, _something1); } else { setup_timer(10, _something2); } } Думаю суть ясна, для начала транзакиции нужно вызвать start(), а дальше все пойдет по реализованной вами цепочке. Если таких "прижков" выйдет много, локаничней релизовать таблицы для "линейных участков": static struct { uinr32_t delay_us; void *next_cb; }_chain_init[] = { {.delay_ms = 480, .next_cb = _reset}, {.delay_ms = 80, .next_cb = _save_t1}, }; Пользовать это можно так: index++; setup_timer(_chain_init[index].delay_ms , _chain_init[index].next_cb); Ну и понятно функция setup_timer, должны бать быстрой, что бы не поплыли микросекундные тайминги. Код писал без проверки компиляции, так что извиняйте за описки.