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

adnega

Свой
  • Постов

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

  • Посещение

  • Победитель дней

    3

Сообщения, опубликованные adnega


  1. К сожалению с STM32f2xx не знаком - боюсь увести в неверном направлении.

    Насколько я понимаю у Вас не передается самый первый пакет?

    В некоторых случаях проще повторить попытку передачи. Например, в uIP зачем-то посылается два пакета в сеть вместо одного.

    Если есть осциллограф, то можно посмотреть ногу ETH_TXEN на наличие импульса отправки "неприходящего" пакета.

     

  2. Совершенно верно. Запрос не виден. Причем обратный запрос от компа и ответ на него замечательно видны и обрабатываются на ура. В принципе мне это не сильно мешает. Планируется устройство UDP сервер. Просто непонятный камушек не хочется оставлять.

    Erratу для STM32 по поводу Ethernet-MAC читали? Ваш случай?

  3. я же писал - R2 увеличьте до 100К, а внутренний пуллап отключите. Или возьмите R1 1..2K, тогда и с пуллапом будет нормально.

    Просто по вашей схеме от R1=1 Ом толку мало - он не защитит от помех. Нужно минимум 1К.сейчас уже 0.7В. Кроме того есть диоды Шоттки с падением 0.3..0.4В

    Схему предложил я, поэтому повторюсь:

    - роль R1 - предохранитель. Если его исключить, то гореть в случае чего будут дорожки. Если его увеличить, то упадет ток короткого замыкания;

    - роль R2 - создать ток в нагрузке (в нашем случае в кнопке). Нормальным током можно считать около 10мА -> R2 = 12В / 10мА = 1.2 кОм;

    - принцип работы такой: источником тока создается падение напряжения в нагрузке, отмасштабированное значение подается в схему (с настолько большим входным сопротивлением, что оно не оказывает влияние на измерения). На входе защита от перенапряжений с обязательным предохранителем. Дополнительные конденсаторы защитят от микро- и нано- секундных выбросов. Длительные воздействия с высокой энергией приведут к выгоранию R1 (работает R1 и защитный диод). Микросекундные помехи давятся защитным диодом, индуктивностью проводов. Наносекундные делителем напряжения и керамическими конденсаторами. С грамотной разводкой схема практически неубиваемая. Единственное добавил бы предохранитель и в "нижний" провод кнопки.

  4. Я просто смотрю и вижу что слишком уж много багов и неясностей в этом стм32ф4, а в случае с Атмелом все просто и проблем куда меньше, хоть и он слабее по скорости.

     

    А какие-такие баги и неясности есть в STM32F4? Просто сам сейчас буду ими плотно заниматься. Переход с F1 прошел успешно: DMA, SPI, TIMER, ETHERNET, UART, GPIO, ADC функционируют в рамках желаемого и ожидаемого. FPU пока не нужно, поэтому не трогал. Стандартной библиотекой не пользуюсь, пописываю свой файл с define.

     

    Да, у STM32F есть определенные неудобства: "местная" 16-битность и неудачный remap альтернативных функций. Но в свежих реализациях над этим работают) Разочаровало, что SPI 8/16 бит, а для одной задачи хотелось бы 9. В новых CM0, вроде, будет насраиваемый в диапазоне.

     

    Основным критерием выбора, мне кажется нужно рассматривать предыдущий опыт. Раньше я, например, разрабатывал на NXP LPC23xx (ARM7), потом легко перешел на LPC17xx (CM3), но... в линейке LPC17xx не оказалось изделия с числом ног меньше 100. В отличии от STM32F1xx. Начал использовать их. И поверьте, сейчас с STM32F очень не просто будет перейти на что-то другое: не в техническом плане, а в плане, что сложно найти альтернативу линейке STM32F для моих задач. Некоторое время назад у NXP появились камни с CAN-Phy на борту... до сих пор лежат в ящике и ждут своего звездного часа(

     

    Если пугают неясности, то этот форум как раз то место, где их нужно "разоблачать". Вероятно, сейчас не так много информации по F4, но в будущем опыт применения возрастет, и данные появятся.

     

    PS. Я бы охотно поучаствовал в темах о F4, особенно, когда речь заходит о "багах и неясностях".

    PS2. О SAM ничего сказать не могу, т.к. не использовал. Продукцией Atmel долгое время пользовался и пользуюсь до сих пор (на уровне Tiny13 ... Mega8).

  5. Меня смущают две вещи.

    1 - Грязное питание должно быть весьма стабильным. Я планировал поставить стабилизатор который позволит использовать любой блок питания от пяти до тридцати вольт.

    2 - ножка будет замыкаться на землю через 10К. Насколько я помню - у MSP ножки подтягиваются к питанию через 20К (внутри чипа). В этом случае ножка будет получить один вольт при нажатии кнопки, и этого может быть недостаточно.

     

    Если первую проблему можно решить с помощью стабилитрона, то вторая проблема серьезнее.

     

    Не понял зачем нужна высокая стабильность грязного питания? При любом грязном питании от 6В и выше на кнопку пойдут только 6В, граниченных SMBJ6.0CA.

    Делитель не обязательно должен быть с высоким полным сопротивлением. Что будет, если уменьшить номиналы резисторов в делителе раз в 10?

  6. Я бы осмелился предположить, что речь идет об "убийстве двух зайцев":

    1. Не спалить порт микросхемы;

    2. Не реагировать на помехи.

     

    Второго "зайца" можно и нужно победить программно - защитой от дребезга (она у Вас скорее всего уже есть).

    Убить первого (и окончательно не оставить шансов второму) можно только схемотехнически. Но тут уже все зависит от степени "фанатизма".

    - два диода и резистор смогут защитить вывод микросхемы (но я лично такую схему не использую, т.к. по-моему нужно еще что-то, что ограничит рост VCC в случае сильной помехи. наверное какой-нить стабилитрон в цепи питания...);

    - для детекции "нажато/отпущено" чаще всего я делаю так: на входе резистор на 1 Ом, затем SMBJ6.0A на землю, и 1 кОм на +5В, паралельно защитному диоду керамика 100 нФ, затем резистивный делитель и на входную ногу микросхемы (опционально стабилитрон на 3.3В, керамика 100 нФ). Суть: дать на кнопку порядочный ток, и измерять падение напряжения. Обязательно нужно "слабое звено" - резистор на 1 Ом, который перегорает, если что не так. Вместо "закачивалки тока" в виде 1 кОм на +5В, в особо ответственных решениях можно использовать источник постоянного тока на LM317 и поднять выходное напряжение (на холостом ходу).

    - вариант с трансформатором и изменением нагрузки на том конце. Самый подходящий, если провод выходит из квартиры, а к звонку подключено еще что-нить "ценное" (в моем случае весь "умный дом"). Случайное или преднамеренное воздействие на выходящие провода погубит только трансформатор...

  7. незнаю, это правда что в этих чипах аппаратный глюк есть на модуле i2c?

    Кто нибудь сдесь использовал данный чип с i2c? как его запустить (без использования этой стандартной библиотеки) ?

     

    Работает.

     

        RCC->APB1ENR = (1 << RCC_APB1_I2C1);
        RCC->APB2ENR = (1 << RCC_APB2_SYSCFG);
        RCC->AHB1ENR = (1 << RCC_AHB1_PORTB);
        GPIOB->MODER =
              (GPIO_MODE_ALTERNATE    << GPIO_MODER_PIN8)
            | (GPIO_MODE_ALTERNATE    << GPIO_MODER_PIN9);
        GPIOB->AFR[1] =
                (AF_PB8_I2C1_SCL    << GPIO_AFR1_PIN8)
            |    (AF_PB9_I2C1_SDA    << GPIO_AFR1_PIN9);
    
        GPIOB->OTYPER = (1 << 8) | (1 << 9);
    
        I2C1->CR1 = (0 << I2C_CR1_PE);
        I2C1->CR2 =
              (I2C_FREQ_42MHZ << I2C_CR2_FREQ)
            | (1 << I2C_CR2_ITEVTEN);
        I2C1->CCR = I2C_FREQ_42MHZ * 1000000 / 2 / I2C_SPD;
        I2C1->CR1 = (1 << I2C_CR1_PE);
    
        // start
        con_str("[START]");
        I2C1->CR1 |= (1 << I2C_CR1_START);
        while((I2C1->SR1 & (1 << I2C_SR1_SB)) == 0);
    
        // devsel
        con_str("[DEVSEL]");
        I2C1->SR1;
        I2C1->DR = 0xA0;
        while((I2C1->SR1 & (1 << I2C_SR1_ADDR)) == 0);
        I2C1->SR1;
        I2C1->SR2;
        con_str("[DOK]");
    
        // wr-addrh
        while((I2C1->SR1 & (1 << I2C_SR1_TXE)) == 0);
        con_str("[WR ");
        con_byte(0x00);
        con_str("]");
        I2C1->DR = 0x00;
    
        // wr-addrl
        while((I2C1->SR1 & (1 << I2C_SR1_TXE)) == 0);
        con_str("[WR ");
        con_byte(0x00);
        con_str("]");
        I2C1->DR = 0x00;
    
        // r-start
        con_str("[R-START]");
        I2C1->CR1 |= (1 << I2C_CR1_START);
        while((I2C1->SR1 & (1 << I2C_SR1_SB)) == 0);
    
        // devsel
        con_str("[DEVSEL]");
        I2C1->SR1;
        I2C1->DR = 0xA1;
        while((I2C1->SR1 & (1 << I2C_SR1_ADDR)) == 0);
        I2C1->CR1 |= (1 << I2C_CR1_ACK);
        I2C1->SR1;
        I2C1->SR2;
        con_str("[DOK]");
    
        // rd
        while((I2C1->SR1 & (1 << I2C_SR1_RXNE)) == 0);
        I2C1->CR1 &= ~(1 << I2C_CR1_ACK);
        con_str("[RD ");
        con_byte(I2C1->DR);
        con_str("]");
    
        // rd
        while((I2C1->SR1 & (1 << I2C_SR1_RXNE)) == 0);
        con_str("[RD ");
        con_byte(I2C1->DR);
        con_str("]");
    
        // stop
        while((I2C1->SR1 & (1 << I2C_SR1_TXE)) == 0);
        con_str("[STOP]");
        I2C1->CR1 |= (1 << I2C_CR1_STOP);

     

    // Alternate Function pin connection for I2C1, SPI2
    ((GPIO_TypeDef *)(GPIOB_BASE))->AFR[1] |=
    ((5 << ((13 - 8) << 2)) | // SPI2 SCK, AF5
    (5 << ((15 - 8) << 2)) | // SPI2 MOSI, AF5
    (5 << ((8 - 8) << 2)) | // I2C1 SCL, AF4
    (5 << ((9 - 8) << 2)) ); // I2C1 SDA, AF4

     

    Для I2C AF=4, а не 5!

    post-27702-1344083221_thumb.png

  8. Еще вопрос

     

    Пытаюсь запустить обмен по шине на прерываниях. Так вот не пойму, у них прерывание по Start bit send работает в принципе?

    То есть выставляю в I2C1->CR1 бит I2C_CR_START. По идее, после генерации старта на шине я должен попасть в прерывание I2C1_EV_IRQHandler() и там увидеть выставленный фдаг SB в SR1, однако, в прерывание не попадаю. Или я что то не так понял?

     

    Другие прерывания вроде работают (например ADDR TxE).

    Прерывания разрешены, переферия затактирована...

     

    Резисторы подтягивающие в наличии?

    Линии SDA и SCL в норме?

  9. по моему проще купить stm8S discovery и залить в него Versaloon.

     

    Как из исходников собрать прошивку? Собрал Nano release не работает вообще никак. Собрал под stm8S discovery по USB программатор видно а не работает. Нашел уже скомпиленную прошивку заработало, т.е. дело не в железе.

    правлю параметр HW_BOARD затем make, может еще что-нибудь надо? Есть платы для нано, прошивку через всроенный бут загружал.

     

    - в makefile добавил компилляцию ADC.c

    - в syscall.c все закомментировал

    - убедился что в Дискавери стоит кварц на 8МГц, а в стандартном Версалуне на 12МГц

    - собрал bootloader и не забыл про юзерскую кнопочку, при помощи которой входить в загрузчик.

    В камнях, где на нее не хватает ног, она постоянно сидить в нуле и каждый раз стартует загрузчик, а не приложение.

     

    по моему проще купить stm8S discovery и залить в него Versaloon.

     

    Проще, но идеал: когда есть COM-порт, транслирующийся по USB...

  10. У меня работает в режиме Мастер при такой конфигурации.

    Правда, без использования стандартной библиотеки.

     

    //-----------------------------------------------------------------------------
    //    void init_SPI2(void)
    //-----------------------------------------------------------------------------
    void init_SPI2(void)
    {
        SPI2->CR1 =
                SPI_CR1_SSM
            | SPI_CR1_SSI
            | SPI_CR1_MSTR
            | SPI_CR1_BR_2 | SPI_CR1_BR_1 | SPI_CR1_BR_0;
    
        SPI2->CR2 =
                SPI_CR2_SSOE;
    
        SPI2->CR1 =
                SPI_CR1_SPE
            | SPI_CR1_SSM
            | SPI_CR1_SSI
            | SPI_CR1_MSTR
            | SPI_CR1_BR_2 | SPI_CR1_BR_1 | SPI_CR1_BR_0;
    }
    
    //-----------------------------------------------------------------------------
    //    void __inline init_SYSTEM(void)
    //-----------------------------------------------------------------------------
    void __inline init_SYSTEM(void)
    {
        RCC->AHB1ENR = RCC_AHB1ENR_GPIOBEN;
        RCC->APB1ENR = RCC_APB1ENR_SPI2EN;
    }
    
    //-----------------------------------------------------------------------------
    //    void __inline init_GPIO(void)
    //-----------------------------------------------------------------------------
    void __inline init_GPIO(void)
    {
        GPIOB->MODER = GPIO_MODER_MODER13_1  | GPIO_MODER_MODER14_1  | GPIO_MODER_MODER15_1
        GPIOB->AFR[1] = (5 << ((13 - 8) << 2)) | (5 << ((14 - 8) << 2)) | (5 << ((15 - 8) << 2));
    }

  11. Собирал прошивку versaloon для дармового программатора stlink. (В составе STM32LDiscovery). Работает =)

     

    У Discovery, к сожалению, нет RS232 (((

    Да, и переход на Versaloon необратим.

     

     

    Кстати, отладка через OpenOCD для Versaloon работает!

     

    Запускаю отладку по SWD так:

     

    openocd -f tcl/interface/vsllink_swd.cfg -f tcl/target/stm32f1x.cfg

    openocd_versaloon.zip

  12. выложите рабочие прошивки. Я заливал в STM32F103C8, но так и не завелся

     

    Прошивки в папке HEX. Инструкция, как прошить в файле readme.txt

    Прошивка в два этапа:

    - сначала заливаем Versaloon_GCC_xxx с адреса 0x2000;

    - затем дошиваем bootloader.bin c нулевого адреса.

     

    Драйвера в папке driver.

     

    Консольная программа для прошивки в папке vsprog.

     

    Прошу попробовать))

    versaloon_win_v1.zip

  13. На днях собрал себе т.н. Versaloon MiniRelease1 (см. www.versaloon.com).

    Собрано на STM32F103RC (64 ноги), но можно и на STM32F103C8 (48 ног).

    Шьет и STM32 и AVR8 (проверил), причем очень быстро!

    Подключается по USB: в системе появляется сам программатор и дополнительный COM-порт (который на стороне программатора - реальный и можно использовать для своих нужд).

    Шью через vsprog (консоль).

    Грят, можно через OpenOCD отлаживаться, но пока не пробовал.

     

    Интересно?

     

    Могу поделисться дополнительной информацией (схема, прошивка, vsprog и т.п.).

    На сайте есть все исходники, но у меня без бубна не обошлось.

     

    +

    Добавлю: работает и под Windows и под Linux.

  14. Похоже на утечку памяти. Попробуйте мониторить свободную память кучи.

     

    Если увеличение стеков и т.п. не изменяет количественно ситуацию (время до "падения"), то осмелюсь предположить, что дело в приоритетах прерываний... По личному опыту: "FreeRTOS", "HardFault" и "приоритеты прерываний" часто "соображают на троих"...

  15. А с приоритетами прерываний раобрались? Все грабли, которые я когда-либо собирал во FreeRTOS были из-за

      NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
    и
      NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority    = (uint8_t)(configKERNEL_INTERRUPT_PRIORITY >> 4);

    .

    Точнее, из-за их отсутствия.

  16. Здравствуйте. Спасибо за комментарий.

    Не нашёл ногу V33, питал и от VDD и от Ext_3V.

    Вы мне подсказали хорошее направление для проверки, попробую от 5 вольт запитать, темболее ножки SPI толерантны к 5.

    смущает конечно то что на cs осцил перестал видеть импульсы и то что от VDD и от Ext_3V пару месяцев всё работало.

    А у меня SD-карта отказывалась работать от 5В! (давно это было)

     

  17. Вот интересно, а вопрошающие сами сертифицированы на этот самый ISO? Или разрабатывать платы можно как попало, а изготавливать извольте "по самым высоким требованиям стандарта"....

    Не нужно впадать в крайности)

    Разрабатывать платы нужно качественно.

    Производить тоже нужно качественно. Правило такое есть: "не принимай брак, не производи брак, не передавай брак".

    Сертифицированный орган не должен допустить брак по чей бы то ни было вине.

    Но... у Резонита ISO, похоже, только на материалы(

     

    И еще: наказание всегда долно быть соразмерно приступлению.

    Это не правильно, когда нелепая ошибка (которую можно исправить за 5 минут) приводит к срывам сроков, нервам и дополнительным деньгам. Кто-то думает иначе?

×
×
  • Создать...