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

Кто любит RISC в жизни, заходим, не стесняемся.
спящий
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

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

Сообщение спящий »

Проблема решена! я просто думал что внешнее прерывание это переферия,и настроил вход как переферию,убрал - заработало нормально.
Подскажите как сделать чтобы сразуже небыло прерывание как только запускаех прогу,а только при нажатии кнопки.Вроде даже флаг сбрасывал а прерывание есть.
Аватара пользователя
Кислый
Поставщик валерьянки для Кота
Сообщения: 2095
Зарегистрирован: Чт апр 08, 2010 18:50:01
Откуда: Краснодар
Контактная информация:

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

Сообщение Кислый »

Собрал туллчейн, при конфигурировании надо было указать ключ --with-float= я указал тип soft. В arm cm3 ведь нет hw поддержки операций с плавающей точкой ?
RETI ;рети-рети интеррапт, через шины данных тракт, через память, через порт, возвращайся в главный код
@hobbyelectronics
Аватара пользователя
Кислый
Поставщик валерьянки для Кота
Сообщения: 2095
Зарегистрирован: Чт апр 08, 2010 18:50:01
Откуда: Краснодар
Контактная информация:

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

Сообщение Кислый »

где-то на EE.ru был цикл статей по программированию stm32 на асме и си , без перифрал либрари. не могу найти. мб подскажете ?
RETI ;рети-рети интеррапт, через шины данных тракт, через память, через порт, возвращайся в главный код
@hobbyelectronics
Аватара пользователя
menzoda
Вымогатель припоя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

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

Сообщение menzoda »

Лично я никогда не использую библиотеки периферии от производителя. Считаю, что они представляют собой средней паршивости код, предназначенный для средней паршивости пользователя с задачами средней паршивости. Вроде помигать светодиодом стащив пример из интернета и не вдаваясь в подробности.

Если объективно, то они скрывают особенности железа, которые эмбедщику просто необходимо знать, и к тому же они не дают полностью раскрыть его (железа) потенциал. Но это все лирика. Для того, чтобы научиться программированию без этого мусора не нужны никакие статьи! Берете даташит и читаете назначение регистров и принципы работы интересующей периферии, и пробуете, пробуете, пробуете. Если уж совсем ничего не выходит, можно спросить здесь. Таким образом вы точно будете знать как устроена периферия, на что она способна, на что не способна, сможете использовать ее оптимальным, наиболее подходящим для вас образом.
Аватара пользователя
Кислый
Поставщик валерьянки для Кота
Сообщения: 2095
Зарегистрирован: Чт апр 08, 2010 18:50:01
Откуда: Краснодар
Контактная информация:

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

Сообщение Кислый »

Я не спорю. Но мне надо человечка обучить.
кстате, киньте пример кода без стм'ных библиотек переферии. хоцца посмотреть
RETI ;рети-рети интеррапт, через шины данных тракт, через память, через порт, возвращайся в главный код
@hobbyelectronics
Аватара пользователя
menzoda
Вымогатель припоя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

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

Сообщение menzoda »

Ну вот некоторые выдержки. По моему намного понятнее, компактнее и красивее, чем с библиотеками.

Базовая системная настройка настройка (PLL, частоты AHB и APB, FLASH).

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

RCC->CR |= RCC_CR_HSEON;
while (RCC->CR & RCC_CR_HSERDY == 0);

FLASH->ACR |=
   FLASH_ACR_LATENCY_0 |
   FLASH_ACR_LATENCY_1 |
   FLASH_ACR_PRFTEN |
   FLASH_ACR_ICEN |
   FLASH_ACR_DCEN;

RCC->CFGR |=
   RCC_CFGR_PPRE1_0 |
   RCC_CFGR_PPRE1_1 |
   RCC_CFGR_PPRE2_2;

RCC->PLLCFGR |=
   RCC_PLLCFGR_PLLM_3 |
   RCC_PLLCFGR_PLLN_3 |
   RCC_PLLCFGR_PLLN_4 |
   RCC_PLLCFGR_PLLN_5 |
   RCC_PLLCFGR_PLLN_6 |
   RCC_PLLCFGR_PLLQ_0 |
   RCC_PLLCFGR_PLLQ_2 |
   RCC_PLLCFGR_PLLSRC;

RCC->CR |= RCC_CR_PLLON;
while (RCC->CR & RCC_CR_PLLRDY == 0);

RCC->CFGR |= RCC_CFGR_SW_0 | RCC_CFGR_SW_1;
while (RCC->CFGR & RCC_CFGR_SWS != RCC_CFGR_SWS);   


Настройка ЦАП.

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

RCC->APB1ENR |= RCC_APB1ENR_DACEN;
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;

GPIOA->MODER |= GPIO_MODER_MODER4_0 | GPIO_MODER_MODER4_1;
DAC->CR |= DAC_CR_EN1;


Настройка SPI.

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

RCC->AHB1ENR |= 
   RCC_AHB1ENR_GPIOCEN;

GPIOC->MODER |=
   GPIO_MODER_MODER10_1 |
   GPIO_MODER_MODER11_1 |
   GPIO_MODER_MODER12_1;

GPIOC->AFRH |=
   GPIO_AFRH_AFRH10_1 |
   GPIO_AFRH_AFRH10_2 |
   GPIO_AFRH_AFRH11_1 |
   GPIO_AFRH_AFRH11_2 |
   GPIO_AFRH_AFRH12_1 |
   GPIO_AFRH_AFRH12_2;

GPIOC->OSPEEDR |=
   GPIO_OSPEEDER_OSPEEDR10_0 |
   GPIO_OSPEEDER_OSPEEDR11_0 |
   GPIO_OSPEEDER_OSPEEDR12_0;

GPIOC->PUPDR |=
   GPIO_PUPDR_PUPDR10_1 |
   //GPIO_PUPDR_PUPDR11_1 |
   GPIO_PUPDR_PUPDR12_0;

GPIOC->OTYPER &=
   ~GPIO_OTYPER_OT_10 &
   ~GPIO_OTYPER_OT_12;
   
RCC->APB1ENR |=   RCC_APB1ENR_SPI3EN;
   
SPI3->CR1 |=
   SPI_CR1_MSTR |
   SPI_CR1_BR_0 |
   SPI_CR1_BR_1 |
   SPI_CR1_SSM |
   SPI_CR1_SSI |
   SPI_CR1_DFF |
   SPI_CR1_SPE;


Хотел до кучи пару файликов приложить, но что-то не разберусь как тут это работает.
bolek
Сверлит текстолит когтями
Сообщения: 1179
Зарегистрирован: Пт авг 21, 2009 03:22:12

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

Сообщение bolek »

menzoda писал(а):Лично я никогда не использую библиотеки периферии от производителя. Считаю, что они представляют собой средней паршивости код, предназначенный для средней паршивости пользователя с задачами средней паршивости... Берете даташит и читаете назначение регистров и принципы работы интересующей периферии, и пробуете, пробуете, пробуете. Таким образом вы точно будете знать как устроена периферия, на что она способна, на что не способна, сможете использовать ее оптимальным, наиболее подходящим для вас образом.
Если есть пара лишних лет жизни, и еще лет 5 в перспективе - использования этих МК, то подход правильный. А если нужно быстро решить задачку и переключиться на другую - нет.
И если заказчик/начальник в ухо пыхтит - скорее, скорее, срок сдачи такой-то - тоже не будет времени долго рассиживаться и досконально изучать все регистры и периферию.
Всем нужно нужно быстрее и обязательно с положительным результатом и никого не интересует, что на изучение нового МК и среды программирования нужно время.
"Как, ты не знаком с этим МК? Какое такое время на изучение? Не, значит ты хреновый специалист, надо тебе зарплату понизить или взять другого, который все умеет..."
Примерно так.

И, кстати, menzoda, что дает Ваш "красивый и понятный" код по сравнению со стандартными библиотеками? Более компактный и быстрый код? Насколько (если вообще дает)?
И потом, инициализация железа - это такая мелочь при решении задачи, экономию на которой можно вообще не принимать во внимание: на скорость выполнения собственно задачи она никакого влияния не оказывает, здесь гораздо актуальнее правильный, оптимальный алгоритм.
Последний раз редактировалось bolek Чт янв 03, 2013 15:28:58, всего редактировалось 1 раз.
Аватара пользователя
menzoda
Вымогатель припоя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

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

Сообщение menzoda »

Выучив периферию одного МК, можно легко освоить периферию другого, благо они все почти одинаково устроены. Взять тот же UART, SPI, ADC. Хотя нет... Какой к черту освоить? Там только по даташиту глазами пробежаться, и чем больше опыта, тем быстрее можно пробегаться. В противоположность этому, выучив периферийную библиотеку одного МК, на другой МК просто так не перейдешь. Другая библиотека может быть (и скорее всего будет) устроена по-другому. Это раз.

Если человек не дурак, имеет технический склад ума и дружит с логикой, то даже с нуля ему будет несложно разобраться с голой периферией. Ну а дальше, как я уже сказал будет только легче. Так что, про какие 2 года свободного времени идет речь, я не понимаю. Это два.

Ну и напоследок. Библиотеки предназначены для решения типичных задач. Реализовать с помощью них что-нибудь сложнее мигания светодиодом и тупой пересылке по UART, будет ощутимо сложнее и костыльнее. Это три.


ПС. Если человек сам не хочет (или не может - ну не технарь он и все) изучать и познавать что-то новое, прилагать умственных усилий, то конечно все сказанное мной выше отменяется.

ППС. Да, в итоге более быстрый, компактный, легкий в понимании другими код.
bolek
Сверлит текстолит когтями
Сообщения: 1179
Зарегистрирован: Пт авг 21, 2009 03:22:12

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

Сообщение bolek »

menzoda писал(а):... Библиотеки предназначены для решения типичных задач. Реализовать с помощью них что-нибудь сложнее мигания светодиодом и тупой пересылке по UART, будет ощутимо сложнее и костыльнее....
Ага-ага: для каждого МК нужно самостоятельно написать с нуля RTOS. А готовые библиотеки используют только ламеры, настоящие программеры все пишут сами, потому что другие программеры все чайники и быдлокодеры поголовно. :))
Концепция не новая. :))
Аватара пользователя
menzoda
Вымогатель припоя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

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

Сообщение menzoda »

Ну давай, тыкни меня носом в то место где я говорил про RTOS. Речь шла о библиотеке периферии. Работа с периферией настолько простая штука, что использование совершенно ненужной библиотеки оправдывается только тонной старого кода, использующего эту библиотеку, и ленью программиста изучать что-то новое. Заметь, я не говорю про ОС, сетевые стеки, графические библиотеки и т.п., потому что это действительно весьма сложные штуки, которые самому писать довольно долго.

Да и вообще, большинство вопросов на форуме касаются различных электронных поделок "для себя". Люди, которые их делают, не отягощены "старым" кодом и не ограничены во времени. Они могут использовать любые доступные технологии, а не только те, которые одобрил начальник. Так почему же не воспользоваться таким замечательным шансом изучить что-то новое? Да в таком случае и RTOS самому можно написать, ведь это отличный опыт!

Ан нет. Давайте всем советовать готовые библиотеки и давать готовые куски кода. Будем растить ардуинщиков, которые просто печатают и копипастят с пустой головой, а потом выкладывают сюда откровенную хрень и спрашивают, почему же у них лампочка не горит.

Еще раз замечу, что это не касается производства: там свои законы. Есть старый код - изволь поддерживать, начальник разрешил использовать только библиотеки - изволь подчиняться.
спящий
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

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

Сообщение спящий »

Помогите написать код одной строчкой, считать с входа в массив 0 или 1


code[cod_bit]=PINA.2; //запсиь в массив это я писал для АВР
cod_bit++;


GPIOA->IDR & GPIO_IDR_IDR0 надо считать GPIO_IDR_IDR0 в массив
что-то типо:


code[cod_bit]= GPIOA->IDR только состояние этой кнопки(GPIO_IDR_IDR0).
cod_bit++;
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

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

Сообщение HHIMERA »

bolek писал(а):И потом, инициализация железа - это такая мелочь при решении задачи, экономию на которой можно вообще не принимать во внимание: на скорость выполнения собственно задачи она никакого влияния не оказывает, здесь гораздо актуальнее правильный, оптимальный алгоритм.

Зависит от задачи...
А вообще... "правильный, оптимальный алгоритм" без знания железа - фикция, блеф, сказки для непосвящённых...

bolek писал(а): А готовые библиотеки используют только ламеры, настоящие программеры все пишут сами, потому что другие программеры все чайники и быдлокодеры поголовно. :))

100%... с этим не поспоришь... :))
"Я не даю готовых решений, я заставляю думать!"(С)
Аватара пользователя
menzoda
Вымогатель припоя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

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

Сообщение menzoda »

спящий писал(а):Помогите написать код одной строчкой, считать с входа в массив 0 или 1



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

code[cod_bit++]= GPIOA->IDR >> НОМЕР_БИТА & 1
спящий
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

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

Сообщение спящий »

тоесть вот так?:

code[cod_bit]= GPIOC->IDR&GPIO_OTYPER_IDR_0;
cod_bit++;
Аватара пользователя
menzoda
Вымогатель припоя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

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

Сообщение menzoda »

Если бит нулевой, то да, но ведь просили в одну строчку :) , поэтому:
code[cod_bit++]= GPIOC->IDR&GPIO_OTYPER_IDR_0;
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

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

Сообщение КАШАК »

Где можно почитать про назначение BOOT0 и BOOT1 ? И если в МК есть аппаратный USB, через него можно прошивать? МК STM32F103VCT6.
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Аватара пользователя
menzoda
Вымогатель припоя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

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

Сообщение menzoda »

Товарищи! В 99.99% случаев вся информация по МК, которая вам нужна находится в соответствующем документе от производителя. Этот случай не исключение. Раздел 3.4.
polyname
Прорезались зубы
Сообщения: 249
Зарегистрирован: Пт май 18, 2012 23:12:23

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

Сообщение polyname »

Помогите написать код одной строчкой, считать с входа в массив 0 или 1
для этого придуман Bit banding (чтение/запись бита одной командой):

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

   //ARM Cortex BitBand access macros
   #define BITBAND_PERI_REF   0x40000000
   #define BITBAND_PERI_BASE  0x42000000
   // Convert PERIPHERAL address
   #define BITBAND_PERI(addr, bit) ((volatile U8 *)((BITBAND_PERI_BASE + ((U32)(addr)-BITBAND_PERI_REF)*32 + (bit*4))))
   #define BITP( addr, bit ) (BITBAND_PERI(addr,bit))


и использование:

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

code[cod_bit] = *BITP(&GPIOA->IDR, 1);
Аватара пользователя
КАШАК
Это не хвост, это антенна
Сообщения: 1303
Зарегистрирован: Вс апр 19, 2009 17:20:22
Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
Контактная информация:

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

Сообщение КАШАК »

Спасибо :)
Опыт растет прямо пропорционально выведенному из строя оборудованию...
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

А для чего такие сложности, если можно сделать проще:

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

code[cod_bit] = (GPIOA->IDR&(1<<5))!=0;  // Укладываем значение 5-ого бита в массив
?
Ответить

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