Главная » Статьи » Общая тематика

STM VS PIC

Приятного времени суток всем!!!

Я знаю, что многие начнут говорить что, «Зачем тратить время и средства на изучение нового, тратить кучу денег на новый прогер, отладочные платы и т. д….». Хочу сразу сказать, это руководство не для них и они пусть проходят мимо…. А те, кто хочет, но боится или не знает как, тут найдут те ответы, которые им помогут… Итак начнем… :))

Для сравнения:

Возьмем самый маленький из СТМом Cortex M0 ,

STM32F030F4P6

Отличительные особенности:
32-битное ядро ARM® Cortex™-M0 с тактовой частотой до 48 МГц
FLASH память программ от 16 кБ до 64 кБ
SRAM память данных от 4 кБ до 8 кБ с контролем чётности
Блок вычисления кодов коррекции ошибок CRC
Системы сброса и управления питанием
Диапазон напряжений питания: от 2.4 В до 3.6 В
Сброс при включении/выключении питания (POR/PDR)
Режимы энергосбережения: спящий, останов, ждущий
Управление частотой тактирования
Кварцевый генератор с тактовой частотой от 4 МГц до 32 МГц
Отдельный генератор с тактовой частотой 32 кГц для часов реального времени с калибровкой
Внутренний RC-генератор с тактовой частотой 8 МГц и шестью узлами фазовой автоподстройки частоты
Внутренний RC-генератор с тактовой частотой 40 кГц
До 55 высокоскоростных линий ввода/вывода
Карта векторов внешних прерываний
До 36 линий ввода/вывода, поддерживающих уровень напряжения 5 В
5-канальный контроллер прямого доступа к памяти (DMA)
12-битный АЦП с временем выборки 1 мкс (до 16 каналов) и диапазоном входных напряжений от 0 до 3.6 В
Отдельный источник питания для аналоговой части с напряжением от 2.4 В до 3.6 В
До 10 таймеров
16-битный 7-канальный таймер с расширенным управлением для 6 выходных каналов ШИМ, формированием паузы и экстренной остановки
16-битный таймер с 4 каналами захвата/сравнения входа/выхода (IC/OC) для декодирования команд с инфракрасного датчика
16-битный таймер с 2 каналами IC/OC, 1 каналом OCN, формированием паузы и экстренной остановки
Два 16-битных таймера, каждый с 1 каналом IC/OC и OCN, формированием паузы, экстренной остановки и модулятором для инфракрасного передатчика
16-битный таймер с 1 каналом IC/OC
16-битный основной таймер
Независимый и системный сторожевые таймеры
Таймер тактирования SysTick: 24-битный счётчик обратного счёта
Календарь/часы реального времени с системой сигнализации и периодического пробуждения из режимов ждущий/останов
Коммуникационные интерфейсы
До двух интерфейсов I2C: один с поддержкой режима Fast Mode Plus (1 Мбит/с) и допустимым током 20 мА
До двух портов приёмопередатчика USART с поддержкой синхронного SPI в режиме ведущего и управлением модемом; один из портов с автоматическим определением скорости потока
До двух интерфейсов SPI со скоростью передачи данных 18 Мбит/с и программируемым размером кадра от 4 до 16 бит
Последовательный отладочный интерфейс (SWD)

Не хило так… И это самый маленький !!!! их представитель.

Теперь рассмотрим ПИК… Я не буду брать PIC16F84 или что то из 16-й серии… Возьмем что то по круче, ну для примера

PIC18F2550-I/SO

 

Ядро

PIC

Максимальная частота ядра

48 МГц

Объём памяти программ

32 кБайт

Тип памяти программ

FLASH

Объём EEPROM памяти

256 Байт

Объём оперативной памяти

2 кБайт

Количество входов/выходов

24

Интерфейсы

I2C, SPI, UART/USART, USB

Периферия

Brown-out Detect/Reset, POR, PWM, WDT

АЦП/ЦАП

A/D 10x10b

Напряжение питания

4,2...5,5В

 

Всего лишь… :))

Что мы тут видем, по мимо частоты, которая совпадает, Flash память у СТМ и ПИК отличается. У СТМ той серии 16кБ, у ПИКа – 32… Объем ЕЕПРОМ память у ПИКа – 256Б, у СТМа – она вообще отсутствует, НО… Об этом позже… :))

Объем ОЗУ… У СТМа больше.. Количество портов… Тут… У СТМа в корпусе 20-выводной SSOP, составляет 13 портов, у ПИКа в корпусе  SOIC-28 SOIC-28L  их больше…. Но и пинов больше… Думаю не стоит дальше сравнивать их…

 

Ах да… Самое главное отличие – ЦЕНА…. Цена на СТМ – 0,6$,  цена на ПИК – 4,5$...

 

Согласен, их нельзя сравнивать!!!! Например, PIC12F675 – на АЛИ стоит всего 0,55$... Но и его возможности… Я сравниваю примерно равные из линеек…

 

Хочу заметить и минусы у СТМ… Да, они есть и их не мало… Например:

 

Питание у СТМа 3,3В!!!, а не 5В как у ПИКа… АЦП у СТМа тоже до 3,3В и при 12-бит это не есть  гут!!! Дорогой прогер… Я за свой ST-Link/V2 отдавал 35$, но есть и более дешевые варианты… Есть отладочные платы ужу с прогером…

 

Но есть и плюсы, как многие заметили, а те кто не заметил, покажу: 

 

До 36 линий ввода/вывода, поддерживающих уровень напряжения 5 В
 

Это говорит об том, что СТМы смело могут работать со всеми Вашими модулями на равнее с ПИКами…  не говорю про pin-to-pin. Любой СТМ в корпусе 48-LQFP полностью совпадают в разных линейках!!!

Я не буду дальше описывать плюсы и минусы, сравнивать СТМ и ПИК, только дам одну ссылку:

https://www.compel.ru/lib/ne/2011/2/3-stm32-epoha-32-bitnyih-mikrokontrollerov-nastupila

А я продолжу и расскажу как перейти на новый уровень.

СТМы очень сильно отличаются от ПИКов, АВРов и прочего «мелкого»… У СТМов все регистры 32-х битные, среда IDE тоже в корне отличается от IDE Proton… Но есть и общее!!! Среда MicroBasic ,

офф сайт: https://www.mikroe.com/

IDE MicroBasic https://www.mikroe.com/mikrobasic-arm

В разделе RoadMap можно скачать демо версию их продукта.

После скачивания и установки, запускаете его, Вы увидите:

Это стартовая страница… Но она нас не интересует… Тут снимаем галочку «Show Page On Startup», мы же не хотим, постоянно ее видеть… Затем просто закрываем ее, нажав на крестик возле надписи «Start Page».

Закрыли и увидели следующее:

Тут тоже слишком много не нужной инфы для нас…В трее мы видем «Default» нажав на «ComboBox» (Поле со списком) мы увидим:

Список, тут выбираем «1024х768» и нажимаем:

Получаем следующее:

Так по лучше, как по мне…

Это демо проект, он нас тоже мало интересует.

Теперь попробуем создать новый проект, но для начала нужно закрыть старый, для этого мы заходим:

Project->Close Project или просто нажимаем Ctrl+K.

Все… Проект закрыт… А что дальше?!?!?!?

А дальше просто, в этом же меню, где мы и закрывали наш старый проект, есть: Project->New Project или Shift+Ctrl+N.

Тут несколько этапов, первый:

 

Не буду писать полностью название продукта и их названия, назавем microBasic – мВ, а их компанию MikroElektronika - мЕ

Скажу так, в новом мВ я еще не работал, но тут все понятно, мЕ интегрировало в мВ Visual TFT. Так что, выбираем «Standart Project», нажимаем «Next»

На втором этапе немного сложнее:

Но и тоже понятно… В строке «Project Name» мы называем наш будущий проект, например: «blink_led».

В строке «Project folder» мы указываем куда сохранить наш проект, так как в проекте много файлов, рекомендую сохранять каждый проект в отдельные папки, нажав кнопку «Browse» мы указываем путь к папке.

В строке «Device name» выбираем наш МК, я выбрал STM32F103C8

В строке «Device clock» выставляем 8,000000MHz

У Вас должно получится примерно так:

и нажимаем «Next», тут тоже нажимаем «Next».

На 4-м этапе

Лучше выбрать «Include None», так как, мы не будум использовать «ВСЮ» библиотеку.. Да и потом можно подключить нужные. Нажимаем «Finish»… Все.. .Проект готов..

  1. - панель инструментов;
  2. - проводник кода;
  3. - настройки проекта:
  4. – Сообщения;
  5. - редактор кода;
  6. - Предварительный просмотр изображения;
  7. - менеджер проекта;
  8. - менеджер библиотеки

3) - настройки проекта:

Тут указывается Ваш МК, частота на которой он должен работать.

В разделе: Build/Debugger Type, выставляем Debug и Hardware. Это отладка в «железе»… Софтово все равно вряд ли что то получится отладить…

Если честно, я так и не понял разницы между Release и Debug, так что, я всегда ставил Debug.

8) – менеджер библиотеки –

тут список библиотек. Галочка на нужной библиотеке включает или отключает ее.

Так как мы не используем библиотеки, у нас все галочки сняты.

В редакторе кода (5) имеем: «program blink_led» - это название нашего проекта. После него прописываются Includ- ы, если они есть и нужны, инклуды прописываются так:

include "NOKIA_3310_LCD.mbas"

После этого присваиваем псевдо имена портам, опять же, если это нужно:

dim Res as sbit at GPIOB_ODR.B12

dim D_C as sbit at GPIOB_ODR.B14

или в нашем случае

dim Led as sbit at gpioc_odr.b13                                                ' Name for portС.13

где

Led                        – имя, которое будет присвоено порту С пину 13;

gpioc_odr.b13       -  порт и его пин.

 

У СТМа порты называются GPIO. Надпись «ODR» - говорит об том, что данный пин будет использоваться как выход, если написать gpioc_idr.b13 – это означает, что пин 13 будет входом.

Дальше идут переменные, переменные в мВ похожи на протоновские:

Dim X as Byte

Тут все просто и понятно…

Так же, тут можно прописывать нужные Вам процедуры и функуии.

Затем идет основное тело программы:

main:

'   Main program

end.

Это обязательные строки, их нельзя убирать!!!

После «main:» идет настройки МК, а именно его портов, таймеров и. т.д.

В нашем случаи настройка порта С и пина 13

gpio_digital_output(@gpioc_base, _gpio_pinmask_13)            ' Set PORTС.13 as digital output

орта С и пина 13стройка нно его портов, таймеров и. функуии.е:

ды прописывааются

После того, как мы все прописали, настроили, идет безконечный цикл:

While true

Wend

Вот тут и будет «крутиться» наша программа/

В теле цикла прописываем пару строк:

           Led = not Led

           Delay_ms(500)

Думаю тут понятно, если же нет, строка:

Led = not Led

Меняет значение пина на противоположное.

Строка

Delay_ms(500)

Задержка в 500мСек

В итоге у Вас должно быть так:

После того, как Ваша программа написана, нажимаем : Ctrl+F9 и компилируем наш проект, если ошибок нет, то в окне состояния (4), Вы должны увидеть:

Нажимаем F11 и пошел процесс записи…

Все… Смотрим что получилось…

Я знаю, что много тут не описано, но этого должно хватить для того, чтобы начать пробовать. Остальные ответы на вопросы, можно получить на форуме…

Хочу сразу заметить следующее, если кто будет пробовать работать с STM32F103C8, мЕ очень много подкинула граблей по этой серии… Мы с коллегой Алексом (DAlexV) набили не одну шишку при написании программ для данных МК…  Но это было актуально для старых IDЕ 4.9, 5.1. На версии 6.0 не проверялось, так как, я перешел на СИ и IDE Keil.

Для тех, кто знает СИ, тем проще… На Basic-е я нашел только этот, на СИ полно разных IDE.

Для тех, кто хочет изучить СИ, не для СТМ, но СИ он везде СИ… :)) будет выложена книга второе издание, переработанное и дополненное 2009 г. «Язык программирования С», автор БРАЙАН КЕРНИГАН и ДЕННИС РИТЧИ

Надеюсь это кому то, но пригодится.

P. S. как я и обещал в начале.. У СТМа нет своей Flash памяти для хранения личных данных, НО у СТМа много внутренней памяти, в которую можно записывать нужные Вам переменные. Так что, проблем с хранением тоже нет…

С уважением, Николай.




Категория: Общая тематика | Добавил: Matrix252005 (30.12.2017)
Просмотров: 6772 | Комментарии: 7 | Рейтинг: 5.0/4
Всего комментариев: 7
1 mikhail09p   (05.01.2018 23:41) [Материал]
Лучше сразу на Keil или CooCox. Они очень похоже и уроков море в сети.
Я осваиваю CooCox. Первое устройство уже работает. Программа, конечно же, корявая страшно, но работает. happy

2 Matrix252005   (06.01.2018 09:07) [Материал]
Приятного времени суток, Михаил!!!

Полностью с Вами согласен!!!! Но лучше начать с чего то по проще... Я этой "статьей" хотел показать, что СТМы не такие страшные как себе представляют люди...

З.Ы. Я учусь писать на Keil-е... Вроде бы получается.
Сейчас на нем делаю центральный блок для "умного дома". 

С уважением, Николай.

3 mikhail09p   (06.01.2018 10:36) [Материал]
Приветствую и Вас, Николай!
Да, STM32 совсем не страшные! Меня поразила их "вменяемость" - всё, что написал, именно ТАК и работает, чего не скажешь про Протон, где приходится извращаться... Особенно с прерываниями.
Это я, наверное, про компиляторы, но к обсуждению про STM.
Ну и ресурсов, у них, конечно, море! Только пока не знаю, как записать начальные значения в ячейки памяти по подобию EData в Протоне...

4 Matrix252005   (06.01.2018 11:43) [Материал]
wink  Не так страшен черт, как его....

0
5 ADMIN   (26.01.2018 16:15) [Материал]
Эта статья мне нравится.

6 Andriy76   (30.01.2018 22:42) [Материал]
Отличная работа . У меня так пока и не получилось подружиться с СТМ .

7 sensel   (10.03.2019 02:24) [Материал]
Сравнение некорректное. Зачем сравнивать самую младшую модель STM и среднюю модель PIC? Особенно смешно звучит сравнение 
Цитата
Объем ОЗУ… У СТМа больше.. Количество портов… Тут… У СТМа в корпусе 20-выводной SSOP, составляет 13 портов, у ПИКа в корпусе SOIC-28 SOIC-28L их больше…. Но и пинов больше…


Почему для сравнения не был выбран STM скажем с 144 выводном корпусе? И у какого МК было бы больше выводов?

Цитата
Питание у СТМа 3,3В!!!, а не 5В как у ПИКа… АЦП у СТМа тоже до 3,3В и при 12-бит это не есть гут!!!


Многие дисплеи, все MicroSD карты и др. компоненты питаются от 3.3 В. Это скорее плюс чем минус.

Цитата
Дорогой прогер… Я за свой ST-Link/V2 отдавал 35$
ST-Link это не только программатор, но и отладчик. Стоит 100 рублей. https://u.to/l-PcFA
Микробейсик его поддерживает и не только шьет, но и отлаживает программы. Что большой плюс по сравнению с пиками и аврами.

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]