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

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Сообщение Pnjom-Penb »

isx писал(а):Переменная butt по-прожнему сказала ..., но вот прерывание от маркера на строке {countERROR++;} не происходило, да и переменная countERROR оставалась равной нулю.
А это все не под ртосом каким-нибудь гоняется?
Реклама
Мучитель микросхем
Аватара пользователя
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Сообщение Myp3ik »

isx, проверьте на этом SPLбыдлокоде правильно ли работает АЦП вообще. Подавайте напряжение на PC1 и смотрите переменную valADC.
Вложения
ADC_test.rar
(653.69 КБ) 147 скачиваний
Иван Сусанин - первый полупроводник :solder:
Реклама
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

Pnjom-Penb писал(а):А это все не под ртосом каким-нибудь гоняется?
Нее... АЦП и 2 таймера, там РТОС не нужен :) .
Myp3ik писал(а): проверьте на этом SPLбыдлокоде правильно ли работает АЦП вообще.
У меня SPL нет даже на том компе для этого камня (инет щас медленный, качать пол дня будет), но АЦП в принципе работает правильно (напряжение от переменника если давать, то как положено значения изменяются от 0 до 4096). Завтра попробую родить библиотеку и попробовать.

Сделал генератор синуса ШИМ-ом (у ШИМа такая же частота, как и в проекте усилителя), подключил наушники, погонял частоты от 50 до 2000Гц - звук чистый безо всяких фильтров (как я и думал, роль фильтра-интегратора взяли на себя головы наушника). Значит шум таки из АЦП.
Завтра попробую сделать генератор сигнала с амплитудой шумов АЦП (+-2LSB) и посмотрю как оно звучит в динамиках. Будем выяснять откуда шум, от наводок на АЦП или от программных уродств.
Мучитель микросхем
Аватара пользователя
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Сообщение Myp3ik »

Так там все в одном архиве :shock:
Иван Сусанин - первый полупроводник :solder:
Реклама
Эиком - электронные компоненты и радиодетали
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

Упс... Ступил :) . Только вот думаю теперь смысла нет АЦП проверять :( .
Не сдержался, сделал генератор белого шума (3 часа выкинул чтоб алгоритм более менее нормальный накорябать). Оказывается мои шумы по уровню громкости похожи на шумы в 1 бит! Я и не думал что шум в 1 бит можно будет хорошо слушать в наушниках :dont_know: . Идеальной точности на 12 битах получить вряд ли удастся, поэтому буду экспериментировать с программной фильтрацией....
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 117
Зарегистрирован: Вс апр 12, 2009 22:40:37

Сообщение zebrox »

Есть ли какая-то документация или примеры использования HAL'a?
Пока нашел только http://stm32f4-discovery.com/2015/07/al ... libraries/
Реклама
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Сообщение Pnjom-Penb »

Так, это ж вроде, не офсайт?
Встал на лапы
Аватара пользователя
Сообщения: 117
Зарегистрирован: Вс апр 12, 2009 22:40:37

Сообщение zebrox »

Pnjom-Penb писал(а):Так, это ж вроде, не офсайт?
к сожалению, да...
по поводу шумов измерения на ацп, нашел пару ресурсов:
AN2834 How to get the best ADC accuracy in STM32Fx Series and STM32L1 Series devices
STM32F2 ADC Signal Noise тут все разрешилось 4х слойной разводкой платы.
Встал на лапы
Аватара пользователя
Сообщения: 101
Зарегистрирован: Пт окт 03, 2014 14:50:06

Сообщение Jeka_M »

zebrox писал(а):Есть ли какая-то документация или примеры использования HAL'a?
В документации на STM32Cube есть. Вам на F4 надо? Тогда вот - STM32CubeF4 (набор библиотек с примерами), там внизу есть доки. Например UM1725 Description of STM32F4xx HAL drivers, документик на 900 с лишним страниц.
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

zebrox писал(а):по поводу шумов измерения на ацп, нашел пару ресурсов:
Про App.Note в курсе, там особо ничего ценного не нашел - все рекомендации стандартные.
А по второму, так там:
Only standard noise of several LSBs corresponding to techspecs remains, of course.
Несколько LSB это серьезно для звуковой аппаратуры.
Я у себя проблему частично решил следующим способом. Так как у моего камня максимальная частота 48МГц, то реализовать таймерами можно только 11бит АЦП, поэтому полученный 12-ти битный результат я поделил на два, чем практически ликвидировал шум. Теперь шумит 1 бит, но его еле слышно в наушниках.
Интересно, если на МК повесить радиатор и подключить к заземлению, то это уменьшит помехи?
Электрический кот
Аватара пользователя
Сообщения: 1031
Зарегистрирован: Чт июн 20, 2013 00:00:58
Откуда: москва, м.Сходненская

Сообщение Mishany »

были ли у кого случаи с китайским свистком st-link v2 что б усб отъехал с stm32f101 внутри?
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 23
Зарегистрирован: Сб авг 22, 2015 08:32:37
Откуда: Киев

Сообщение Porada »

Здравствуйте. Пытаюсь разбираться понемногу с микроконтроллерами и программированием. С непривычки непросто, элементарные вещи с трудом воспринимаются. Нашёл на разных ресурсах статьи, видео по STM32. Самое простое, запись битов в регистр не могу понять.
Вот пример:
RCC->APB2ENR = RCC->APB2ENR | RCC_APB2ENR_IOPCEN
В статье это действие описывается как побитное суммирование двух значений, что, собственно, вертикальный слэш и значит. Но в итоге и нужно в бит IOPCEN регистра APB2ENR единицу записать. Насколько я понял, бит IOPCEN по умолчанию "0". Ломаю голову и не могу понять - КАК?! Причём многие абсолютно разные ресурсы именно такой подход и описывают, без особых объяснений. Подскажите, плиз, где тут собака зарыта.
Нужно добиваться того чего хочется. В противном случае останется лишь довольствоваться тем, что есть.
Мучитель микросхем
Аватара пользователя
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Сообщение Myp3ik »

Иван Сусанин - первый полупроводник :solder:
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 23
Зарегистрирован: Сб авг 22, 2015 08:32:37
Откуда: Киев

Сообщение Porada »

Нет, что такое побитное сложение мне известно, как, впрочем, и другие логические операции. Вопрос в том, что с чем здесь складывается. Как побитным сложением в данном случае искомый бит превращается в единицу? 32-х разрядный регистр и его бит...
Нужно добиваться того чего хочется. В противном случае останется лишь довольствоваться тем, что есть.
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Сообщение arkhnchul »

RCC_APB2ENR_IOPCEN - маска, определена где-то в .h файлах, содержит в себе значение типа 0b00000000000100000000000 (просто "типа того", разряды не считал) - т.е. имеет такое числовое значение, что у него в единицу выставлен только нужный бит. Далее он битовым И складывается с текущим значением регистра APB2ENR (RCC->APB2ENR), при битовом сложении нули в маске на значения битов регистра влияния не оказывают, единица в маске встает на соответствующее место в значении. Потом результат пишется обратно в регистр.
Вымогатель припоя
Аватара пользователя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

Сообщение Andrew Martin »

Porada писал(а): Но в итоге и нужно в бит IOPCEN регистра APB2ENR единицу записать. Насколько я понял, бит IOPCEN по умолчанию "0". Ломаю голову и не могу понять - КАК?! Причём многие абсолютно разные ресурсы именно такой подход и описывают, без особых объяснений. Подскажите, плиз, где тут собака зарыта.

Это вот яркий пример для всех критиканов ассемблера :)))

Вся строка

RCC->APB2ENR = RCC->APB2ENR | RCC_APB2ENR_IOPCEN

сводится к следующим операциям

- загрузка значения регистра APB2ENR в один из регистров ядра (от r0 и до как минимум r7)
- загрузка битовой маски RCC_APB2ENR_IOPCEN в один из регистров ядра
- побитовое OR между двумя регистрами ядра с сохранением результата опять же в регистре ядра
- запись результата побитового OR из регистра ядра обратно в APB2ENR.

Так понятнее? :)
Друг Кота
Аватара пользователя
Сообщения: 25503
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

Andrew Martin писал(а): сводится к следующим операциям
Не факт.
Во многих компиляторах при подобной записи код оптимизируется до записи бита в конкретный разряд через соответствующий регистр вывода. Процедура RMW происходит на аппаратном уровне и в коде отсутствует.
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 23
Зарегистрирован: Сб авг 22, 2015 08:32:37
Откуда: Киев

Сообщение Porada »

Я сомневался насчёт того, что RCC_APB2ENR_IOPCEN маска. Всё остальное ясно. Спасибо всем за развёрнутые ответы.
Нужно добиваться того чего хочется. В противном случае останется лишь довольствоваться тем, что есть.
Вымогатель припоя
Аватара пользователя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

Сообщение Andrew Martin »

КРАМ писал(а): Не факт.
Во многих компиляторах при подобной записи код оптимизируется до записи бита в конкретный разряд через соответствующий регистр вывода. Процедура RMW происходит на аппаратном уровне и в коде отсутствует.
Конечно не факт.
Не только от компилятора зависит, а и от аппаратной части, а именно от наличия/отсутствия bit-banding для конкретной части периферии.

Например, в STM32F0 его увы нет, поэтому финт с атомарной установкой/сбросом бита в регистре вывода может быть реализован только для ног портов (BSRR и BRR регистры).

А RMW может быть реализована программно на любом МК и практически для любых периферийных IO-регистров, как наиболее общий подход.
Друг Кота
Аватара пользователя
Сообщения: 25503
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

.
Ответить

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