STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Прорезались зубы
Сообщения: 220
Зарегистрирован: Пт авг 07, 2009 22:06:49
Откуда: Россия, Москва

Сообщение Mr.Denis »

oleg110592 писал(а):тут можно для начала почитать: http://www.compel.ru/lib/guides/st/izuc ... discovery/
Первый глупый вопрос. В этом семинаре в лабораторной работе №2 есть такая фраза
Обращает на себя внимание включение дополнительного заголовочного файла – misc.h. Именно в нем описаны функции, перечисления, структуры для работы с прерываниями.
Скажите где можно взять этот фаил?
Может для этого курса есть набор файлов которые создатель курса использует или они стандартные?
STM32F4 Discovery + KEIL + Windows 7
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Сообщение oleg110592 »

Кроме самой среды разработки для написания программ необходимы также дополнительные
библиотеки Cortex Microcontroller Software Interface Standart (CMSIS) и Standart Peripheral Library (SPL). Лучше
всего, если Вы загрузите данные библиотеки с сайта производителя st.com.
http://www.st.com/web/catalog/tools/FM1 ... 3/PF257901
Реклама
Друг Кота
Аватара пользователя
Сообщения: 20132
Зарегистрирован: Чт сен 01, 2011 12:53:27
Откуда: ТьмуТаракания. Почетный житель подмостовья

Сообщение oleg63m »

у тебя так же на реальном столе бардак ?
еще какой... склероз проявляется, если не выложить на виду, потом долго искать :))) :))) :)))
путь к "Рабочему столу" так же содержит кириллицу
епт. а ты оказывается прав. я все время пользовал англицкую версию с русским MUI, и както не заметил. :dont_know:
тебе плюсик.(маленький, чтоб не зажрался)
а с кирилистическим логином я давно сам разобрался
HHIMERA
а тебя че, уже выпустили? :)))
с меньшинствам никакого отношения не имею ...
да, развелось этого преобладающего меньшенства, уже и не поймешь кто есть ху
Шекспир сказал: Судить меня -дано лишь Богу, другим я укажу дорогу... https://natribu.org/
Я его полностью поддерживаю.
Программирую на Fuse AtmelAVR.
Контактная информация:
Вымогатель припоя
Сообщения: 502
Зарегистрирован: Чт фев 16, 2012 19:00:11

Сообщение zöner »

Причина, возможно, и не в этом, но использовать русские буквы в именах файлов-каталогов не стоит. Существует огромное количество софта, который этого не любит
шёл 2013 год... Стандарту Unicode стукнуло 22 года...
ИМХо такой софт - сразу втопку... И криворуких пейсателей, до сих пор использующих CP1251 и похожую хрень...
В Eclipse таких проблем нет.
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

zöner писал(а): ИМХо такой софт - сразу втопку...
А может кривоногих юзеров не знающих английского??? Пусть почувствут себя дровами!!! :))
"Я не даю готовых решений, я заставляю думать!"(С)
Реклама
Вымогатель припоя
Сообщения: 502
Зарегистрирован: Чт фев 16, 2012 19:00:11

Сообщение zöner »

нет, в первую очередь разработчиков.
есть Unicode - ограничений на названия папок нет - можно использовать что угодно, даже иероглифы или клинопись.
если всякие Кейлы и ИАРы до сих пор не осилили, и еще дерут тыщи $ за свой продукт - то втопку такой софт.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

zöner писал(а):нет, в первую очередь разработчиков.
Да ну ? :))) Например в играх этим занимаются местные дистрибьютеры локализаторы.
И если был бы массовый спрос на локализацию .
Вот только нужно сие только мелкой части неграмотных юзеров .
Опытный кот
Аватара пользователя
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

Сообщение coredumped »

zöner писал(а):нет, в первую очередь разработчиков.
есть Unicode - ограничений на названия папок нет - можно использовать что угодно, даже иероглифы или клинопись.
если всякие Кейлы и ИАРы до сих пор не осилили, и еще дерут тыщи $ за свой продукт - то втопку такой софт.
Да американцам пох юникод. У них символов с кодом больше 0x7F не существует. Вы им письмо напишите, ага... Лучше на русском, в юникоде :) Мы тут в школе английский не учили, хотим папки на русском :)
dosikus писал(а):Вот только нужно сие только мелкой части неграмотных юзеров .
Вот! Более точно и не скажешь :)
Все будет только лучше, в крайнем случае - хуже.
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

coredumped писал(а): Вот! Более точно и не скажешь :)
Что грамарнаци не понравилось ? Может пруф приведешь ? :)))
Вымогатель припоя
Сообщения: 502
Зарегистрирован: Чт фев 16, 2012 19:00:11

Сообщение zöner »

Например в играх этим занимаются местные дистрибьютеры локализаторы
при чем тут локализация ? речь идет о поддержке Уникода
Да американцам пох юникод. У них символов с кодом больше 0x7F не существует. Вы им письмо напишите, ага... Лучше на русском, в юникоде
вот потому и не пишут, т.к. в 99% случев софт крадут, и на претензии таких "юзеров" разработчикам пофиг
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

zöner писал(а):при чем тут локализация ? речь идет о поддержке Уникод
Да при том , смотри выше, coredumped все внятно объяснил ...
Кстати кириллица еще полбеды , у многих крышу сносит от пробелов в пути ... :)))
Опытный кот
Аватара пользователя
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

Сообщение coredumped »

dosikus писал(а):Кстати кириллица еще полбеды , у многих крышу сносит от пробелов в пути ... :)))
100%! Не так давно приходилось собирать один большой проектик. Компилятор RealView, куча скриптов на java и tcl, исходников пол-гига. Причем собрать можно только этим компилятором, тк специфические прагмы итд итп. А скрипты "понимают" имена файлов только в формате 8.3 (8 букв имя и 3-расширение). Ну типа "C:\PROGRA~1\". Какие уж тут пробелы, а тем более юникод :)))
Все будет только лучше, в крайнем случае - хуже.
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Сообщение pokk »

Начал я дальше разбираться как записать во flash память stm32f4 вроде бы нечего сложно. но вот последние сектора достаточно большие 128кб.Самый минимальны 16кб нулевой сектор. по этому решил сдвинуть программу с таблицей прерывания на один сектор ниже. в компиляторе IAR переставил адреса всё как надо сдвинулось. но вот прерывания уже не хотят работать не в какую. Чего я упускаю?
прерывание у меня только SysTick_Handler а код программы просто цикл бесконечный.
Вот файл stm32f4xx_flash.icf
Спойлер

Код: Выделить всё

/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = 0x08004000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__ = 0x08008000;
define symbol __ICFEDIT_region_ROM_end__   = 0x080FFFFF;
define symbol __ICFEDIT_region_RAM_start__ = 0x20000000;
define symbol __ICFEDIT_region_RAM_end__   = 0x20020000;

define symbol __ICFEDIT_region_ROM_sector0_start__ = 0x08000000;
define symbol __ICFEDIT_region_ROM_sector0_end__   = 0x08003FFF;

/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__ = 0x400;
define symbol __ICFEDIT_size_heap__   = 0x200;
/**** End of ICF editor section. ###ICF###*/

define memory mem with size = 4G;
define region ROM_region   = mem:[from __ICFEDIT_region_ROM_start__   to __ICFEDIT_region_ROM_end__];
define region RAM_region   = mem:[from __ICFEDIT_region_RAM_start__   to __ICFEDIT_region_RAM_end__];
define region RAM_sector0  = mem:[from __ICFEDIT_region_ROM_sector0_start__   to __ICFEDIT_region_ROM_sector0_end__];

define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };
//define block SECTOR5    with alignment = 8, size = __ICFEDIT_size_sector__   { };

initialize by copy { readwrite };
do not initialize  { section .noinit };

place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };

place in ROM_region   { readonly };
place in RAM_region   { readwrite,
                        block CSTACK, block HEAP};

place in RAM_sector0   { section .FLASH_SECTOR_0};
Тут я только добавил свой сектор

Код: Выделить всё

place in RAM_sector0   { section .FLASH_SECTOR_0};
а в главной программе стоит

Код: Выделить всё

#pragma section = ".FLASH_SECTOR_0"
const char version_full [] @ ".FLASH_SECTOR_0" = "VERSION 18.06.2010 15:25:40";

тоже работает как надо размешается по начальному адресу 0x08000000;

Разобрался надо было в программе написать

Код: Выделить всё

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x04000);    //перенести таблицу векторов прерываний по адресу 0х08004000
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1433
Зарегистрирован: Вс дек 02, 2012 03:13:48
Откуда: Калининград

Сообщение balmer »

zöner писал(а):В Eclipse таких проблем нет.
Ошибаешься. Частенько Unix разработчики забывают, что под Windows стоит не UTF-8 кодировка в именах файлов. К самой Java/Eclipse это конечно слабо относится, но вот всякий обвес часто некорректно работает.
Вымогатель припоя
Сообщения: 502
Зарегистрирован: Чт фев 16, 2012 19:00:11

Сообщение zöner »

в NTFS юникод по умолчанию, для FAT нужно просто использовать соответствующие функции, перекодирующие имена в юникод и обратно http://msdn.microsoft.com/en-us/library ... 85%29.aspx
для консоли есть chcp: http://stackoverflow.com/questions/1410 ... by-default
только как всегда у микрософта реализован хр"ново
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1433
Зарегистрирован: Вс дек 02, 2012 03:13:48
Откуда: Калининград

Сообщение balmer »

zöner писал(а):в NTFS юникод по умолчанию
Наверно немного неточно описал где Unix-оиды спотыкаются.
Вот скажем возьмем функцию fopen для C/C++.
Она принимает char* filename - имя файла.
Под Unix все уже давно забыли, что оно может быть не Utf8 и пользуются ей везде. Однако под Windows это не так.
Прорезались зубы
Сообщения: 220
Зарегистрирован: Пт авг 07, 2009 22:06:49
Откуда: Россия, Москва

Сообщение Mr.Denis »

Здравствуйте!
Сделал первый шаг, более менее разобрался с GPIO ( подключал святики и кнопочки).
Но есть одно не понимание с тактированием STM32F4, не как не могу понять где настраивается, как настраивать.
Подскажите где можно посмотреть и почитать про это(желательно на русском, так как английский плохо знаю), в datahseet не совсем понял даже в каком разделе посмотреть. Ткните носом...(((
STM32F4 Discovery + KEIL + Windows 7
Опытный кот
Аватара пользователя
Сообщения: 725
Зарегистрирован: Вт апр 26, 2011 13:58:36
Откуда: Ростовская область

Сообщение amv2000 »

Mr.Denis писал(а):где можно посмотреть и почитать про это(желательно на русском, так как английский плохо знаю)
Находил это может подойдет http://www.emcu.it/STM32F4xx/Exe1/EXE1_ ... ian_ed.pdf
Прорезались зубы
Сообщения: 220
Зарегистрирован: Пт авг 07, 2009 22:06:49
Откуда: Россия, Москва

Сообщение Mr.Denis »

Здравствуйте!
Пытаюсь написать маленькую программку которая работает с портами GPIOx и столкнулся с проблемой (Да, кстати пишу в CoIDE версии 1.7.5) И так что я делаю:
1.Подключаю 2 библиотеки (stm32f4xx_rcc.h и stm32f4xx_gpio.h)
2.Подключаю тактирование GPIOx(в моем случаи это GPIOD, то есть порт D)
3.И тут возник нюанс, я понимаю что мне в начале необходимо настроить порт D(а именно регистры:GPIOx_MODER, GPIOx_OSPEEDR, GPIOx_PUPDR, GPIOx_OTYPER)
И если я нечего не путаю, то по datasheet эти регистры располагаются по адресам:
GPIOx_MODER = 0x00 (Выбираем в каком режиме будет работать. Вход, выход, альтернативный)
GPIOx_OSPEEDR = 0x08 (Выбираем скорость порта)
GPIOx_PUPDR = 0x0C (Выбираем режим Pull)
GPIOx_OTYPER = 0x04
Теперь в эти регистры надо записать конфигурацию порта.
Пытался это сделать как вот в этой статье(http://easystm32.ru/for-beginners/11-mcu-ports Не реклама!!), там написано что за конфигурацию порта отвечают два регистра GPIOx_CRL (младший. от 0 до 7) и GPIOx_CRH (Старший, от 8 по 15). я попробовал настроить как сказано в статье, но компилятор ругается на строчку

Код: Выделить всё

GPIOD->CRH |=0x33;
и выдает ошибку

Код: Выделить всё

D:\ARM\Prodject\CoIDE\Lesson 2\main.c:7:7: error: 'GPIO_TypeDef' has no member named 'CRH'
получается что компилятор не может найти регистр CRH? Я пытался найти в библиотеке stm32f4xx_gpio.h что-то похожее на CRH но у вы нечего нет, и в datasheet тоже нечего не сказано про этот регистр(( Это что получается, регистр CRH вымышленный человеком который писал библиотеку для CoIDE и он в реале состоит из нескольких регистров?
Подскажите пожалуйста, как правильно настроить GPIOx в CoIDE версии 1.7.5?(больше всего интересует синтаксис)
Где можно найти описание на стандартные библиотеки CoIDE?(help не предлагать, я так и не понял как он работает( )

P.S. Отладочная плата STM32F4Descovery c контролером STM32F407VG.

Спасибо за внимание! :))

Запустил демо пример из CoIDE и там есть вот такие строчки:

Код: Выделить всё

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13| GPIO_Pin_14| GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_Init(GPIOD, &GPIO_InitStructure);
Это все отлично компилируется и работает в железе, но у меня возник очередной глупый вопрос. В моем понимание при таком решении настройки портов GPIOx я не могу настроить половину портов на вход и половину на выход(пример: pin12,13 на выход / pin 14,15 на вход). Это так? В общем задача такова: мне надо настроить порт следующим образом pin12,13 на выход / pin 14,15 на вход, как мне это сделать?
STM32F4 Discovery + KEIL + Windows 7
Прорезались зубы
Сообщения: 220
Зарегистрирован: Пт авг 07, 2009 22:06:49
Откуда: Россия, Москва

Сообщение Mr.Denis »

Вроде разобрался. я тут на радостях поставил сам себе задачу и сам попробовал ее решить. и так задача:

Настроить пины порта D следующим образом, PD15, PD14, PD13, PD12, PD10 как выход, а PD11 как вход.
Настроить скорость PD12= 2Mhz, PD13= 25Mhz, PD14= 100Mhz, PD15=50Mhz.
Настроить PD13 в режим Pull-up/
Настроить пины PD15, PD14, PD13, PD12, PD10 как Push-pull, а пин PD11 как Open-Drain.

Решение:(Я смог это реализовать только так!)

Код: Выделить всё

  GPIOD->MODER = 0x55100000; 
  GPIOD->OTYPER = 0x00000800;
  GPIOD->OSPEEDR = 0xb4000000;
  GPIOD->PUPDR = 04000000;
Друзья, если вас не затруднит проверьте пожалуйста на правильность(В железе работает). Может есть способ более простой или правильный?

P.S. Подскажите что означает Push-pull, как с ним работать, для каких целей используется? Еще интересует что значит открытый коллектор и с чем его едят?
STM32F4 Discovery + KEIL + Windows 7
Ответить

Вернуться в «ARM»