Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Изучаем ARMы

Сообщений 1 страница 30 из 185

1

Часть сообщений перенесена из темы Переходим на xmega. Вопросы и решения.

Пётр написал(а):

Дешевле взять STM32. Правда под него на прогу баскоме не напишешь, но зато 32 битный ARM на основе ядра Cortex-M3...

На днях получил платку из Китая с МК STM32F103C8T6 (32 битный ARM на основе ядра Cortex-M3).

http://s3.uploads.ru/7kClx.jpg

Цена  около 2 доллара, т. е. примерно как у Arduino с  ATmega328. А вот возможности гораздо шире. Некоторые их них.

Частота ядра 72 МГц. Эффективность 1.25 DMIPS/MHz.
64 КБ флеш памяти и 20 КБ ОЗУ
Тактирование от внутреннего RC генератора (8 МГц) или внешнего кварца 4 - 16 МГц. С возможностью выбора частоты ядра и периферийных блоков, путем управления множителями и делителями частоты (сриншот).
Встроенные часы с возможностью. подключения внешнего кварца на 32768 Гц. У часов есть вывод питания от батарейки.
Два 12-ти битных АПЦ, по 16 каналов в каждом. Плюс датчик температуры (подключен к АЦП).
Два I2C и SPI, модуля.
Две сторожевых собаки.
Три модуля USART.
Три 16-ти битных таймера.
Системный 24 битный таймер.
Один USB и CAN модуль.
Семи-канальный контроллер DMA (прямой доступ к памяти без участия процессора), который может работать с АЦП, SPI, I2C и USART.

Теперь что касается программирования этих МК. Сразу скажу, с бейсиками напряг. Есть mikroBasic, но он "жадный"...
Но как оказалось, эти МК несложно программировать даже на Си. В отличие от AVR где в Си приходилось непосредственно работать с регистрами и их битами (а их имена не очень запоминающиеся), для ARM разработчики предусмотрели библиотеку функций, которую использовать можно почти на интуитивном уровне. Например вот настройка порта на выход.

Код:
  GPIO_InitTypeDef gp;  // Создание экземпляра структуры.

  gp.Pin = GPIO_PIN_13;  // Настраивать будем вывод с номером 13 (на плате к нему подключен светодиод)
  gp.Mode = GPIO_MODE_OUTPUT_PP; // Это выход и на нем может быть как положительный, так и отрицательный потенциал.
  gp.Pull = GPIO_NOPULL;        // Подтягивающие резисторы не нужны.
  gp.Speed = GPIO_SPEED_HIGH;  // Скорость порта.

  HAL_GPIO_Init(GPIOC, &gp); // Инициализация порта C.
  HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET); // Установка лог 1 на выводе GPIOC.13.

Когда "мигать светодиодом" надоело, сделал USB HID устройство. Получилось относительно просто. Большую часть кода сгенерировал конструктор (скриншот выше). Осталось написать код HID_Report и приема данных по USB. Все это сделал с учетом того что начал знакомство с ARM пару дней назад и даже даташит на МК еще не прочитал...

+3

2

Пётр написал(а):

Большую часть кода сгенерировал конструктор (скриншот выше).

Не вижу.

Пётр написал(а):

Все это сделал с учетом того что начал знакомство с ARM пару дней назад и даже даташит на МК еще не прочитал...

Да ты вундеркинд. :D
А серьёзно, может отдельно тему создать (под это дело), где с самых азов и опыте выговариваться, коль оно иногда прет в гору (если это не подходит в рамках этого ресурса, то можно уйти в другое место)...

Отредактировано RDW (2016-03-29 17:32:15)

0

3

RDW написал(а):

Не вижу.

Пётр написал(а):

Тактирование от внутреннего RC генератора (8 МГц) или внешнего кварца 4 - 16 МГц. С возможностью выбора частоты ядра и периферийных блоков, путем управления множителями и делителями частоты (сриншот).

RDW написал(а):

Да ты вундеркинд.

:D Большая часть кода была сгенерирована в STM32Cube путем тыканья мышкой по картинкам, и таблицам. :) Мне же осталось добавить пару строк (настройка порта на выход, HID_Report и анализ данных, принятых по USB и изменение лог. уровня на выходе к которому подключен светодиод)...
Правда, код USB устройства получается не совсем оптимальным (много лишнего) и при полной оптимизации компилятором код весит 10 КБ (без оптимизации 23 КБ). Но зато быстро и не нужно знать все особенности МК и USB.

RDW написал(а):

А серьёзно, может отдельно тему создать (под это дело), где с самых азов и опыте выговариваться

Думаю этот раздел будет подходящим. Разное

0

4

Пётр написал(а):

:D Большая часть кода была сгенерирована в STM32Cube путем тыканья мышкой по картинкам, и таблицам.

Ах это - да, вещица прикольная, ещё бы так и прогу писать (блок схемами), чтобы вообще не заморачиваться не о чем.  :D  Всё равно ты откуда-то данные брал по "HID_Report".

0

5

RDW написал(а):

Всё равно ты откуда-то данные брал по "HID_Report".

Из баскома брал. :)  В софтовом USB баскома код имел вид

Код:
#if _usb_hids > 0
' ƒескриптор сообщени¤ (репорта), описывающий тип HID устройства и его характеристики
_usb_hid_reportdescriptor:
Data Size_hid_reportdescriptor                              ' –азмер дескриптора в байтах.
' “ип устройства. ¬ данном случае, это нестандартное HID устройство
Data &H06 , &H00 , &HFF                                     ' Usage_page(vendor Defined Page 1)
Data &H09 , &H01                                            ' Usage(vendor Usage 1)
Data &HA1 , &H02                                            ' Collection(logical)
' ќписание конечной точки, типа Input
Data &H09 , &H01                                            ' Usage(pointer)
Data &H15 , &H00                                            ' Logical_minimum(0)
Data &H25 , &HFF                                            ' Logical_maximum(255)
Data &H75 , &H08                                            ' Report_size(8)
Data &H95 , &H01                                            ' Report_count(1)
Data &H81 , &H02                                            ' Input(data , Var , Abs)
' ќписание конечной точки, типа Output
Data &H09 , &H01                                            ' Usage(pointer)
Data &H15 , &H00                                            ' Logical_minimum(0)
Data &H26 , &HFF , 0                                        ' Logical_maximum(255)
Data &H75 , &H08                                            ' Report_size(8)
Data &H95 , &H01                                            ' Report_count(1)
Data &H91 , &H02                                            ' Output(data , Var , Abs)

Data &HC0                                                   ' End_collection
#endif

Скопировал его и адаптировал под Си. :)

Код:
__ALIGN_BEGIN static uint8_t CUSTOM_HID_ReportDesc_FS[USBD_CUSTOM_HID_REPORT_DESC_SIZE] __ALIGN_END =

{
    0x06 , 0x00 , 0xFF,             // Usage_page(vendor Defined Page 1)
    0x09 , 0x01,                   // Usage(vendor Usage 1)
    0xA1 , 0x02,                   // Collection(logical)
// Описание конечной точки, типа Input
    0x09 , 0x01,                  // Usage(pointer)
    0x15 , 0x00,                  // Logical_minimum(0)
    0x25 , 0xFF,                  // Logical_maximum(255)
    0x75 , 0x08,                  // Report_size(8)
    0x95 , 0x01,                  // Report_count(1)
    0x81 , 0x02,                 // Input( , Var , Abs)
// Описание конечной точки, типа Output
    0x09 , 0x01,                 // Usage(pointer)
    0x15 , 0x00,                 // Logical_minimum(0)
    0x26 , 0xFF , 0,            // Logical_maximum(255)
    0x75 , 0x08,                 // Report_size(8)
    0x95 , 0x01,                 // Report_count(1)
    0x91 , 0x02,                  // Output(data , Var , Abs)
    0xC0                        //     END_COLLECTION
};

А также написал код анализа принятых данных и включения/выключения светодиода.

Код:
static int8_t CUSTOM_HID_OutEvent_FS (uint8_t event_idx, uint8_t state)
{
  /* USER CODE BEGIN 6 */

  USBD_CUSTOM_HID_HandleTypeDef     *hhid = (USBD_CUSTOM_HID_HandleTypeDef*)hUsbDevice_0->pClassData;

  if (hhid->Report_buf[0] == 0xAA) HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
  else if (hhid->Report_buf[0] == 0x55) HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);


  return (0);
  /* USER CODE END 6 */
}

Вот на эту тему пара статей. http://microtechnics.ru/stm32cube-usb-c … strojstva/
http://microtechnics.ru/stm32cube-usb-c … ha-dannyx/

Проект (среда EmBlocks). http://pure-basic.narod.ru/forum_files/ … D_Test.zip
HEX файл в папке bin\Release.

0

6

не, всё-таки не из головы взял данные, а подглядел готовый проект)
перестань - это делать! не хочу я опять начинать думать о АРМах и уж тем более о FPGA...) если я начну это делать, то придется забыть про АВР и Баском (а жалко, куча ЦПУ лежат на полке и ПО проплачено)
т.ч. всё, в тему не захожу  :rofl:

0

7

Необязательно полностью переходить на ARM. Всякие таймеры, термометры и т. д. проще сделать на AVR, а вот если нужно получить быструю оцифровку сигнала (быстрее 15 тысяч выборок в секунду) с хорошей разрешающей способностью или же нормально работать с SD картой, то ARM для этих задач лучше подойдет.
На хабре читал что этот МК (STM32F103C8T6) при разгоне до 130 МГц способен производить 9 миллионов выборок в секунду при разрешающей способности 12 бит.

0

8

Придётся разорится и купить билет на АРМ.
В некоторых случаях мне АВР уже не хватает.
Пётр, подожди, я тоже еду!

0

9

Пётр, такая плата подойдёт?
https://goo.gl/Z70F4Y

0

10

radan написал(а):

В некоторых случаях мне АВР уже не хватает.

Была у меня мысль что эта плата - хороший вариант для автономной (без компа) цветомузыки. :)

Есть 20 каналов (2х10) 12-ти битного АЦП.
Есть 20 КБ ОЗУ для данных (оцифрованный звук, результат БПФ и т. д.).
Нет ЦАП, но есть 16 каналов ШИМ (4 таймера, по 4 канала в каждом).
Ну и ядро процессора работает на частоте 72 МГц (можно разогнать путем изменения множителя PLL), что позволит быстрее выполнять БПФ, тем более что аппаратно поддерживаются умножение и деление 32 разрядных чисел.:)

Плату можно взять за 2.10$ https://goo.gl/wp2qhZ
Или МК отдельно, за 1.20$ https://goo.gl/cU2MrA
Правда если брать МК, то лучше взять STM32F103CBT6. Он немного дороже, но у него в два раза больше Flash памяти.
Но если брать МК, то можно подыскать более подходящий вариант, с необходимыми параметрами.

radan написал(а):

Пётр, такая плата подойдёт?

Подойдет. Внешне, она такая же как у меня.

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

Даташит на STM32F103x8 и STM32F103xB http://www.st.com/web/en/resource/techn … 161566.pdf
На странице 34 находится карта памяти МК. Как писал выше, все находится в едином адресном пространстве размером 4 ГБ.
Почти в самом конце даташита, на странице 108 есть расшифровка маркировки.

0

11

Пётр написал(а):

Была у меня мысль что эта плата - хороший вариант для автономной (без компа) цветомузыки.

Вот есть статейка на эту тему и исходники, правда камень другой:
http://we.easyelectronics.ru/reptile/8- … 030f4.html
Может подойдёт для старта?

Заказал платки и программатор.
Может вообще для этой темы отдельную ветку выделить?

0

12

Вообще на русском статей о STM32, довольно много. Вот одна из них, о AVR и ARM. https://habrahabr.ru/post/123791/

radan написал(а):

Может подойдёт для старта?

Там другая модель МК. Разве что взять от туда часть кода...

radan написал(а):

Может вообще для этой темы отдельную ветку выделить?

Можно наверное.

А пока расскажу как заливать прошивку.
Прошить МК можно как минимум двумя способами - через интерфейс SWD или USART. В первом случае понадобится программатор ST-Link или подобный, а во втором почти любой USB - USART переходник. Я использовал такой какой на картинке.

http://s7.uploads.ru/ibZk3.png

Плату с МК нужно соединить 4 проводами с переходником. 3.3В и GND для питания платы (предполагается что она питается от переходника).
Вывод RXD переходника нужно соединить с контактом A9 платы, а вывод TXD с контактом A10. Эти контакты находятся около кнопки Reset.
Для того чтобы при старте МК запустился загрузчик, а не прошивка, нужно одну из перемычек на плате, ту что дальше от кнопки Reset переключить в положение 1.
Прошивка выполняется программной Flash Loader Demonstrator.
Более подробно можно прочитать в этой статье.

Для ARM существует множество IDE и не буду рекомендовать какую-то из них, хотя бы потому что чтобы понять какая лучше  и удобней, нужно все их попробовать и сравнить. Скажу только что первую IDE которую я скачал была EmBlocks. IDE достаточно удобная (можно частично русифицировать), но может есть лучше, не знаю. Статья о ней.

0

13

Пётр написал(а):

а вот если нужно получить быструю оцифровку сигнала (быстрее 15 тысяч выборок в секунду) с хорошей разрешающей способностью

Не поверишь, это всё делается на XMega, у меня есть проект, где в реальном режиме времени обрабатывается звук качества CD (правда внешне пришлось устанавливать ADC/DAC).

0

14

RDW написал(а):

Не поверишь, это всё делается на XMega

Речь шла о Mega. Не нашел на Али плат с XMega, по адекватной цене.

RDW написал(а):

правда внешне пришлось устанавливать ADC

В STM32 встроенный АЦП с возможностью миллионов выборок в секунду. https://geektimes.ru/post/263210/

0

15

Пётр написал(а):

Речь шла о Mega. Не нашел на Али плат с XMega, по адекватной цене.

Я пытался раза два купить ХМегу у китайцев - не вышло (темнят что-то), по сей день покупаю у Фарнела или на худой конец в ЧипДипе.

Пётр написал(а):

В STM32 встроенный АЦП с возможностью миллионов выборок в секунду.

У ХМега АЦП теже 2МГц, у обоих убогие 12-бит, по этому для звука оно не приемлемо (по этому ставил внешний).
В инете есть проекты осциллографов на ней (вплоть дол часов).

АРМ круче в других вещах, но пока я в этот уровень требований к железу не залез.

Отредактировано RDW (2016-03-30 12:49:09)

0

16

тоже заказал чтобы не отстать от жизни

0

17

Оказывается у меня вот такая плата завалялась, а на ней отладчик есть.

http://s2.uploads.ru/t/7XPum.jpg

0

18

Вот схема для этой отладочной платы:

http://s3.uploads.ru/7kClx.jpg

http://sg.uploads.ru/t/c0SR9.jpg

+1

19

тоже себе такую недавно взял, + программатор ST-link v2, и платку на stm8s003f3
http://s9.uploads.ru/t/onrbK.jpg
решил изучить stm-ки, вот только после BASCOMа, очень сложно, на stm32 получилось только светодиодом поморгать, поэтому чтоб не понижать свою самооценку :) , пока что изучаю stm8 там вроде проще (больше уроков нашел на IAR), на stm32 уроки в основном на stm32f4-discovery, а здесь stm32f103.

0

20

Agbka написал(а):

на stm32 получилось только светодиодом поморгать

Если использовать программу STM32Cube, то относительно просто можно не только поморгать светодиодом. :)

Agbka написал(а):

на stm32 уроки в основном на stm32f4-discovery, а здесь stm32f103

Особых трудностей с поиском примеров для stm32f103 пока что нет. Возможно потому что платы на их основе уже некоторое время в продаже и народ активно их использует. :)
И если не работать напрямую с железом, а использовать библиотеки (StdPeriph, HAL и т. д.), то в большинстве случаев, код написанный под один тип МК, без изменений можно использовать для другого.

0

21

Пётр написал(а):

Особых трудностей с поиском примеров для stm32f103 пока что нет.

можно пожалуйста ссылочку :)

0

22

Agbka написал(а):

можно пожалуйста ссылочку

Например нужен был пример чтения температуры с датчика на кристалле. Первая ссылка в гугле. http://catethysis.ru/stm32-internal-thermosensor/
Нужен был пример работы с АЦП с использованием библиотеки HAL. Тоже почти первая ссылка. http://microtechnics.ru/stm32cube-ispolzovanie-acp-adc/

Встроенные часы удалось "завести" без особых трудностей вообще без примеров, т. к. доступа в инет не было...

0

23

У кого-то сейчас есть такая плата как в первом сообщении и возможность ее прошить и подключить к USB? Кое что работает не так как задумано и не могу понять, проблема программная или аппаратная.

0

24

Пётр
Это не поможет: http://radiokot.ru/forum/viewtopic.php? … p;t=125707

0

25

Помогло, спасибо. Проблема была в том что при тактировании часов от часового кварца, МК очень медленно стартует (примерно через 4 секунды после подачи питания) и компьютер не может проинициализировать USB и считает что устройство не подключено...
По видимому часовой кварц и USB не совместимы на этой плате.

0

26

Я всё могу понять, но на сайте bascom говорить про C и иже прочее, не корректно. Вот если бы на васике можно было stm применить, то приветствуется. А так, форум превращается, превращается форум..... в обычный C треск.

0

27

Tankor написал(а):

Я всё могу понять, но на сайте bascom говорить про C и иже прочее, не корректно. Вот если бы на васике можно было stm применить, то приветствуется. А так, форум превращается, превращается форум..... в обычный C треск.

Здесь много тем не по профилю, например ЦМУ, и ничего, за сколько лет никто не расстроился.
Да и вы тоже не расстраивайтесь, просто не заходите сюда, и всё будет хорошо.
Я вот например совсем от новостей отказался, теперь крепкий и здоровый сон.

0

28

Tankor написал(а):

Вот если бы на васике можно было stm применить, то приветствуется.

Баскома для ARM нет. Марк уже 8 лет пишет что BASCOM-ARM в разработке, но неизвестно так ли это и если так, то на каком этапе разработка.
Из бейсиков для ARM есть mikroBasic, но он "жадный"... Лекарства для него не нашел.
Вот и приходится писать на Си.

0

29

Mrshilov написал(а):

Завалялся универсальный патч

Пробовал его. С версией 4.7.1 не работает. В окне пишет кто обладатель лицензии, но демо-лимит не снимает.

0

30

Спасибо, попробую эти версии.

0