реклама на сайте
подробности

 
 
> STM32 – вопросы – проблемы - решения.
Danis
сообщение Nov 19 2010, 18:19
Сообщение #1


Twilight Zone
***

Группа: Свой
Сообщений: 454
Регистрация: 17-02-09
Из: Челябинск
Пользователь №: 44 990



Предлагаю в этой теме обсуждать вопросы разработчиков на STM32.


--------------------
Magic Friend
Go to the top of the page
 
+Quote Post
33 страниц V  « < 9 10 11 12 13 > »   
Start new topic
Ответов (150 - 164)
ARV
сообщение Apr 23 2011, 16:50
Сообщение #151


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



продолжаю не понимать, как работать в связке 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 не получается... туплю неподецки...


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
akimych
сообщение Apr 23 2011, 19:26
Сообщение #152


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 7-01-11
Пользователь №: 62 073



Если смотреть "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 КБ флеша, меньше периферии).
Go to the top of the page
 
+Quote Post
ARV
сообщение Apr 24 2011, 05:48
Сообщение #153


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Цитата(akimych @ Apr 23 2011, 23:26) *
Вообще надо определять USE_STDPERIPH_DRIVER

вот где собака порылась! 08.gif спасибо!

однако, радость оказалась преждевременной... скомпилировались все файлы успешно, без ошибок и варнингов, но при линковке вылезло вот это:
Цитата
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 не вызывается... но почему?!


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
ivainc1789
сообщение Apr 24 2011, 16:17
Сообщение #154


Профессионал
*****

Группа: Свой
Сообщений: 1 175
Регистрация: 5-01-05
Пользователь №: 1 807



Столкнулся со странной проблемой при использовании 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 галки, т. е. защита от записи перманентно снята для всех страниц, всей флеши. Или я что-то упускаю?
Go to the top of the page
 
+Quote Post
Alechin
сообщение Apr 25 2011, 04:12
Сообщение #155


Частый гость
**

Группа: Свой
Сообщений: 158
Регистрация: 27-06-05
Из: Химки, Моск.обл.
Пользователь №: 6 334



Цитата(Danis @ Apr 23 2011, 19:40) *
Проверьте пины BOOT проца.

Да вроде все в норме: UARTовский загрузчик запускается при правильной комбинации. При комбинации "все нули" UARTовский загрузчик не запускается. Записанная через него (или ST-Link) программа нет.
Проц - 103VG
Go to the top of the page
 
+Quote Post
ARV
сообщение Apr 27 2011, 20:43
Сообщение #156


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



рискну в очередной раз потревожить уважаемое сообщество.
я победил-таки свою тупость и смог скомпилировать в Eclipse Helios проект для демо-платки STM32vldiscovery, правда, пришлось совершать "странные" манипуляции.
теперь у меня новая беда: отладка... у меня есть stm32-gdb-server именно для моей отладочной платы, он работает. даже удается законнектить его с arm-none-eabi-gdb при помощи плугина Eclipse... но при этом в микроконтроллер не заливается прошивка sad.gif
по идее должна быть возможность увидеть команды, которыми gdb общается с сервером - я их не вижу и не могу понять, как это включить. так как я не вижу обмена, я не понимаю, почему не загружается программа. поиск в сети не дал ничего полезного: все или J-Link используют, или OpenOCD... пытался составить скрипт инициализации gdb - выдает в каждой строке с командой monitor ошибку - дескать, не поддерживается команда...

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

помогите, кто понимает, в чем дело....


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
adnega
сообщение May 18 2011, 13:13
Сообщение #157


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Очень огорчило:
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 не получится(
А счастье было так близко...
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение May 19 2011, 04:05
Сообщение #158


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(adnega @ May 18 2011, 17:13) *
Т.е. "натравить" DMA на bit-band SRAM не получится(
А счастье было так близко...
Ну так ведь можно напрямую к памяти обращаться не через bit-band remap.
Или Вы хотели побитный атомарный доступ организовать? Интересно для чего?


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
adnega
сообщение May 19 2011, 05:20
Сообщение #159


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(demiurg_spb @ May 19 2011, 07:05) *
Ну так ведь можно напрямую к памяти обращаться не через 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 переданных-принятых бит.

Где-то так.
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение May 19 2011, 05:26
Сообщение #160


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(adnega @ May 19 2011, 09:20) *
Анализирую исправность CAN-шины... Где-то так.
Идея была хороша.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
adnega
сообщение May 19 2011, 06:39
Сообщение #161


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(demiurg_spb @ May 19 2011, 08:26) *
Идея была хороша.


Сделал через таймер, DMA и не bit-band память.
Раз в 16мс обрабатываю прерывание за 22мкс (CPU LOAD = 0.14% вместо 10%).
Меня устраивает)
Go to the top of the page
 
+Quote Post
tRem0R
сообщение May 26 2011, 19:45
Сообщение #162





Группа: Новичок
Сообщений: 1
Регистрация: 26-05-11
Пользователь №: 65 287



Люди добрые. Мне нужно сделать таймер с помощью 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...");
}

но во время таймаута он сбрасывает процессор.

Уважаемые гуру, помогите пожалйста. Правдо-говоря я новычок. Гугл не предложите пожалуйста.

Извините меня, по нации я не русский. Поэтому извиняюсь за плохой русский.
Go to the top of the page
 
+Quote Post
Flexz
сообщение May 27 2011, 09:08
Сообщение #163


Местный
***

Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797



Зачем IWDG? используйте для таймаутов любой обычный таймер - TIMx. А собаке оставьте собачью работу - сбрасывать процессор, если всё повисло.
Go to the top of the page
 
+Quote Post
Entuziast
сообщение Jun 1 2011, 04:55
Сообщение #164





Группа: Validating
Сообщений: 14
Регистрация: 22-10-07
Пользователь №: 31 604



Помогите пожалуйста примером кода простого таймера на TIM6 или другом для STM32F103VC. Чтобы задать таймаут и по истечении попасть в обработчик прерывания.
Go to the top of the page
 
+Quote Post
brag
сообщение Jun 2 2011, 02:43
Сообщение #165


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



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;
Go to the top of the page
 
+Quote Post

33 страниц V  « < 9 10 11 12 13 > » 
Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 14:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.01517 секунд с 7
ELECTRONIX ©2004-2016