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

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Встал на лапы
Сообщения: 145
Зарегистрирован: Ср фев 01, 2012 10:55:53

Сообщение BorisSPB »

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

Reset_Handler

        LDR     R0, =SystemInit
        BLX     R0
        LDR     R0, =__iar_program_start
        BX      R0
SystemInit() настраивает тактирование, __iar_program_start() - библиотечная функция, инициализирует память и вызывает main(). Именно в __iar_program_start() осуществляется инициализация ОЗУ, обнуление и копирование.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

В дебаггере пошагать не судьба ?
Все видно что,где, и как ...
СпойлерИзображение
Изображение
Реклама
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Сообщение pokk »

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

В дебаггере пошагать не судьба ?
Хорошо бы было а как от туда начать ?
СпойлерИзображение
Вот тут я и галочку убирал и чего только туда не писал, запускается сразу и пока остановишь уже фиг знает куда он убежал.

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

__iar_program_start() - библиотечная функция, инициализирует память и вызывает main().
Это очень хорошо а как её отыскать можно ?
Функцию SystemInit сразу нашёл а это все файлы облазил и не видать.
Последний раз редактировалось pokk Ср дек 04, 2013 11:33:17, всего редактировалось 1 раз.
Встал на лапы
Сообщения: 145
Зарегистрирован: Ср фев 01, 2012 10:55:53

Сообщение BorisSPB »

Можно поставить брейкпойнт на Reset_Handler и запуститься.
Кстати в Keil загрузка выглядит так:
СпойлерИзображение
Вложения
debug.JPG
(129.42 КБ) 2644 скачивания
Реклама
Эиком - электронные компоненты и радиодетали
Опытный кот
Аватара пользователя
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

Сообщение coredumped »

я просто хожу узнать сколько мой код занимает ПЗУ ОЗУ.
Код:
21 672 bytes of readonly code memory
70 420 bytes of readonly data memory
101 512 bytes of readwrite data memory
Не знаю, как точно в IAR, а в Keil так: RAM = RW Data + ZI Data, Flash = Code + RO Data + RW Data
У Вас, по идее Flash = 21 672 bytes of readonly code memory + 70 420 bytes of readonly data memory + 101 512 bytes of readwrite data memory,
а RAM = 101 512 bytes of readwrite data memory. На самом деле для RAM еще нужно добавить размер стека (stack) и размер "кучи" (heap) - они не входят в объем, который показывает компилятор. Размер стека и "кучи" задается в файле startup_xxx.s
Все будет только лучше, в крайнем случае - хуже.
Реклама
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Сообщение pokk »

Flash = Code + RO Data + RW Data
А что за RW Data? это типа которая в озу пере копируется?

dosikus, А что у вас за шкала времени на первом скрине?
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

pokk писал(а): dosikus, А что у вас за шкала времени на первом скрине?
Почитайте справку IAR на тему C-spy , trace, SWO и иже с ними ...

Собственно сие вывод графов :
СпойлерИзображение
Опытный кот
Аватара пользователя
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

Сообщение coredumped »

pokk писал(а):
А что за RW Data? это типа которая в озу пере копируется?
RO Data - константы, размещенные в Flash
RW Data - переменные в RAM, для них генерировался код инициализации, соотв. есть массив в Flаsh с их начальными значениями.
ZI Data - "Zero Initialized" - переменные в RAM, которым не присваивались начальные значения, те для них не нет массива с нач. значениями, и их при старте обнулили и все.
Все будет только лучше, в крайнем случае - хуже.
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Сообщение pokk »

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

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

Здравствуйте! Целую неделю не мог уделить STM32, и вот наконец получилось.)))
Как и советовал мне наш друг dosikus, создал проект как указанно в этом посте http://kazus.ru/forums/showpost.php?p=6 ... stcount=30.
После чего провел все действия как в посте http://kazus.ru/forums/showpost.php?p=6 ... stcount=37, только кварц у казал на 8!
Далее скомпилировал проект кнопкой F7, код проекта(Скопированный, для первого пуска!):

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

#include "stm32f4xx.h"
int main(void) {
  
          RCC ->AHB1ENR |= RCC_AHB1ENR_GPIODEN ;

          GPIOD ->MODER|= 
          GPIO_MODER_MODER14_0 |
          GPIO_MODER_MODER13_0          
          ;    
          GPIOD->OSPEEDR |=
          GPIO_OSPEEDER_OSPEEDR14_1 |
          GPIO_OSPEEDER_OSPEEDR13_1 
          ;    
        
        while (1)

        {
         GPIOD->BSRRL  =  GPIO_BSRR_BS_14; 
      
         GPIOD->BSRRL  =  GPIO_BSRR_BS_13;

        }

}
Результат компиляции:

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


Build target 'STM32F4'
linking...
Program Size: Code=940 RO-data=424 RW-data=20 ZI-data=1636  
FromELF: creating hex file...
".\Lesson1.axf" - 0 Error(s), 0 Warning(s).
После чего кнопкой Download залил его в МК, ниже результат:

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

Load "D:\\ARM\\Prodject\\Keil\\Lesson1\\Lesson1.axf" 
Erase Done.
Programming Done.
Verify OK.
И по моей идеи должны были загореться два светодиода расположенных на порте D, пины 13 и 14.
Но светодиоды не загораются(((, в чем может быть причина? Где я что не так сделал?
В приложение проект, может найдете время посмотреть.
Вложения
Lesson1.rar
(324.81 КБ) 178 скачиваний
STM32F4 Discovery + KEIL + Windows 7
Прорезались зубы
Аватара пользователя
Сообщения: 232
Зарегистрирован: Вт май 08, 2012 10:42:29

Сообщение optima »

Вобще то светодиод должен загоратся не 1 а 0! как у тебя подключен светодиод?
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

Mr.Denis в опциях проекта вместо 168МГц поставь 8МГц .
На вкладке Utilities установить Reset and Run .
Остальное смогу проверить только завтра .
СпойлерИзображение
Изображение
optima писал(а):светодиод должен загоратся не 1 а 0! как у тебя подключен светодиод
А посмотреть в схеме дискавери не судьба ? :)))

Изображение
Последний раз редактировалось dosikus Вс дек 08, 2013 08:41:31, всего редактировалось 1 раз.
Прорезались зубы
Сообщения: 220
Зарегистрирован: Пт авг 07, 2009 22:06:49
Откуда: Россия, Москва

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

dosikus, привет! Спасибо, все заработало.
Буду дальше пробовать эксперименты ставить :))

Еще хочу сделать функцию задержки, но не через цикл! Может попробовать сделать через таймер или есть более правильные и корректные варианты?
STM32F4 Discovery + KEIL + Windows 7
Прорезались зубы
Сообщения: 210
Зарегистрирован: Пн окт 21, 2013 07:33:45

Сообщение FPGAlover »

Добрый день! Постеснялся организовывать новую тему и решил отписать сюда :-)
У меня проблема следующего характера, может кто сталкивался.
Запрограммировал УСБ на stm32f205 (плата самодельная). Работает прекрасно, но только покуда в JTAGE торчит J-link (линии земли и питания имеют значение, остальные рояля не играют). При этом не имеет значения подключен ли сам отладчик по усб к компу. проверял Питание на разъеме при воткнутом и выткнутом отладчике - 3.3V в обоих случаях.
Напрашивается вывод о дополнительной фильтрующей емкости, однако обвеску контроллера делал в соответствии с рекомендациями производителя.
Если кто сталкивался - подскажите плиз :-)
Шоб я польку танцевал..
Прорезались зубы
Сообщения: 210
Зарегистрирован: Пн окт 21, 2013 07:33:45

Сообщение FPGAlover »

Прошу прощения.
FPGAlover писал(а):Напрашивается вывод о дополнительной фильтрующей емкости
Так оно и было - просмотр платы показал, что я забыл кренку емкостями обвешать :shock:
Шоб я польку танцевал..
Прорезались зубы
Сообщения: 220
Зарегистрирован: Пт авг 07, 2009 22:06:49
Откуда: Россия, Москва

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

Решил проблему :))
Осталось понять с задержкой.
STM32F4 Discovery + KEIL + Windows 7
Грызет канифоль
Аватара пользователя
Сообщения: 271
Зарегистрирован: Вт авг 09, 2011 15:01:44
Откуда: Харьков

Сообщение drakon »

Mr.Denis, есть кое-что на системном таймере.
Вложения
delay_v1.2.rar
(1.75 КБ) 210 скачиваний
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

Mr.Denis писал(а):Решил проблему :))
Осталось понять с задержкой.
Посмотри пока у drakon , а завтра подкину...
Прорезались зубы
Сообщения: 220
Зарегистрирован: Пт авг 07, 2009 22:06:49
Откуда: Россия, Москва

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

Спасибо мужики, обязательно посмотрю и попробую разобраться!)

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

#include "stm32f4xx.h"
int main(void) {
  
          RCC ->AHB1ENR |= RCC_AHB1ENR_GPIODEN ; // Тактирование PORT D
	  RCC ->AHB1ENR |= RCC_AHB1ENR_GPIOAEN ; // Тактирование PORT A

          GPIOD ->MODER|= GPIO_MODER_MODER14_0 | GPIO_MODER_MODER13_0; // Настройка PORT D, pin 13,14 как выход       
          GPIOD->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR14_1 |  GPIO_OSPEEDER_OSPEEDR13_1; // Настройка скорости 50 MHz PORT D, pin 13,14 
       	  GPIOA->PUPDR |= GPIO_PUPDR_PUPDR0_1; // Включение подтяжки к PORT A, Pin 0.
				
        while (1)

        {
         
				 if((GPIOA->IDR & 0x01) == 0x01) // Проверка на нажатие кнопки подключенной к PORT A, pin 0.
{
         GPIOD->BSRRL  |=  GPIO_BSRR_BS_14 | GPIO_BSRR_BS_13; // Включение LED
				 				 }else{
	 GPIOD->BSRRH  |= GPIO_BSRR_BS_14 | GPIO_BSRR_BS_13; // Выключение LED
								 }
        }

}

Я тут набросал первый проект, можете посмотреть на сколько правильно сделано.
З.Ы. В железе работает так как и задумано.
STM32F4 Discovery + KEIL + Windows 7
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

Mr.Denis писал(а): можете посмотреть на сколько правильно сделано.
Ну дык включен пуллап , а проверяшь пин на 1 .
При нажатой кнопке ловится 0.
А так - читать про дребезг .
И желательно биты портов всегда конфигурировать явно , не надеясь на умолчания ...
Ответить

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