Asstr Stm Cheer

Asstr Stm Cheer



⚡ 👉🏻👉🏻👉🏻 INFORMATION AVAILABLE CLICK HERE 👈🏻👈🏻👈🏻

































Запомнить меня Не рекомендуется на общедоступных компьютерах


Главная
Сайт и форум
└─  Новости и обсуждения сайта и форума
    └─  Замечания и предложения по новому форуму
└─  Другие известные форумы и сайты по электронике
    └─  Магазины
    └─  Форумы и конференции
    └─  Производители
    └─  Информационные ресурсы
    └─  Поисковики
    └─  FTP-серверы
└─  В помощь начинающему
    └─  ARM, 32bit
    └─  MCS51, AVR, PIC, STM8, 8bit
    └─  Программирование
    └─  Схемотехника
    └─  Интерфейсы
└─  International Forum
└─  Образование в области электроники
    └─  Решение задач
└─  Обучающие видео-материалы и обмен опытом
Cистемный уровень проектирования
└─  Вопросы системного уровня проектирования
└─  Математика и Физика
└─  Операционные системы
    └─  Программирование
    └─  Linux
    └─  uC/OS-II
    └─  scmRTOS
    └─  FreeRTOS
    └─  Android
└─  Документация
└─  Системы CAD/CAM/CAE/PLM
└─  Разработка цифровых, аналоговых, аналого-цифровых ИС
└─  Электробезопасность и ЭМС
    └─  ЭМС
    └─  Электробезопасность
└─  Управление проектами
└─  Нейронные сети и машинное обучение (NN/ML)
Программируемая логика ПЛИС (FPGA,CPLD, PLD)
└─  Среды разработки - обсуждаем САПРы
└─  Работаем с ПЛИС, области применения, выбор
└─  Языки проектирования на ПЛИС (FPGA)
└─  Системы на ПЛИС - System on a Programmable Chip (SoPC)
Цифровая обработка сигналов - ЦОС (DSP)
└─  Сигнальные процессоры и их программирование - DSP
└─  Алгоритмы ЦОС (DSP)
Микроконтроллеры (MCs)
└─  Cредства разработки для МК
    └─  IAR
    └─  Keil
    └─  GNU/OpenSource средства разработки
└─  ARM
    └─  STM
    └─  NXP
    └─  Microchip (Atmel)
    └─  TI, Allwinner, Nordic Semiconductor, Espressif Systems и другие
└─  AVR
└─  MSP430
└─  Все остальные микроконтроллеры
    └─  PIC
    └─  MCS51
    └─  PowerQUICC
    └─  HC(S)08
    └─  AVR32
    └─  STM8
    └─  MIPS
└─  Отладочные платы
    └─  Arduino
    └─  Raspberry Pi
    └─  Rainbow
    └─  Siberia
    └─  EVMxxxx
Печатные платы (PCB)
└─  Разрабатываем ПП в САПР - PCB development
    └─  Библиотеки компонентов
    └─  Altium Designer, DXP, Protel
    └─  P-CAD 200x howto
    └─  Эремекс, Delta Design
    └─  Cadence
    └─  Примеры
    └─  Zuken CADSTAR
    └─  Mentor Xpedition Enterprise, PADS
    └─  KiCAD
└─  Работаем с трассировкой
    └─  Примеры плат
└─  Изготовление ПП - PCB manufacturing
    └─  ПСБ Технолоджи
    └─  ТеПро
    └─  PS-Electro
    └─  Резонит
    └─  Компри-М
    └─  PCB Professional
    └─  Абрис
    └─  ОАО "НИЦЭВТ"
    └─  ООО "М-Плата"
    └─  в домашних условиях
Сборка РЭУ
└─  Пайка и монтаж
└─  Корпуса
└─  Вопросы надежности и испытаний
    └─  Спецфакторы и радиационная стойкость
Аналоговая и цифровая техника, прикладная электроника
└─  Вопросы аналоговой техники
    └─  Операционные усилители и АЦП
└─  Цифровые схемы, высокоскоростные ЦС
└─  Rf & Microwave Design
└─  Метрология, датчики, измерительная техника
    └─  Оптика и оптоэлектроника
└─  АВТО электроника
└─  Умный дом
└─  3D печать
└─  Робототехника
└─  Ремонт и отладка
Силовая Электроника - Power Electronics
└─  Силовая Преобразовательная Техника
└─  Обратная Связь, Стабилизация, Регулирование, Компенсация
└─  Первичные и Вторичные Химические Источники Питания
└─  Высоковольтные Устройства - High-Voltage
└─  Электрические машины, Электропривод и Управление
└─  Индукционный Нагрев - Induction Heating
└─  Системы Охлаждения, Тепловой Расчет – Cooling Systems
└─  Моделирование и Анализ Силовых Устройств – Power Supply Simulation
└─  Компоненты Силовой Электроники - Parts for Power Supply Design
Интерфейсы
└─  Форумы по интерфейсам
    └─  ISDN/G.703/E1
    └─  ISA/PCI/PCI-X/PCI Express
    └─  Wireless/Optic
    └─  RS232/LPT/USB/PCMCIA/FireWire
    └─  Fast Ethernet/Gigabit Ethernet/FibreChannel
    └─  Интерфейсы для "интеллектуального дома"
    └─  от ТТЛ до LVDS здесь
    └─  IDE/ATA/SATA/SAS/SCSI/CF
    └─  Аудио/Видео интерфейсы
    └─  Сотовая связь и ее приложения
    └─  FAQ по XPort/WiPort
    └─  Controller Area Network (CAN)
Поставщики компонентов для электроники
└─  Поставщики всего остального
└─  Компоненты
    └─  Тех. документация
    └─  Микросхемы
    └─  Транзисторы
    └─  Диоды
    └─  Резисторы
    └─  Средства индикации
Майнеры криптовалют и их разработка, BitCoin, LightCoin, Dash, Zcash, Эфир
└─  Обсуждение Майнеров, их поставки и производства
Дополнительные разделы - Additional sections
└─  Встречи и поздравления
└─  Ищу работу
└─  Предлагаю работу
└─  Куплю
└─  Продам
└─  Объявления пользователей
└─  Общение заказчиков и потребителей электронных разработок
bolmoe    0
Частый гость
Свой
0
125 публикаций
Город:Рязань
Регистрация: 05.04.2006
Попытался разместить стек и кучу в ССМ памяти. Делал все через скаттер файл.
В отладке вижу, что стек лег по нужному адресу.
А вот с heap проблемы. Первый же вызов malloc() и программа сваливается в HardFault_Handler().
Попробовал heap вернуть по адресу внутренней RAM 0х20000000 - все ОК.
Изменено 24 мая 2017 пользователем IgorKossak
[codebox] для длинного кода, [code] - для короткого!
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах
x893    0
Гуру
Свой
0
2 599 публикаций
Город:Планета Земля
Регистрация: 27.10.2008
*((uint32_t *)address_from_malloc) = 0xDEADBEEF;
*((uint8_t *)address_from_malloc) = 0xDE;
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах
jcxz    0
Гуру
Свой
0
9 369 публикаций
Город:Рига
Регистрация: 03.07.2008
Расположение объектов в памяти смотрят не по main(), а по .map-файлу.
ЗЫ: В хорошо написанной embedded-программе не должно быть кучи (чего угодно ;)
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах
bolmoe    0
Частый гость
Свой
0
125 публикаций
Город:Рязань
Регистрация: 05.04.2006
ЗЫ: В хорошо написанной embedded-программе не должно быть кучи (чего угодно ;)
Image$$ARM_LIB_HEAP$$ZI$$Base 0x01000000 Number 0 anon$$obj.o(ARM_LIB_HEAP.bss)
Image$$ARM_LIB_HEAP$$ZI$$Limit 0x01000800 Number 0 anon$$obj.o(ARM_LIB_HEAP.bss)
Load Region LR_IROM1 (Base: 0x08000000, Size: 0x00000d5c, Max: 0x00080000, ABSOLUTE)
Execution Region ARM_LIB_HEAP (Base: 0x01000000, Size: 0x00000800, Max: 0x00000800, ABSOLUTE, UNINIT)
Base Addr Size Type Attr Idx E Section Name Object
0x01000000 0x00000800 Zero RW 2 ARM_LIB_HEAP.bss anon$$obj.o
а в main() я смотрел через debugger, который доходит до malloc() и сваливается в hardfault...
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах
Сергей Борщ    0
Гуру
Модераторы
0
9 562 публикации
Город:Рига, Латвия
Регистрация: 15.05.2006
Простите, а тактирование CCM (бит CCMDATARAMEN) вы не забыли включить?
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах
scifi    0
Гуру
Свой
0
3 085 публикаций
Регистрация: 07.02.2007
а в main() я смотрел через debugger, который доходит до malloc() и сваливается в hardfault...
Кстати, можно и поотлаживать Hard Fault, хоть и в дизассемблере. Сдаётся мне, что причина быстро обнаружится.
Простите, а тактирование CCM (бит CCMDATARAMEN) вы не забыли включить?
Он уже включен после сброса, ЕМНИП.
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах
bolmoe    0
Частый гость
Свой
0
125 публикаций
Город:Рязань
Регистрация: 05.04.2006
*((uint32_t *)address_from_malloc) = 0xDEADBEEF;
*((uint8_t *)address_from_malloc) = 0xDE;
malloc ничего не возвращает, в "режиме отладки" доходит до выделения памяти и в самом malloc() при выполнении
0x08000CBE E9C02400 STRD r2,r4,[r0,#0] следующим шагом в HardFault_Handler(void)
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах
jcxz    0
Гуру
Свой
0
9 369 публикаций
Город:Рига
Регистрация: 03.07.2008
0x08000CBE E9C02400 STRD r2,r4,[r0,#0] следующим шагом в HardFault_Handler(void)
Очевидно что в этом месте в R0 - недопустимое значение. Приведите его.
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах
bolmoe    0
Частый гость
Свой
0
125 публикаций
Город:Рязань
Регистрация: 05.04.2006
Простите, а тактирование CCM (бит CCMDATARAMEN) вы не забыли включить?
__HAL_RCC_CCMDATARAMEN_IS_CLK_ENABLED();
Очевидно что в этом месте в R0 - недопустимое значение. Приведите его.
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах
jcxz    0
Гуру
Свой
0
9 369 публикаций
Город:Рига
Регистрация: 03.07.2008
Ну вот и ответ. Сравните с тем, что Вы писали в первом сообщении. Для стека и для кучи.
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах
bolmoe    0
Частый гость
Свой
0
125 публикаций
Город:Рязань
Регистрация: 05.04.2006
СПАСИБО за ответы, я сам отчудил. Извините ....
адрес для HEAP указал 0х0100 0000 вместо 0x1000 0000
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах
jcxz    0
Гуру
Свой
0
9 369 публикаций
Город:Рига
Регистрация: 03.07.2008
СПАСИБО за ответы, я сам отчудил. Извините ....
вот для чего полезно иметь в проге обработчик HF...
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах
x893    0
Гуру
Свой
0
2 599 публикаций
Город:Планета Земля
Регистрация: 27.10.2008
А еще полезнее уметь находить решение таких простых проблем
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста
×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку
×   Ваш предыдущий контент был восстановлен.   Очистить редактор
×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Удаленная работа для IT-специалистов
Уже, наверное, прошло время религиозных войн AVR против STM, но нет-нет да наблюдаются вспышки столкновений двух лагерей. Практически у любой публикации на тему поделок на AVR обязательно будет каммент вроде «Да сколько уже можно лохматить бабушку, давно пора перейти на STM», дальше вариации на тему цены, количества ног и таймеров. Если STMщик более продвинут, обязательно будет указание, что DMA в AVR нет и не будет, по этому AVR должна умереть. Зачем простому блинку-вольтметру-градуснику DMA, гора 16 разрядных таймеров, 100 ног и 12 битный АЦП никто как правило не объясняет. Зачем нужен такой комбайн в устройстве, которое легко вывозит Tiny13, которая при этом не загружена даже на треть своих ресурсов никто не будет разбираться. Просто надо переходить на STM32, и баста. Ибо вот.

И надо сказать, есть у людей тяга к новизне. А действительно, может попробовать? А вдруг понравится? Вот только Референс Мануал на популярный STM32F103C8T6, на котором основана самая массовая Голубая таблетка в 1126 страниц что-то как-то не очень располагает к «быстрому старту». Даже отдельную утилиту, так ненавидимый аксакалами «калокуб», и ту надо изучать, что там к чему. Да и вникнув в Cube, стартовать за 5 минут вряд ли получится, генерируемая им портянка не самое доступное чтиво на ночь, просто «в лоб» врубиться, о чём там речь получится не у каждого.

Отдельной беседы заслуживают многочисленные статьи, похожие на эту, про быстрый и лёгкий старт в STM. У всех подобных статей меня первое время очень смущало одно обстоятельство. Нигде не присутствует подробное объяснение, а что мы тут собственно пишем. Куча скриншотов как создать проект, потом сразу стена кода-делай вот так! А что там, для чего там, почему именно так, откуда взять все эти вроде и понятные слова, никто не вникает, ибо силы кончились при написании мануала по установке Кейла и Куба, и по запуску проекта. Только спустя какое-то время, индивидуальное для каждого, приходит понимание, что происходит и зачем. В свою очередь, я предлагаю способ стартовать не с начала, как все, а с конца. Сейчас мы будем делать всё наоборот, не настраивать контроллер, писать код и дебажить его, а сразу перейдём к дебагу, и запротоколируем наши действия в виде кода.

Итак, устанавливаем Keil, как бесплатную (до 32КБ кода) среду. Описывать сие действо не будем, этого есть в интернетах, да и степ-бай-степ установщика должен осилить человек, который идёт в STM. Запускаем проект: Project-New uVision Project, создаём папку и файл проекта. Открывается окно выбора контроллера, в поиск вводим модель 103C8 и соглашаемся на единственную отобранную модель.

Далее попадаем в окно выбора библиотек:



Здесь ставим три галки: CMSIS-CORE, Device-Startup и Device-GPIO. Этого набора вполне хватит, чтобы подрыгать ножкой, зажигая светодиодик. Дальше придётся-таки понастраивать, никуда от этого не денешься. Alt+F7 запускают окно настроек, расположенное Project-Options for Target, где на вкладке «Output» надо поставить галку «Create HEX-File», чтобы создался файл прошивки, которую мы будем загружать в контроллер. Далее, во вкладке «Debug» мы выберем ST-Link, которым, собственно, и будем загружать прошивку и дебажить:



По кнопке «Setting» рядом с окошком выбора программатора попадаем в окно «Cortex-M Target Driver Setup», где во вкладке «Flash Download» ставим галку «Reset and Run».

В дереве проекта ткнём правой кнопкой в папку «Source Group 1», в открывшемся визарде создадим файл main.c, в который скоро будем писать код. В открывшемся main.c по правой кнопке вставляем самый первый и самый важный инклюд:



Дописываем код, состоящий из main и бесконечного while:


#include "stm32f10x.h" // Device header
int main(){
while(1){
}
}


Как ни странно, это всё на сей момент, это уже готовая и понятная программа, которая корректно компилируется и загружается в контроллер. Нажимаем F7 и видим, что прошивка удачно собрана, ошибок и варнингов нет.



С этого момента нам полностью доступен контроллер, мы можем войти в него под линии дебага и крутить-вертеть его во все стороны, а он будет откликаться.

Клавиши Ctrl+F5 ведут нас в дебаг, а кнопка «System Viewer Windows» позволяет запустить окошки контроля регистров тактирования и управления ногами GPIO.



Далее предлагаю всё-таки воспользоваться Reference Manual, тем более, что его даже скачивать не надо, он доступен по клику во вкладке «Books» меню «View»:



Теперь предлагаю воспользоваться следующим рассуждением. Из распиновки на Голубую Таблетку видно, что светодиод висит на ноге 13 порта С. Многочисленные инет-ресурсы и обсуждения всегда упоминают, что прежде, чем что-то сделать в STM, это что-то надо включить, иначе-подать тактирование. Не мудрствуя лукаво, пишем в окно поиска pdf-читалки то, что нам надо, а именно-включить порт C: «PORT C CLOCK ENABLE». Получаем во такую картину:



Отсюда можно сделать вывод, что включение тактирования порта С осуществляется в регистре IOPCEN. С этим знанием идём во вкладку RCC в режиме дебага, и вписываем это название в строку поиска:



Помечаем требуемый чекбокс галочкой, и с этого момента считаем порт С включенным.

Теперь, вспомная многострадальный AVR, будем искать настройку собственно пина. Для того, чтобы он заработал, надо объяснить, что именно мы от него хотим. А хотим мы подрыгать ногой номер 13 порта С, для этого надо задать режим её работы. В строке поиска в Referense Manual вбиваем «Port bit configuration», чем выразим своё желание прочитать, где же спрятаны настройки ножки. Поиск приводит нас к таблице, из которой следует, что для того, чтобы назначить ногу выходом, требуется сконфигурировать регистры MODE и CNF:



Из таблицы №20 видно, что для назначения ножки выходом Push-Pull надо сбросить регистры CNF0 и CNF1, а состояние пары MODE0 и MODE1 описано в таблице №21, я выберу верхний вариант, до 10MHz, MODE0=1, MODE1=0. Это я и проделаю в окне GPIOC для регистров CNF13 и MODE13



Теперь у нас настроено тактирование и режим работы порта. Самое время узнать, как именно дрыгнуть ножкой. По английски установить бит порта пишется как «Port bit set», эту фразу и будем искать в мануале:



Поиск приводит нас на страницу с таблицей, из которой явно видно, что за установку состояния ножки порта отвечает регистр BSRR, состоящий из пар BS и BR, Bit set и Bit reset соответственно. Находим эти регистры в окне GPIOC в режиме дебага и наслаждаемся управлением ногой №13 напрямую, тыкая мышкой галки в соответствующие чекбоксы:



Светодиод на плате голубой пилюли висит между ногой и VCC, по этому управление им обратно названию регистров. Bit Set (регистр BS13) тушит его, а Bit Reset (регистр BR13) зажигает. Это регистры атомарных операций, они сбрасываются после установки чекбокса. Есть возможность управлять ногой через регистр ODR, (пункт 9.2.4 Port output data register (GPIOx_ODR) в референс мануале), там наглядно видно, к чему приводит установка и сброс галки.



Горящий и тухнущий зелёный светодиод показывает, что всё работает верно. Остаётся только записать всё это в виде кода в файл main.c. Вот тут и появляется самый изюм, который отличает этот способ постижения контроллера STM через дебаг от остальных, которыми завален весь интернет. Я предлагаю просто переписать то, что видим в окне дебага в код. Пример:



Задали режим работы порта и включили тактирование;



Включили ножку порта, подождали, выключили и так далее:


#include "stm32f10x.h" // Device header

int main(){
RCC->APB2ENR=0x00000010; // включили тактирование
GPIOC->CRH=0x44144444; // задали режим Push-Pull до 10MHz
int i; // переменная для задания задержки вкл/выкл светодиода
while(1){
GPIOC->ODR=0x00002000; // выключаем LED, по ламерски дёргая весь порт целиком
i=2000000; // взводим переменную для паузы
while (i) i--; // ждём
GPIOC->ODR=0x00000000; // включаем LED
i=2000000; // снова ждём
while (i) i--;
}
}



Само собой, данный способ далеко не лучший и не правильный, но по моему мнению наиболее понятный и простой. К тому же, он приобщает к работе с даташитом (референс мануалом) и не отпугивает, как чтение манов и написание многостраничных портянок кода для Блинка. Да, здесь нет наслоений абстракций, упущено многое, но за элементарность старта я думаю можно это простить. Чтение мана и правильная работа с регистрами это потом, сейчас у нас моргает светодиод и нам в принципе понятно, как и что мы сделали, а самое главное, откуда взялись все эти аббревиатуры. Если бы мне показали такой способ изучения STM раньше, возможно я бы не собирал over 9000 разных программаторов для AVR в которых так и не было дебага, а взялся бы сразу за Кортексы. Ведь в AVR так и нет внятного и доступного дебага, но всё равно, забывать Tiny13 пока рано. Свои задачи она вывозит.
Укажите причину минуса, чтобы автор поработал над ошибками
Присылаем лучшие статьи раз в месяц
Скоро на этот адрес придет письмо. Подтвердите подписку, если всё в силе.
Инженер-электронщик (программист микроконтроллеров, embedded)
Программист встроенных систем (С/С++, Junior/Middle)
Программист C/C++ (протоколы мобильной связи 4G/5G)
до 150 000 ПроВайд Лабс Новосибирск Можно удаленно
Преподаватель в КиберШколу (Программирование) в выходные дни
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Контроллеры мощнее, а подходы к программированию все те же. Какие-то битики, какие-то регистры. Нафига это все? Следующих шаг от 8-битных МК должен быть переход к более высокому уровню абстракции, когда пофиг сколько там таймеров и есть или нет ДМА. Т.е. к ОС. Без ОС между AVR и ARM нет никакой принципиальной разницы.
FreeRTOS, mbedOS и иже с ними. Это есть. AVR редко используется(во всяком случае мной), зачастую 32 битный STM.
И абстракция есть, HAL называется…
С такой абстракцией никакие враги не нужны. И человек немного путает ОС и ОСРВ, никакая ОСРВ в обозримом будущем не будет заниматься организацией работы с DMA в независимом от разработчика режиме.
Предлагаете для моргания светодиодом использовать Raspberry Pi с каким-нибудь модным фреймворком? :)
В кокосе в свое время можно было выбрать контроллер и создать проект прям в несколько кликов. Если не путаю.
А сейчас все что может само генерировать проект выдает чудовищные простыни с HAL через которые новичку пробраться к железу гораздо сложнее. Хотя
USART stm 32 HAL / STM32 / stD
STM Урок 182. CMSIS. STM32F1. USART. Приём данных | | Программирование...
STM 32F407 CCM RAM STACK HEAP - STM - Форум ELECTRONIX
Наилегчайший старт в STM через «одно место» / Хабр
STM Cheer 2011 - YouTube
STM Cheerleading (@STMCheer) | Твиттер
Установка ПО для работы с STM 8 / STM8 / Сообщество EasyElectronics.ru
Обвязка STM32 | Главы из будущей книги|Блог — Студия Все Мое
STM32 от Булкина. Урок 1: Вводный, где мы немножко похулиганим. | Пикабу
Изучаем STM32. Маленький урок по программатору — DRIVE2
Микроконтроллеры STM8 «с нуля»
STM32 тактирование. » Хабстаб
Программирование STM 32. Часть 2. Система тактирования STM32
STM8. Урок 1. Настройки среды ST Visual Develop
Как прошить чип STM32 | Многобукфф
Feeding Daughter Cum
Ebony Butt
Piss Drinking Videos
Asstr Stm Cheer

Report Page