Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32 – вопросы – проблемы - решения.
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
xheli
не указал, RST подтянут резистором 100кОм к питанию, у житага только вывод RTCK резистором 100кОм на землю
scifi
Ну и нужно внимательно посмотреть, как подключены VDDA, VSSA, потому что от них запитывается PLL. Там желательно правильно разводить цепи, не забыть рекомендованный конденсатор 10 нФ.
KnightIgor
Цитата(xheli @ Feb 18 2012, 09:24) *
не указал, RST подтянут резистором 100кОм к питанию, у житага только вывод RTCK резистором 100кОм на землю

100кОм - много! На порядок уменьшить RST и на два порядка RTCK.
valera_o
Объясните пожалуйста, что происходит?
Запутался в том какие файлы надо обязательно подключать к проекту. Такое чувство, что наподключал лишнего, теперь не могу понять за какую веревочку дернуть, чтобы это узел развязался. Второй день втыкаю, не могу понять.
Состав проекта
Нажмите для просмотра прикрепленного файла

В симуляторе, после включения питания, в RCC CR появляются галки, что включен внутренний генератор, внешний и ФАПЧ. Откуда эти биты? В каком из подключенных файлов произошла такая инициализация? В дальнейшем не могу сбросить PLLON и HSEON, т.к. хочу тактировать от внутреннего генератора напрямую. Текст функции инициализации тактирования, на верхнем рисунке, первоначальный, потом пробовал писать в HSEON,PLLON и "0" и "1", стоят как вкопанные.

Нажмите для просмотра прикрепленного файла

Если можно объясните "на пальцах".
KnightIgor
Цитата(valera_o @ Feb 19 2012, 10:15) *
Объясните пожалуйста, что происходит?
Запутался в том какие файлы надо обязательно подключать к проекту. Такое чувство, что наподключал лишнего, теперь не могу понять за какую веревочку дернуть, чтобы это узел развязался. Второй день втыкаю, не могу понять.

Гляньте startup_xxx.s (ассемблер) файл:
Код
Reset_Handler   PROC
                EXPORT  Reset_Handler             [WEAK]
                IMPORT  __main
                IMPORT  SystemInit
                LDR     R0, =SystemInit
                BLX     R0              
                LDR     R0, =__main
                BX      R0
                ENDP

Сначала вызывается SystemInit, где генераторы настраиваются и запускаются, и лишь после этого идет переход на main().
Юрий_СВ
Цитата(valera_o @ Feb 19 2012, 12:15) *
Объясните пожалуйста, что происходит?
Запутался в том какие файлы надо обязательно подключать к проекту. Такое чувство, что наподключал лишнего, теперь не могу понять за какую веревочку дернуть, чтобы это узел развязался. Второй день втыкаю, не могу понять.

Из того, что вы показали - вы нигде не используете НИЧЕГО из StdPeriph_Lib. (Я тоже ей не пользуюсь)
Следовательно, ни один из её заголовочников вам не нужен.

Ещё замечание: то, что вы делаете с RCC->CFGR - чистые грабли (запись промежуточного значения).
Вы не может использовать RCC->CFGR как временный регистр. Это я про ваше и+или.
Хотя в вашем конкретном случае это не сказавается, т.к. промежуточное значение == конечному.

П.С.
Внешний генератор и синтезатор частоты не могут быть выключены пока не произойдёт переключение на RC.
valera_o
Вроде разобрался.
В файле system_stm32f10x.c закомментировал строку
#define SYSCLK_FREQ_72MHz 72000000
В симе сразу инициализировался CR 0x00000083. Прошил плату - заработало. Мегалка работает!!!
Спасибо за ответ!
Бум дальше разбираться.
С конфигурацией я понял, там значение и так 0.
В свойствах группы STM32F10x_StdPeriph_Lib убрал галку с Include in Target Build - компилится нормально. Потом удалил совсем - компилится.
valera_o
Вопрос по ЦАПу.
Выставил период срабатывания таймера 6, например 100мкс. Формирование каждой ступеньки треугольного сигнала происходит именно через эти 100мкс? Так же и с "белым" шумом?
Kavlav
Вопрос по правильному подключению VDDA и VSSA.
Если я не использую ADC и DAC,а использую PLL и POR достаточно ли подключить VDDA->VDD и VSSA->VSS?
Ведь это общее питание для аналогового домена. Или все таки нужно подключать через фильтр и VDDA и VSSA.
scifi
Цитата(valera_o @ Feb 20 2012, 20:34) *
Вопрос по ЦАПу.
Выставил период срабатывания таймера 6, например 100мкс. Формирование каждой ступеньки треугольного сигнала происходит именно через эти 100мкс? Так же и с "белым" шумом?

Да и да.

Цитата(Kavlav @ Feb 20 2012, 21:25) *
Вопрос по правильному подключению VDDA и VSSA.
Если я не использую ADC и DAC,а использую PLL и POR достаточно ли подключить VDDA->VDD и VSSA->VSS?
Ведь это общее питание для аналогового домена. Или все таки нужно подключать через фильтр и VDDA и VSSA.

Я не парюсь и просто соединяю VDDA->VDD и VSSA->VSS. В том числе в случаях, когда не требуется феноменальная точность АЦП/ЦАП. Ставлю рекомендованные ёмкости. У меня обычные условия: импульсный блок питания с пульсациями порядка 50 мВ. Проблем не было.
Теоретически можно себе представить, что в условиях зашумленного питания (шум с частотами порядка 100 МГц) будет сбоить PLL. Было ли такое у кого-либо на практике - интересный вопрос. От 100 МГц хорошо помогают ферритовые бусины. Кстати, видел их на схемах DEMO плат для фильтрации питания PLL, но у других МК.
uriy
Мне требуется отлавливать прерыания от GPIO как по фронту так и по спаду. Не нашел регистра из которого можно было бы узнать какое из этих событий произошло. Вижу способ только читать значение самого пина. Есть ли регистр в котором фиксируется событие?
KnightIgor
Цитата(uriy @ Feb 21 2012, 13:47) *
Мне требуется отлавливать прерыания от GPIO как по фронту так и по спаду. Не нашел регистра из которого можно было бы узнать какое из этих событий произошло. Вижу способ только читать значение самого пина. Есть ли регистр в котором фиксируется событие?

Нет.
ReRayne
Камень STM32F217
OS: FreeRTOS 7.0.1
LwIp: 1.3.4 Socket
Проблема в следующем: крутится прием данных по HTTP. Получив данные в статический буфер, LwIp закрывает сокет командой close.
В произвольный момент времени, внезапно, LwIP начинает принимать пакеты крайне не равномерно.
Кто-нибудь встречался?
mrcrook
поделитесь исходниками для работы с энкодером от мышки (колесико) желательно под stm32f4. С использованием таймеров в режиме " Encoder interface mode". Можно с описанием принципов работы, чтоб понятней было.
mrcrook
да читал я эту статью. во первых не работает функция PIN_CONFIGURATION() точнее ее вообще не находит, во вторых инициализация
Код
    RCC->APB1ENR = RCC_APB1ENR_TIM3EN;

    TIM2->CCMR1 = TIM_CCMR1_CC1S_0 | TIM_CCMR1_CC2S_0;
    TIM2->CCER = TIM_CCER_CC1P | TIM_CCER_CC2P;
    TIM2->SMCR = TIM_SMCR_SMS_0 | TIM_SMCR_SMS_1;
    TIM2->ARR = 100;
    TIM2->CR1 = TIM_CR1_CEN;
подправил на 3й таймер он поддерживает энкодер в stm32f4. компилятор ошибок не выдает но ничего не заводится.



p.s. ноги я естественно сконфигурировал RA6,7 соотв.
AHTOXA
Ну вы же не для красного словца просили "желательно с описанием принципов работы"? Описание там есть, всё объяснено. Или вам надо тупо скопипастить?
stas00n
Коллеги, подкажите по АЦП в STM32F100R (TQFP-64): насколько я понимаю что раз выводов для внешнего опорного Vref+, Vref- в этом корпусе нет, то опорное берется напрямую с VDDA/VSSA; тут на стр. 160 (табл. 57) сказано, что VDDA должно быть то ли равно VDD, то ли вообще они должны быть соединены. То есть даже нельзя сделать, например, VDD=3.3В, а VDDA=2.5В? Как в этом случае лучше отвязать аналог от цифры и подать опорное от прецизионного источника? Прошу прощения если уже обсуждалось.
scifi
Цитата(stas00n @ Feb 29 2012, 04:26) *
То есть даже нельзя сделать, например, VDD=3.3В, а VDDA=2.5В?

Нет, нельзя.

Цитата(stas00n @ Feb 29 2012, 04:26) *
Как в этом случае лучше отвязать аналог от цифры и подать опорное от прецизионного источника? Прошу прощения если уже обсуждалось.

Никак.
Можно попробовать выход источника опорного напряжения подать на VDDA, а на цифровую часть подать его же через буфер.
Естественно, в корпуче TQFP100 такой проблемы нет.
stas00n
Цитата(scifi @ Feb 29 2012, 04:09) *
Можно попробовать выход источника опорного напряжения подать на VDDA, а на цифровую часть подать его же через буфер.

А я думаю подать на цифровую часть например с простого стабилизатора вроде 78L033, а на аналоговую - с прецизионного типа REF3033; VDD и AVDD соединить через два встречно включенных диода, чтобы при включении сильно не перекашивало между этими питаниями. Так можно?
Сергей Борщ
QUOTE (stas00n @ Feb 29 2012, 06:50) *
Так можно?
Если REF3033 во время такого "перекоса" сможет вытянуть питание VDD, то можно.
vlad_new
STM32F101CB, STM32F101C8 - все же сколько и какие у него есть таймеры? По сегодняшней доке от st.com только T2,T3 и T4. По какой то объединенной доке 101-103 вроде как существуют T1 и T8. По сравнительной таблице от st.com только 3 таймера - не понятно каких. Вот ведь китайская грамота. Так все же ?
Aleksandr Baranov
TIM2, TIM3,TIM4

There are three synchronizable general-purpose timers embedded in the STM32F101xx
medium-density access line devices.
vlad_new
Хи. А я вот его живьем сейчас включил. На счет T8 пока не знаю, а вот T1 там работает. И кому верить - доке или живому камню. Или они его там просто заглушить забыли ? Бардак какой то.
VslavX
Цитата(vlad_new @ Feb 29 2012, 17:21) *
Хи. А я вот его живьем сейчас включил. На счет T8 пока не знаю, а вот T1 там работает. И кому верить - доке или живому камню. Или они его там просто заглушить забыли ? Бардак какой то.

Воистину с таймерами китайская грамота. Вот табличка моего составления:
CODE

//________________________________________________________________
//
// Timers, availability
//
// T1 T2-5 T6-7 T8 T9-11 T12-14 T15-17
// F100-low x x x - - - x
// F100-med x x x - - - x
// F100-high x x x - - x x
// F101-low - x - - - - -
// F101-med - x - - - - -
// F101-high x x x x - - -
// F101-xl x x x x x x -
// F102-low - x - - - - -
// F102-med - x - - - - -
// F103-low x x - x - - -
// F103-med x x - x - - -
// F103-high x x x x - - -
// F103-xl x x x x x x -
// F105/107 x x x x - - -
//


И еще - у ST последнее время случается путаница в маркировке - попалась партия STM32F103, маркированная как STM32F100 (причем купленно официально). Ага, таймера 12 у 103-го нету, девайс с программой от 100-го подвис.


Цитата(vlad_new @ Feb 29 2012, 17:21) *
Хи. А я вот его живьем сейчас включил. На счет T8 пока не знаю, а вот T1 там работает. И кому верить - доке или живому камню. Или они его там просто заглушить забыли ? Бардак какой то.

Наличие таймера (и вообще любого блока) проверяется по биту разрешения тактирования в APBxEN регистре. Ставим бит в единичку - если встал, от блок есть, бит остался нулевой - блока нет.
vlad_new
А очень может быть, что у меня 103 отмаркированный, как 101. Иначе не объяснить наличие рабочего T1.
Сергей Борщ
QUOTE (vlad_new @ Feb 29 2012, 17:21) *
Или они его там просто заглушить забыли ? Бардак какой то.
Думаю, даже и не пытались. В четверг беседовал с представителем ST, так вот он утверждал, что основной вклад в цену камня вносят корпусирование и тестирование. Причем тестирование существенно больший вклад. А поскольку ST тестирует каждый кристалл, то маркировка камня и его цена (внутри серии, естественно), определяются тем, какой набор тестов на нем прогоняли. Т.е. в каждом маленьком камне серии теоретически должны быть и периферия и флеш и ОЗУ от самого жирного, но никто не гарантирует работоспособность этих "излишков". Может и завирал, конечно.
vlad_new
Я вот нашел у st.com документ "RM0008: STM32F101xx, STM32F102xx, STM32F103xx, STM32F105xx and STM32F107xx advanced ARM-based 32-bit MCUs", http://www.st.com/internet/com/TECHNICAL_R.../CD00171190.pdf
Там на странице 282 сказано, что у 101-103 все таки есть T1 и T8.

Отредактировано: Нет все таки я неверно перевел. Там речь про 103, что он содержит только T1.
Значит все таки нельзя мне закладываться на T1 в stm32f101cb. А жаль. Ведь работает сволочь sad.gif
Видать и впрямь перемаркированный 103 попался.
VslavX
Цитата(Сергей Борщ @ Feb 29 2012, 18:39) *
тестирует каждый кристалл, то маркировка камня и его цена (внутри серии, естественно), определяются тем, какой

ИМХО, STM32F1xx реально содержит три отдельных серии - 100, 101-103, 105-107, так как они достаточно сильно отличаются друг от друга. А что внутри серии - похоже таки на две-три-четыре размерные ветки, с выбраковкой флеша/ОЗУ до меньшего размера.
uriy
Где-то недавно обсуждали прерывния от GPIO. Не помню где. Необходимо ловить прерывания с линий РА7 и РС7 оба сидят на Line7. Как понять в обработчике прерывния от кого оно возникло?
Мне необходимо ловить фронт и спад на обоих линиях. Хранить состояние в глобальной переменной от предыдущего прерывания и сравнивать?
dezna
Цитата(uriy @ Mar 1 2012, 09:47) *
Необходимо ловить прерывания с линий РА7 и РС7 оба сидят на Line7. Как понять в обработчике прерывния от кого оно возникло?

прочитать из AFIO->EXTICR2 на какой порт настроено EXTI7
биты 12-15 задают порт.
rm0008 п9.4.4
Цитата(uriy @ Mar 1 2012, 09:47) *
Мне необходимо ловить фронт и спад на обоих линиях. Хранить состояние в глобальной переменной от предыдущего прерывания и сравнивать?

одновременно - боюсь что не возможно. в один момент времени к EXTI7 может быть подключен только один порт либо PA7, либо PC7
ChipKiller
Цитата("uriy")
Мне необходимо ловить фронт и спад на обоих линиях.
про РА7 и РС7 конкретно не скажу, но может стоит задействовать какой-нибудь режим таймеров/счетчиков
valera_o
Вопрос по железу. На одной плате stm32f100 и микросхема пзу spi. питание микрухи 3.6В. Вопрос будет ли работать программатор типа stk200\300?
Вопрос второй. Не понял с ногой NSS, можно ли ее аппаратно использовать для разрешения работы микрухи памяти? Или уже проще просто программно дергать любой удобной ногой?
Allregia
Помогите разобраться со скоростью. Проц F103VE, хотя не думаю что это важно.
Вроде настойки все на макимум (или почти все):
Нажмите для просмотра прикрепленного файла




Прерывания только от Systick, настоеного на 1мс, и это 1мс и есть (проверил осциллографом и ногодрыганьем).
Но такое-же ногодрыганье в дргум месте меня сбивает с толку:
Код
void Delay(volatile uint32_t nCount){
  for(; nCount != 0; nCount--);
}
//---
while(1){
GPIO_SetBits(GPIOB, GPIO_Pin_7);
Delay(5);
GPIO_ResetBits(GPIOB, GPIO_Pin_7);
}


И я получаю импульсы примерно 1мкс длительностью. Пробовал вызывать Delay в цикле for(i=0;i<10;i++) - получал около 10мкс.
Это что, вызов подпрограмммы и счет от 5 до 0 занимает ОДНУ МИКРОСЕКУНДУ на процессоре с тактовой 72 МЕГАГЕРЦА?!

Убираю Delay - получаю импульсы примерно 0.22мкс. Порты на 50мгц настроены.

До этого работал с lpc1768, так от у меня IIR фильтры 2-го порядка в целых числах меньше чем за одну мкс. считал! (причем, проверял таким-же ногодрыганьем).

Что я не так делаю?
scifi
Цитата(Allregia @ Mar 7 2012, 00:31) *
Это что, вызов подпрограмммы и счет от 5 до 0 занимает ОДНУ МИКРОСЕКУНДУ на процессоре с тактовой 72 МЕГАГЕРЦА?!

Легко. Кто знает, что внутри этой подпрограммы? И "счёт" - не самый объективный способ оценивать скорость процессора.

Цитата(Allregia @ Mar 7 2012, 00:31) *
Убираю Delay - получаю импульсы примерно 0.22мкс. Порты на 50мгц настроены.

К сведению: 50 МГц - это настройка крутизны фронтов драйвера порта.
Allregia
Цитата(scifi @ Mar 6 2012, 23:31) *
Легко. Кто знает, что внутри этой подпрограммы?


Что значит "кто"? Выше дан ее исходник, там просто счет.

Цитата
И "счёт" - не самый объективный способ оценивать скорость процессора.


Я не скорость процессора оцениваю, а время выполнения куска программы.


Цитата
К сведению: 50 МГц - это настройка крутизны фронтов драйвера порта.



Я в курсе, но при задании фронта к примеру в 2мгц, заставлять дрыгать ножкой с частотой 10мгц как-то не очень корректно sm.gif
KnightIgor
Цитата(valera_o @ Mar 4 2012, 21:47) *
Вопрос второй. Не понял с ногой NSS, можно ли ее аппаратно использовать для разрешения работы микрухи памяти? Или уже проще просто программно дергать любой удобной ногой?

Если SPI - мастер, NSS надо управлять как обычным GPIO. Или любой другой ногой.
Хотите "правильный" NSS, берите кортексы от NXP.
ReRayne
Кто-нибудь встречал как правильно обрабатывать прерывания от ETH_DMA_FLAG_RBU?
scifi
Цитата(Allregia @ Mar 7 2012, 10:21) *
Я не скорость процессора оцениваю, а время выполнения куска программы.

Тогда советую поднять уровень оптимизации. Правильный компилятор должен убрать "счёт" за ненадобностью.
А под "подпрограммами" я имел в виду GPIO_SetBits() и GPIO_ResetBits(): никто не гарантирует, что они оптимизированы для скорости. Если нужна скорость, то следует писать в регистры напрямую.
valera_o
Каким программатором можно внутрисхемно зашить микросхему памяти spi при питании 3В?
scifi
Цитата(tmtlib @ Mar 16 2012, 11:46) *
Друзья, запутался в логических уровнях. Хочу сделать платку с загрузкой из внутренней флеш, т.е. всё по умолчанию.
- BOOT0 подключаю к GND
- RESET подключаю к 3.3в
что это означает с точки зрения нулей и единиц? GND="1", 3.3v="0"? Где это написано, в таблице пинов нашёл только названия и 5v tolerancy..

Точное название входа reset по даташиту - NRST. N указывает на то, что активный уровень сигнала - низкий. Вообще в большинстве случаев вход reset именно такой.
smk
Запустил пример из STM32_USB-FS-Device_Lib_V3.3.0, железо работает. Собственно нужно теперь разобраться как с помощь этой библиотеки строить USB в том виде, в каком мне нужно. Агурова читал, но как-то мало его. Есть ли еще что-то русскоязычное про USB кроме Русева? Есть ли что-то доходчивое собственно про библиотеку? Сейчас стоит задача передавать в оба конца буфер из 512 байт. Хочется чтоб без дополнительных драйверов, например HID. Спасибо.
smk
Кто-нибудь делал устройство USB HID с помощью STM32_USB-FS-Device_Lib_V3.3.0 с нуля? Именно с нуля, а не переделкой примера? Помогите освоить это дело. Ну или помогите в примере Custom_HID разобраться получше. Спасибо.
valera_o
Есть необходимость переместить SPI1 на другие выводы, т.е. ремапить.
Инициализирую таким образом.

CODE
void SPI_init(void)
{ // spi B3 SCK,B4 MISO,B5 MOSI, А15 NSS

AFIO->MAPR |= AFIO_MAPR_SPI1_REMAP;

RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;

RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;

RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;


// SS
GPIOA->CRH |= GPIO_CRH_MODE15; //A15
GPIOA->CRH &= ~GPIO_CRH_CNF15; //
GPIOA->BSRR = GPIO_BSRR_BS15; //


//SCK
GPIOB->CRL |= GPIO_CRL_MODE3; //B3
GPIOB->CRL &= ~GPIO_CRL_CNF3; //
GPIOB->CRL |= GPIO_CRL_CNF3_1; //

// MISO
GPIOB->CRL &= ~GPIO_CRL_MODE4; //B4
GPIOB->CRL &= ~GPIO_CRL_CNF4; //
GPIOB->CRL |= GPIO_CRL_CNF4_1; //
GPIOB->BSRR = GPIO_BSRR_BS4; //

//MOSI
GPIOB->CRL |= GPIO_CRL_MODE5; //B5
GPIOB->CRL &= ~GPIO_CRL_CNF5; //
GPIOB->CRL |= GPIO_CRL_CNF5_1; //

RCC->APB2ENR |= RCC_APB2ENR_SPI1EN;
SPI1->CR1 = 0x0000; //
SPI1->CR2 = 0x0000; //
SPI1->CR1 |=SPI_CR1_MSTR //
| SPI_CR1_BR_1 //
| SPI_CR1_SSI //
| SPI_CR1_SSM //
| SPI_CR1_SPE; //
}

Не работает. Без ремапа, на обычных ногах работает нормально. Что поправить? добавить?
Сергей Борщ
QUOTE (valera_o @ Mar 19 2012, 12:59) *
Что поправить?
А не надо ли эти две строчки местами поменять?
CODE
AFIO->MAPR |= AFIO_MAPR_SPI1_REMAP;

RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;


QUOTE
Note: To read/write the AFIO_EVCR, AFIO_MAPR, AFIO_MAPR2 and AFIO_ EXTICRX registers,
the AFIO clock should first be enabled. Refer to APB2 peripheral clock enable register (RCC_APB2ENR).
valera_o
Спасибо.
поменял. не помогло.
Нашел.
По сбросу на PB3,PB4, PA15 используются для отладки по jtag.

AFIO->MAPR |=AFIO_MAPR_SWJ_CFG_JTAGDISABLE;
Заработало. SPI1 перенесен на альтернативные ноги.
valera_o
Развожу плату под stm32f100c4. Помогите правильно определиться с ногами необходимыми для программирования SWD, есть плата Дискавери.
Я так понял, что необходимы ноги SWDIO, SWDCLK, Vss, Vdd. Что делать с ногами BOOT0 и BOOT1?
demiurg_spb
Цитата(valera_o @ Mar 20 2012, 10:27) *
Что делать с ногами BOOT0 и BOOT1?
Зависит откуда вы хотите загружатьсяsm.gif
Alfa
Цитата(valera_o @ Mar 20 2012, 12:27) *
Что делать с ногами...?


Я бы рекомендовал вам почитать Reference manual RM0041 STM32F100xx advanced ARM-based 32-bit MCUs. Но не раздел 2.4 Boot configuration в котором есть таблица 6 в которой написано что же делать с этими ногами. И не 25.4.1 SWJ debug port pins где написано про выводы JTAG и SW, а хотя бы на раз по диагонали просмотреть весь документ. Уверен вы узнаете много нового и полезного. И знания эти помогут избежать ошибок...


ну и даташит никто не отменял...
valera_o
Спасибо за ответы.
Нужно запрограммировать и запускать main из собственной памяти контроллера.
Сейчас открою доки, просмотрю.
Это мечта - взять и прочитать весь документ. Стоит конкретная задача, конкретная периферия, вот и читается сначала то, что необходимо.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.