Рейтинг
28.46
голосов: 30

О блоге

Работа с ядром CortexM3 и периферией STM

Администраторы (1)

Модераторы (0)

Модераторов здесь не замечено

Читатели (271)

ploop _YS_ m3hc Krieger Tabke marvin_yorke Ultrin WildCat hexanaft Vga Alatar mzw Reverb grand1987 dievgen woogle PahanMenski anper citizen ZiB

Все читатели блога

CRC32: на STM32 как на компе или на компе как на STM32.

Все знают, что в STM32F1xx, STM32F2xx, STM32F4xx есть аппаратный блок CRC32 с полиномом 0x04C11DB7.
И он, в общем-то, работает. Но только контрольная сумма почему-то не совпадает с таковой, рассчитанной софтварно.
В гугле обычно 2 типа вопросов:
  1. Как хардварно посчитать на STM32 побайтовую CRC
  2. Как посчитать софтово CRC так, чтоб она совпала с хардовой на STM32
Причём, на первый вопрос ответ везде отрицательный. Так ли это? Попробуем разобраться.


Читать дальше

Программный декодер MP3(+MOD) на STM32F10x. Часть 4. Трекерная музыка

Поколению, воспитанному ZX-Спектрумом, посвящается...

Думаю, мало кто знаком с понятием «трекерная музыка», хотя большинство людей, связанных с компьютером, неоднократно слышали эту самую музыку. Именно она, иногда совершенно неожиданно, начинает звучать из колонок при запуске всевозможных «лекарств», «таблеток» и «кейгенов».


Своему рождению трекерная музыка обязана компьютеру под названием «Амига». Это целое семейство домашних компьютеров, мегапопулярных «там» в середине 80-х — 90-х годов. Пока мы, после падения железного занавеса, дружно осваивали 8-битные компьютеры (легендарный Спектрум), заграница от ZX уже остыла и вовсю развлекалась взрослым компьютером Амига.


Читать дальше

генератор кода stm32

Сколько я пробовал попробовать стм32 на халявной дискавери, но вид этих нагромождений кода, констант и регистров вгонял меня в уныние и сон. И вот сегодня я увидел ЭТО.



Для моего образного восприятия такая наглядность — просто кладезь. Посмотрев с 5 минут на схему тактирования — сразу становится понятно без даташита. Я бы это назвал кодогенератором нового поколения, когда блоки представлены наглядно и нарисованы пути прохождения сигнала. Подобные конфигураторы регистров я видел для всяких синтезаторов частот и сложных трансиверов.

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

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

скачать у автора

Программный декодер MP3 на STM32F10x. Часть 3. Извлекаем звуки

Пилу на выходе ЦАП увидели (и при желании услышали), теперь хочется вывести звуки, более приятные для наших ушей. «Музыку давай»! Однако, не стоит торопиться. Контроллеру нужно предоставить поток MP3, который он сможет декодировать. Сегодня мы подключим карту памяти SD, освоим драйвер файловой системы и напоследок — запустим декодер MP3.


Читать дальше

Программный декодер MP3 на STM32F10x. Часть 2. Запуск ЦАП

Модуль ЦАП является ведущим звеном в нашем проигрывателе, синхронизирующим работу остальных программных модулей. Для работы будет использована следующая периферия микроконтроллера: таймер, задающий частоту дискретизации; контроллер DMA; и собственно двухканальный ЦАП.


Читать дальше

Программный декодер MP3 на STM32F10x. Демопроект

В целях тренировки при освоении нового для меня микроконтроллера решил реализовать аудиоплейер. Поставленную задачу выполнил успешно, велосипед был изобретён и даже смог поехать. Результаты работы хочу представить вашему вниманию.


Читать дальше

STM32 Удобные внешние прерывания

STM32 Удобные внешние прерывания

При изучении STM32 меня приятно удивило большое количество внешних прерываний (всего 16), да и еще возможность настроить их на любой пин микроконтроллера. Такой расклад после того, как долгое время сидел на AVR — кажется фантастичным. Однако при детальном изучении радость моя несколько поуменьшилась. Оказывается, есть и ограничения:
1) Настроить прерывания можно только на один из входов, где совпадает нумерация порта.
Например, настроить два прерывания на GPIOA.0 и GPIOB.0 — не получится. Только одно из них. Это необходимо учитывать при разводке схемы.
2) Отсутствует способ вызова прерываний по нижнему уровню (иногда требуется именно этот способ, например при сочленении с WIZnet). Хотя этот недочет, в принципе, — программно решаемый.
3) Всего 7 векторов в прерываниях. А событий — 16. А это значит, что обработка нескольких событий производится в одном и том же месте.

Но даже такое положение вещей все равно гораздо более привлекательное, чем в старом-добром AVR-e.

Цель написания этой статьи — разбавить 3-е по списку ограничение — недостаток векторов, упрощение инициализации внешних прерываний. И напоследок, разберемся, что такое «слабосвязанные функции» и с чем их едят (С) Умка :). Итак, начнем:


Читать дальше

Многозадачный программный таймер.

В мире микроконтроллеров, как и в мире вообще — существуют разного рода задачи. Какие-то требуют немедленного исполнения, какие-то могут подождать. Но есть и такие, которые возникают крайне редко, но их количество может быть внушительным. Вот о реализации таких задач (последних) мы и поговорим. Чтобы «убить» 7 мух(, а может быть и великанов) одним ударом — будем использовать программный таймер на базе одного аппаратного. Так как все задачи — «медленноприходящие» (интересно, есть такое слово в русском языке?) — настроим аппаратный таймер таким образом, чтобы тикал он несколько раз в секунду (например, 50 или даже 500). И создадим массив структур, в каждой из которых будет лежать вся информация по каждому программному таймеру отдельно. Итак, рассмотрим чего добился:

Читать дальше

Удобная настройка GPIO портов

Настройка GPIOX портов в STM32, как уж повелось, не самое интересное занятие.
Большое разнообразие настроек в определенный момент начинает взрывать мозг, особенно если пользоваться стандартными решениями.
Например, чтобы нам настроить GPIOA.11 на 10МГцовый — выход по типу OPEN_DRAIN c выключенным драйвером — нужно выполнить следующие операции:


Читать дальше

STM32 - Bit Banding

STM32 — Bit Banding


Предлагаю вашему вниманию модуль, позволяющий легко обращаться к битам устройств ввода-вывода и оперативной памяти с помощью области bit banding


#include "bitbanding.h"
...
BIT_BAND_PER(RCC->CIR,RCC_CIR_HSERDYIE)=SET;


Читать дальше