adnega
-
Постов
3 603 -
Зарегистрирован
-
Посещение
-
Победитель дней
3
Сообщения, опубликованные adnega
-
-
А настройка GPIO выполнена?
-
Документацию читали? По-умолчанию, частота 16МГц. Чтобы получить 168МГц нужно задействовать PLL.
-
Совершенно верно. Запрос не виден. Причем обратный запрос от компа и ответ на него замечательно видны и обрабатываются на ура. В принципе мне это не сильно мешает. Планируется устройство UDP сервер. Просто непонятный камушек не хочется оставлять.
Erratу для STM32 по поводу Ethernet-MAC читали? Ваш случай?
-
я же писал - R2 увеличьте до 100К, а внутренний пуллап отключите. Или возьмите R1 1..2K, тогда и с пуллапом будет нормально.
Просто по вашей схеме от R1=1 Ом толку мало - он не защитит от помех. Нужно минимум 1К.сейчас уже 0.7В. Кроме того есть диоды Шоттки с падением 0.3..0.4В
Схему предложил я, поэтому повторюсь:
- роль R1 - предохранитель. Если его исключить, то гореть в случае чего будут дорожки. Если его увеличить, то упадет ток короткого замыкания;
- роль R2 - создать ток в нагрузке (в нашем случае в кнопке). Нормальным током можно считать около 10мА -> R2 = 12В / 10мА = 1.2 кОм;
- принцип работы такой: источником тока создается падение напряжения в нагрузке, отмасштабированное значение подается в схему (с настолько большим входным сопротивлением, что оно не оказывает влияние на измерения). На входе защита от перенапряжений с обязательным предохранителем. Дополнительные конденсаторы защитят от микро- и нано- секундных выбросов. Длительные воздействия с высокой энергией приведут к выгоранию R1 (работает R1 и защитный диод). Микросекундные помехи давятся защитным диодом, индуктивностью проводов. Наносекундные делителем напряжения и керамическими конденсаторами. С грамотной разводкой схема практически неубиваемая. Единственное добавил бы предохранитель и в "нижний" провод кнопки.
-
Я просто смотрю и вижу что слишком уж много багов и неясностей в этом стм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).
-
Меня смущают две вещи.
1 - Грязное питание должно быть весьма стабильным. Я планировал поставить стабилизатор который позволит использовать любой блок питания от пяти до тридцати вольт.
2 - ножка будет замыкаться на землю через 10К. Насколько я помню - у MSP ножки подтягиваются к питанию через 20К (внутри чипа). В этом случае ножка будет получить один вольт при нажатии кнопки, и этого может быть недостаточно.
Если первую проблему можно решить с помощью стабилитрона, то вторая проблема серьезнее.
Не понял зачем нужна высокая стабильность грязного питания? При любом грязном питании от 6В и выше на кнопку пойдут только 6В, граниченных SMBJ6.0CA.
Делитель не обязательно должен быть с высоким полным сопротивлением. Что будет, если уменьшить номиналы резисторов в делителе раз в 10?
-
Я бы осмелился предположить, что речь идет об "убийстве двух зайцев":
1. Не спалить порт микросхемы;
2. Не реагировать на помехи.
Второго "зайца" можно и нужно победить программно - защитой от дребезга (она у Вас скорее всего уже есть).
Убить первого (и окончательно не оставить шансов второму) можно только схемотехнически. Но тут уже все зависит от степени "фанатизма".
- два диода и резистор смогут защитить вывод микросхемы (но я лично такую схему не использую, т.к. по-моему нужно еще что-то, что ограничит рост VCC в случае сильной помехи. наверное какой-нить стабилитрон в цепи питания...);
- для детекции "нажато/отпущено" чаще всего я делаю так: на входе резистор на 1 Ом, затем SMBJ6.0A на землю, и 1 кОм на +5В, паралельно защитному диоду керамика 100 нФ, затем резистивный делитель и на входную ногу микросхемы (опционально стабилитрон на 3.3В, керамика 100 нФ). Суть: дать на кнопку порядочный ток, и измерять падение напряжения. Обязательно нужно "слабое звено" - резистор на 1 Ом, который перегорает, если что не так. Вместо "закачивалки тока" в виде 1 кОм на +5В, в особо ответственных решениях можно использовать источник постоянного тока на LM317 и поднять выходное напряжение (на холостом ходу).
- вариант с трансформатором и изменением нагрузки на том конце. Самый подходящий, если провод выходит из квартиры, а к звонку подключено еще что-нить "ценное" (в моем случае весь "умный дом"). Случайное или преднамеренное воздействие на выходящие провода погубит только трансформатор...
-
незнаю, это правда что в этих чипах аппаратный глюк есть на модуле 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!
-
Настраивал прерывание "по пропаданию питания" и успевал записать во внутреннюю флеш-память событие о проподании питания. (правда, на STM32F1x). Так что "вырубание" питания можно корректно обработать...
-
Еще вопрос
Пытаюсь запустить обмен по шине на прерываниях. Так вот не пойму, у них прерывание по Start bit send работает в принципе?
То есть выставляю в I2C1->CR1 бит I2C_CR_START. По идее, после генерации старта на шине я должен попасть в прерывание I2C1_EV_IRQHandler() и там увидеть выставленный фдаг SB в SR1, однако, в прерывание не попадаю. Или я что то не так понял?
Другие прерывания вроде работают (например ADDR TxE).
Прерывания разрешены, переферия затактирована...
Резисторы подтягивающие в наличии?
Линии SDA и SCL в норме?
-
по моему проще купить stm8S discovery и залить в него Versaloon.
Как из исходников собрать прошивку? Собрал Nano release не работает вообще никак. Собрал под stm8S discovery по USB программатор видно а не работает. Нашел уже скомпиленную прошивку заработало, т.е. дело не в железе.
правлю параметр HW_BOARD затем make, может еще что-нибудь надо? Есть платы для нано, прошивку через всроенный бут загружал.
- в makefile добавил компилляцию ADC.c
- в syscall.c все закомментировал
- убедился что в Дискавери стоит кварц на 8МГц, а в стандартном Версалуне на 12МГц
- собрал bootloader и не забыл про юзерскую кнопочку, при помощи которой входить в загрузчик.
В камнях, где на нее не хватает ног, она постоянно сидить в нуле и каждый раз стартует загрузчик, а не приложение.
по моему проще купить stm8S discovery и залить в него Versaloon.Проще, но идеал: когда есть COM-порт, транслирующийся по USB...
-
У меня работает в режиме Мастер при такой конфигурации.
Правда, без использования стандартной библиотеки.
//----------------------------------------------------------------------------- // 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)); }
-
Вы забыли включить тактирование AFIO.
Для F4 это SYSCFGEN?
-
Может битик SYSCFGEN в RCC_APB2ENR взвести?
-
Собирал прошивку versaloon для дармового программатора stlink. (В составе STM32LDiscovery). Работает =)
У Discovery, к сожалению, нет RS232 (((
Да, и переход на Versaloon необратим.
Кстати, отладка через OpenOCD для Versaloon работает!
Запускаю отладку по SWD так:
openocd -f tcl/interface/vsllink_swd.cfg -f tcl/target/stm32f1x.cfg
-
Собрал прошивку под STM32F103T8, т.к. макетка была в наличии. Все работает)
-
выложите рабочие прошивки. Я заливал в STM32F103C8, но так и не завелся
Прошивки в папке HEX. Инструкция, как прошить в файле readme.txt
Прошивка в два этапа:
- сначала заливаем Versaloon_GCC_xxx с адреса 0x2000;
- затем дошиваем bootloader.bin c нулевого адреса.
Драйвера в папке driver.
Консольная программа для прошивки в папке vsprog.
Прошу попробовать))
-
На днях собрал себе т.н. Versaloon MiniRelease1 (см. www.versaloon.com).
Собрано на STM32F103RC (64 ноги), но можно и на STM32F103C8 (48 ног).
Шьет и STM32 и AVR8 (проверил), причем очень быстро!
Подключается по USB: в системе появляется сам программатор и дополнительный COM-порт (который на стороне программатора - реальный и можно использовать для своих нужд).
Шью через vsprog (консоль).
Грят, можно через OpenOCD отлаживаться, но пока не пробовал.
Интересно?
Могу поделисться дополнительной информацией (схема, прошивка, vsprog и т.п.).
На сайте есть все исходники, но у меня без бубна не обошлось.
+
Добавлю: работает и под Windows и под Linux.
-
В СИ не силён, но чтото мне это не нравится.
PORTD.0= (bin_digits[dig] >> i) & 1;
А так?
-
Похоже на утечку памяти. Попробуйте мониторить свободную память кучи.
Если увеличение стеков и т.п. не изменяет количественно ситуацию (время до "падения"), то осмелюсь предположить, что дело в приоритетах прерываний... По личному опыту: "FreeRTOS", "HardFault" и "приоритеты прерываний" часто "соображают на троих"...
-
А с приоритетами прерываний раобрались? Все грабли, которые я когда-либо собирал во FreeRTOS были из-за
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); и NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = (uint8_t)(configKERNEL_INTERRUPT_PRIORITY >> 4);
.
Точнее, из-за их отсутствия.
-
Поставил бы галочки рядом с "Windows XP" и "Mandriva Linux".
-
Здравствуйте. Спасибо за комментарий.
Не нашёл ногу V33, питал и от VDD и от Ext_3V.
Вы мне подсказали хорошее направление для проверки, попробую от 5 вольт запитать, темболее ножки SPI толерантны к 5.
смущает конечно то что на cs осцил перестал видеть импульсы и то что от VDD и от Ext_3V пару месяцев всё работало.
А у меня SD-карта отказывалась работать от 5В! (давно это было)
-
Вот интересно, а вопрошающие сами сертифицированы на этот самый ISO? Или разрабатывать платы можно как попало, а изготавливать извольте "по самым высоким требованиям стандарта"....
Не нужно впадать в крайности)
Разрабатывать платы нужно качественно.
Производить тоже нужно качественно. Правило такое есть: "не принимай брак, не производи брак, не передавай брак".
Сертифицированный орган не должен допустить брак по чей бы то ни было вине.
Но... у Резонита ISO, похоже, только на материалы(
И еще: наказание всегда долно быть соразмерно приступлению.
Это не правильно, когда нелепая ошибка (которую можно исправить за 5 минут) приводит к срывам сроков, нервам и дополнительным деньгам. Кто-то думает иначе?
STM32F207+LwIP+FREERTOS - ARP?
в ARM
Опубликовано · Пожаловаться
К сожалению с STM32f2xx не знаком - боюсь увести в неверном направлении.
Насколько я понимаю у Вас не передается самый первый пакет?
В некоторых случаях проще повторить попытку передачи. Например, в uIP зачем-то посылается два пакета в сеть вместо одного.
Если есть осциллограф, то можно посмотреть ногу ETH_TXEN на наличие импульса отправки "неприходящего" пакета.