ARV 0 23 апреля, 2011 Опубликовано 23 апреля, 2011 · Жалоба продолжаю не понимать, как работать в связке Eclipse и библиотек STM32, скачанных с официального сайта для отладочной платы STM32vldiscovery что я делаю: 1. создаю мастером Eclipse проект, используя Yagarto toolchain, выбираю Cortex-M3. Ставлю галку для автоматической генерации makefile 2. в папку проекта копирую папку src, которая содержит исходник примера проги - пример из комплекта демок для платы, т.е. к нему вроде как претензий нет 3. в папку src копирую папки utilites (хидер и исходник поддержки отладочной платы STM32vldiscovery) и папку STM32F10x_StdPeriph_Driver, которая содержит две папки inс и src с соответствующими файлами описаний периферии. 4. в свойствах проекта компилятору прописываю Include Directories: src src\utilites src\STM32F10x_StdPeriph_Driver\inc src\STM32F10x_StdPeriph_Driver\src 5. Определяю символы (-D) USE_STM32_DISCOVERY и STM3210X_LD_VL, чтобы правильно работала условная компиляция 6. запускаю Build и в результате я получаю ошибки при компиляции src\utilites\STM32vldiscovery.c, причем пишет, что не определен GPIO_Pin_9 и т.п. странные вещи - парсер Eclipse находит эти символы в файле src\STM32F10x_StdPeriph_Driver\src\stm32f10x_gpio.h - а компилятор не находит!!! подскажите, что я делаю не так? P.S. как ни странно, я сумел запустить в Eclipse отладку через ST-Link - то есть свою отладочную платку, правда, на заранее собранном в Atollic True Studio проекте, а вот собрать тот же самый проект в Eclipse не получается... туплю неподецки... Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
akimych 0 23 апреля, 2011 Опубликовано 23 апреля, 2011 · Жалоба Если смотреть "STM32VLDISCOVERY firmware package (AN3268)"... 3. в папку src копирую папки utilites (хидер и исходник поддержки отладочной платы STM32vldiscovery) и папку STM32F10x_StdPeriph_Driver, которая содержит две папки inс и src с соответствующими файлами описаний периферии. А папка CMSIS скопирована? 4. в свойствах проекта компилятору прописываю Include Directories: src src\utilites src\STM32F10x_StdPeriph_Driver\inc src\STM32F10x_StdPeriph_Driver\src А еще надо CMSIS\CM3\CoreSupport CMSIS\CM3\DeviceSupport\ST\STM32F10x <- тут stm32f10x.h По идее, без этих путей компилятор должен был ругаться в первую очередь на отсутсвие stm32f10x.h 5. Определяю символы (-D) USE_STM32_DISCOVERY и STM3210X_LD_VL, чтобы правильно работала условная компиляция Вообще надо определять USE_STDPERIPH_DRIVER, т.к. в stm32f10x.h #ifdef USE_STDPERIPH_DRIVER #include "stm32f10x_conf.h" #endif А в stm32f10x_conf.h (в каждом проекте свой) должны быть соотв. include, в частности stm32f10x_gpio.h, в котором определены GPIO_Pin_X и т.п. Это касается использования stm-вской библиотеки вообще. Что делает USE_STM32_DISCOVERY я не понял, ни в одном файле не нашел этого символа. И кстати, дискавери - STM32F10X_MD_VL (LD - 16/32 КБ флеша, меньше периферии). Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 0 24 апреля, 2011 Опубликовано 24 апреля, 2011 · Жалоба Вообще надо определять USE_STDPERIPH_DRIVER вот где собака порылась! :08: спасибо! однако, радость оказалась преждевременной... скомпилировались все файлы успешно, без ошибок и варнингов, но при линковке вылезло вот это: c:/yagarto/bin/../lib/gcc/arm-none-eabi/4.6.0/../../../../arm-none-eabi/bin/ld.exe: warning: cannot find entry symbol _start; defaulting to 00008000 что-то это мне крайне не нравится... что я опять упустил? P.S. не понял, что делать с ассемблерными файлами startup_xxxxxx.s - похоже, проблема в том, что они не компилируются... P.P.S. добавил ключики для удаления неиспользуемых секций, и получил вообще красивый итог: Invoking: ARM Yagarto Windows GNU Print Size arm-none-eabi-size --format=berkeley test3.elf text data bss dec hex filename 0 0 0 0 0 test3.elf в общем, понятно - _start не определен, main не вызывается... но почему?! Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ivainc1789 0 24 апреля, 2011 Опубликовано 24 апреля, 2011 · Жалоба Столкнулся со странной проблемой при использовании IAR EWARM v6.10.5 совместно с ST-LINK. Для STM32F103R6T6A (32K flash, 6K RAM) было написано уже 15К кода, проект близится к завершению, отлаживался во flash. Вдруг иаровский дефолтный flash loader перестает грузится в MCU или сообщает об ошибке. Через ST-LINK utulity все нормально прошивается. Странно то, что дело как бы не в настройках проекта, т. к. я их не менял, и содержимое main то же самое прошивалось раньше нормально, а теперь перестало. Перепробовал наверное все что можно, но причину так и не удалось определить. Чаще всего помогает команда erase sectors в ST-LINK utulity v2.0, сегодня случайно проделал то, что выглядит странно, но тоже помогло: 1. При "отказе" flash loader'а выключаем (снимаем галку) в output converter (настройки проекта) 2. Перекомпилируем проект 3. Пробуем грузить в кристалл (грузится нормально) 4. Включаем (ставим галку) в output converter (настройки проекта) 5. Убеждаемся, что грузится нормально. И вот эти пляски периодически повторяются. У меня вопрос: были ли подобные проблемы у кого-нибудь? Как решили? Иногда вылетает еще вот такая ошибка: Второе. Никак не пойму, почему ST-LINK utulity v2.0 для указанного кристалла при попытке программирования пишет, что некоторые СЕКТОРЫ flash защищены от записи? Ведь в ее настройках в option bytes в разделе write protection сняты все 32 галки, т. е. защита от записи перманентно снята для всех страниц, всей флеши. Или я что-то упускаю? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alechin 0 25 апреля, 2011 Опубликовано 25 апреля, 2011 · Жалоба Проверьте пины BOOT проца. Да вроде все в норме: UARTовский загрузчик запускается при правильной комбинации. При комбинации "все нули" UARTовский загрузчик не запускается. Записанная через него (или ST-Link) программа нет. Проц - 103VG Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 0 27 апреля, 2011 Опубликовано 27 апреля, 2011 · Жалоба рискну в очередной раз потревожить уважаемое сообщество. я победил-таки свою тупость и смог скомпилировать в Eclipse Helios проект для демо-платки STM32vldiscovery, правда, пришлось совершать "странные" манипуляции. теперь у меня новая беда: отладка... у меня есть stm32-gdb-server именно для моей отладочной платы, он работает. даже удается законнектить его с arm-none-eabi-gdb при помощи плугина Eclipse... но при этом в микроконтроллер не заливается прошивка :( по идее должна быть возможность увидеть команды, которыми gdb общается с сервером - я их не вижу и не могу понять, как это включить. так как я не вижу обмена, я не понимаю, почему не загружается программа. поиск в сети не дал ничего полезного: все или J-Link используют, или OpenOCD... пытался составить скрипт инициализации gdb - выдает в каждой строке с командой monitor ошибку - дескать, не поддерживается команда... собственно, мне нужно как-то заставить gdb залить прошивку в МК - остальное будет работать (я в этом уверен, т.к. до того, как я стер демо-прошивку, она вполне прилично отлаживалась, т.е. пошаговое выполнение шло и т.п.). помогите, кто понимает, в чем дело.... Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 10 18 мая, 2011 Опубликовано 18 мая, 2011 · Жалоба Очень огорчило: In the STM32F10xxx both peripheral registers and SRAM are mapped in a bit-band region. This allows single bit-band write and read operations to be performed. The operations are only available for Cortex-M3 accesses, not from other bus masters (e.g. DMA). Т.е. "натравить" DMA на bit-band SRAM не получится( А счастье было так близко... Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 19 мая, 2011 Опубликовано 19 мая, 2011 · Жалоба Т.е. "натравить" DMA на bit-band SRAM не получится( А счастье было так близко... Ну так ведь можно напрямую к памяти обращаться не через bit-band remap. Или Вы хотели побитный атомарный доступ организовать? Интересно для чего? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 10 19 мая, 2011 Опубликовано 19 мая, 2011 · Жалоба Ну так ведь можно напрямую к памяти обращаться не через bit-band remap. Или Вы хотели побитный атомарный доступ организовать? Интересно для чего? Анализирую исправность CAN-шины. Выключаем CAN-контроллер и управляем ногами TX и RX через GPIO. Непрерывно выдаю в линию TX поток из 32 битовых кадров, соответствующих уникальному идентификатору устройства: 0111 - если соответствующий бит идентификатора равен 0; 0011 - если соответствующий бит идентификатора равен 1; После выдачи бита на ногу TX через половину битового интервала читаю ногу RX. Если число переданных нулей равно числу принятых, то на шине нет других устройств или обрыв. Если все биты 1, то на шине КЗ. Если все биты 0, то включен передатчик с доминантным битом (ошибка). Если нулей передали меньше, чем приняли, то шина исправна и есть другие устройства - включаем CAN-контроллер. Далее, штатная работа CAN-контроллера, до следующей потери линка (отсутствие синхронизирующих пакетов в течение определенного времени). Так вот, дрыгать ногами нужно быстро (прерывание каждые 62 мкс) - примененная PHY-CAN ограничивает длительность доминантного бита при передаче. Хотел сформировать битовый массив (размером 128 бит), настроить DMA на запись слова из памяти bit-band для этого массива с инкрементом по кольцу в bit-band для GPIO TX_bit по DMA-запросу от канала сравнения таймера. Аналогичная процедура для приема битов. Без DMA все работает, но копирование произвожу в прерывании таймера. Сейчас сделал не через битовый массив - пришлось выделить не 4 слова под биты на передачу, а 128. Для справки: - старый вариант каждые 62 мкс вызывал прерывание на порядка 300 - 400 тактов; - вариант через bit-band и прерывание таймера - в 10 раз меньше; - через DMA - прерывание один раз на все 128 переданных-принятых бит. Где-то так. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 19 мая, 2011 Опубликовано 19 мая, 2011 · Жалоба Анализирую исправность CAN-шины... Где-то так.Идея была хороша. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 10 19 мая, 2011 Опубликовано 19 мая, 2011 · Жалоба Идея была хороша. Сделал через таймер, DMA и не bit-band память. Раз в 16мс обрабатываю прерывание за 22мкс (CPU LOAD = 0.14% вместо 10%). Меня устраивает) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
smuminov 0 26 мая, 2011 Опубликовано 26 мая, 2011 · Жалоба Люди добрые. Мне нужно сделать таймер с помощью IWDG на плате stm32f103cb. Мне нужно запускать таймер и постоянно проверить флаги. Если таймаут сделать какая-то операция. Кто нибудь сталкивался с этим? Пробовал с таким методом: void IWDG_init(void){ IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); IWDG_SetPrescaler(IWDG_Prescaler_256); IWDG_SetReload(199); //ну мне хотя бы 3 секунда IWDG_ReloadCounter(); IWDG_Enable(); } и в любом месте я проверяю флаг таймера while(1){ if (RCC_GetFlagStatus(RCC_FLAG_IWDGRST)!=RESET){ printf("there was a watchdog reset\n\b"); IWDG->KR = 0xAAAA; // Релоад таймера RCC->CSR |= (1<<24); } else printf("\n\nKeep going on..."); } но во время таймаута он сбрасывает процессор. Уважаемые гуру, помогите пожалйста. Правдо-говоря я новычок. Гугл не предложите пожалуйста. Извините меня, по нации я не русский. Поэтому извиняюсь за плохой русский. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flexz 0 27 мая, 2011 Опубликовано 27 мая, 2011 · Жалоба Зачем IWDG? используйте для таймаутов любой обычный таймер - TIMx. А собаке оставьте собачью работу - сбрасывать процессор, если всё повисло. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость Entuziast 1 июня, 2011 Опубликовано 1 июня, 2011 · Жалоба Помогите пожалуйста примером кода простого таймера на TIM6 или другом для STM32F103VC. Чтобы задать таймаут и по истечении попасть в обработчик прерывания. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
brag 0 2 июня, 2011 Опубликовано 2 июня, 2011 · Жалоба I2S в режиме Slave PCM в STM32F105 либо вообще ложит болт на FrameSync, либо я туплю. что long frame sync, что short. данные нормально принимаются, но frame sync игнорируется. тоесть, если частота sclk, скажем 32xFS, то и получим в итоге частоту частоту 16битных семплов 2xFS... садил frame sync на землю - тоже данные принимаются. в конкретном проеkte решил установив sclk в 16xFS (благо,мастер такое умеет) Данные идут через DMA. код инициализации: spi->CR1=0; spi->I2SCFGR=0; spi->I2SCFGR=SPI_I2SCFGR_I2SMOD; spi->I2SCFGR|=SPI_I2SCFGR_I2SCFG_SR|SPI_I2SCFGR_I2SSTD_PCM|SPI_I2SCFGR_PCMSYNC|SP I_I2SCFGR_DATLEN_16; spi->I2SCFGR|=SPI_I2SCFGR_I2SE; spi->CR2=SPI_CR2_TXDMAEN|SPI_CR2_RXDMAEN; запуск dma как обычно DMA1_Channel4->CPAR=(U32)&spi->DR; DMA1_Channel4->CMAR=(U32)src; DMA1_Channel4->CNDTR=count; DMA1_Channel4->CCR=DMA_CCR_MSIZE_16|DMA_CCR_PSIZE_16|DMA_CCR_MINC//|DMA_CCR_DIR |DMA_CCR_TEIE|DMA_CCR_TCIE|DMA_CCR_HTIE|DMA_CCR_CIRC; DMA1_Channel4->CCR|=DMA_CCR_EN; Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться