Stm32 с чего начать изучение...

Кто любит RISC в жизни, заходим, не стесняемся.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Stm32 с чего начать изучение...

Сообщение a5021 »

Аватара пользователя
Oxford
Опытный кот
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск
Контактная информация:

Re: Stm32 с чего начать изучение...

Сообщение Oxford »

Nicochip, если нужны курсы по программированию пиши в личку.
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Stm32 с чего начать изучение...

Сообщение VladislavS »

Nicochip, раздобыл ST-Link, попробовал на нём. Чудес не бывает, и тот проект что я выше выложил и тот что в этом посте мигают аки новогодняя ёлка. Открываешь проект, нажимаешь F7 - проект компилируется. Нажимаешь Ctrl-F5 - проект прошивается. Если не работает, то что-то у тебя с железом. Пожалуй, главное и единственное достоинство Keil, что у него всё "искаропки" работает. Никакой "куб" тут ничего не изменит. Для хейтеров упростил проект донельзя. Но для развития первый будет правильней.
Изображение
Keil_Led_Blink_PC13.zip
(83.18 КБ) 307 скачиваний


Спойлер[uquote="a5021",url="/forum/viewtopic.php?p=3509219#p3509219"]Минимум телодвижений, минимум писанины.[/uquote]И эти люди запрещают мне ковырять в носу :) Новичку, который хочет разобраться с железом, рекомендовать дрыгать ногой с помощью GPIO->CHR это фиаско, братан. :kill:
Вложения
blink.png
(36.68 КБ) 1267 скачиваний
Последний раз редактировалось VladislavS Ср ноя 21, 2018 08:06:32, всего редактировалось 2 раза.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Stm32 с чего начать изучение...

Сообщение dosikus »

А у меня 2 вопроса
как прошивал Nicochip свою таблетку в аурдунье и в каком положении джамперы на таблетке...
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Stm32 с чего начать изучение...

Сообщение VladislavS »

dosikus, второй вопрос, похоже, в точку! Искать нужно всегда на самом видном месте.
Аватара пользователя
Repytw
Открыл глаза
Сообщения: 54
Зарегистрирован: Вс апр 15, 2012 23:29:00
Откуда: Воронеж

Re: Stm32 с чего начать изучение...

Сообщение Repytw »

Nicochip писал(а):Да, у меня не получается создать рабочий проект, который мне нужен в качестве шаблона, чтобы зацепиться за эту тему пока я сам не вдуплюсь что к чему и как это настраивать. Пока что я два дня словно бьюсь башкой о непробиваемую стену и это сильно демотивирует.

Если я вас правильно понял, видео этого парня Вам помогут создать рабочий проект в Keil.
https://www.youtube.com/watch?v=6bsvxxR ... Vv0ic24jqV
Аватара пользователя
Oxford
Опытный кот
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск
Контактная информация:

Re: Stm32 с чего начать изучение...

Сообщение Oxford »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3509300#p3509300"]Открываешь проект, нажимаешь F7 - проект компилируется. Нажимаешь Ctrl-F5 - проект прошивается.[/uquote]

Ctrl+F5 это запуск/остановка сессии отладки.
Загрузка программы делается через F8
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Аватара пользователя
Nicochip
Встал на лапы
Сообщения: 142
Зарегистрирован: Чт ноя 08, 2018 12:02:06

Re: Stm32 с чего начать изучение...

Сообщение Nicochip »

VladislavS, спасибо за проект. Да и всем спасибо за помощь.
dosikus писал(а):А у меня 2 вопроса как прошивал Nicochip свою таблетку в аурдунье и в каком положении джамперы на таблетке...
Это, пожалуй, вопрос дня! Тут вот что выяснилось. Всё это время перемычка BOOT0 была в положении "1", поскольку при "0" Ардуиньё отказывалось видеть таблетку. Переставил в "0", жмакнул ресет и всё заморгало! Чуть подправил код, пересобрал, прошил и да, всё работает.

Теперь объясните, пожалуйста, что это за команды?
SysTick->LOAD = HSI_VALUE/4-1;
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk;
Да и вообще, что означает эта мнемоника "->"? Это часть имени переменных типа GPIOC->CRH, или у неё есть определённое значение, обозначающее какие-то действия над GPIOC и CRH?
Всё самое свежее по проекту "Дозиметр Сталкера" ищите здесь.
Аватара пользователя
AndTer
Поставщик валерьянки для Кота
Сообщения: 2406
Зарегистрирован: Ср фев 23, 2011 12:12:31

Re: Stm32 с чего начать изучение...

Сообщение AndTer »

"->" выбирает указанный элемент структуры.
SysTick состоит из элементов, мы вытаскиваем нужный и работаем с ним.
Глупый не задает вопросы. Глупый и так все знает.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Stm32 с чего начать изучение...

Сообщение VladislavS »

[uquote="Nicochip",url="/forum/viewtopic.php?p=3509603#p3509603"]Всё это время перемычка BOOT0 была в положении "1",[/uquote]dosikus плюс в карму :)

[uquote="Nicochip",url="/forum/viewtopic.php?p=3509603#p3509603"]Теперь объясните, пожалуйста, что это за команды?
SysTick->LOAD = HSI_VALUE/4-1;
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk;[/uquote]В ядре Cortex-M есть устройство "системный таймер". Первой командой задаётся делитель частоты. Второй он включается и разрешаются прерывания от него. Описания этого таймера нет в RM. Про другие фишки кортексов типа VTOR и прочих НАДО почитать в Cortex-M Programming Manual. Знать их чаще всего обязательно.

[uquote="Nicochip",url="/forum/viewtopic.php?p=3509603#p3509603"]Да и вообще, что означает эта мнемоника "->"? Это часть имени переменных типа GPIOC->CRH, или у неё есть определённое значение, обозначающее какие-то действия над GPIOC и CRH?[/uquote]GPIOC это адрес структуры типа GPIO_TypeDef. CRH это элемент структуры. GPIOC->CRH это доступ к элементу структуры по её адресу. То же самое что и *GPIOC.CRH. Во всех заголовочных файлах регистры периферии сгруппированы в структуры по назначению. USART1, I2C1 и т.д. Доступ к регистрам происходит через адреса этих структур. USART1->DR или I2C1->DR и т.д.

Код: Выделить всё

typedef struct
{
  __IO uint32_t CRL;
  __IO uint32_t CRH;
  __IO uint32_t IDR;
  __IO uint32_t ODR;
  __IO uint32_t BSRR;
  __IO uint32_t BRR;
  __IO uint32_t LCKR;
} GPIO_TypeDef;

#define GPIOC               ((GPIO_TypeDef *) GPIOC_BASE)
Последний раз редактировалось VladislavS Ср ноя 21, 2018 15:56:30, всего редактировалось 1 раз.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Stm32 с чего начать изучение...

Сообщение a5021 »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3509300#p3509300"]дрыгать ногой с помощью GPIO->CHR это фиаско[/uquote]
Причину своей категоричности с технической точки зрения сможете объяснить?
Аватара пользователя
Nicochip
Встал на лапы
Сообщения: 142
Зарегистрирован: Чт ноя 08, 2018 12:02:06

Re: Stm32 с чего начать изучение...

Сообщение Nicochip »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3509621#p3509621"]GPIOC это адрес структуры типа GPIO_TypeDef. CRH это элемент структуры. GPIOC->CRH это доступ к элементу структуры по её адресу. То же самое что и *GPIOC.CRH.[/uquote]*GPIOC.CRH Keil не понимает. Дайте, пожалуйста, ссылку, где можно подробно почитать об этих структурах, из каких файлов заголовков их брать и как использовать.
Всё самое свежее по проекту "Дозиметр Сталкера" ищите здесь.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Stm32 с чего начать изучение...

Сообщение a5021 »

[uquote="Nicochip",url="/forum/viewtopic.php?p=3509670#p3509670"]*GPIOC.CRH Keil не понимает.[/uquote]
Да потому, что фигню он сказал, как обычно. Правильной и наглядной будет запись вида:

Код: Выделить всё

#define PORTC (*GPIOC)
PORTC.CRH ^= GPIO_CRH_MODE13_0;
Аватара пользователя
Nicochip
Встал на лапы
Сообщения: 142
Зарегистрирован: Чт ноя 08, 2018 12:02:06

Re: Stm32 с чего начать изучение...

Сообщение Nicochip »

Вот бы привести к виду
PORTC.13 ^= 1;
:))
Всё самое свежее по проекту "Дозиметр Сталкера" ищите здесь.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Stm32 с чего начать изучение...

Сообщение a5021 »

Легко. За исключением, что имя поля структуры не может начинаться с цифры.

Код: Выделить всё

typedef struct {
  uint32_t PIN0  : 1;
  uint32_t PIN1  : 1;
  uint32_t PIN2  : 1;
  uint32_t PIN3  : 1;
  uint32_t PIN4  : 1;
  uint32_t PIN5  : 1;
  uint32_t PIN6  : 1;
  uint32_t PIN7  : 1;
  uint32_t PIN8  : 1;
  uint32_t PIN9  : 1;
  uint32_t PIN10 : 1;
  uint32_t PIN11 : 1;
  uint32_t PIN12 : 1;
  uint32_t PIN13 : 1;
  uint32_t PIN14 : 1;
  uint32_t PIN15 : 1;
} PORT_X_t;

#define PORTC  (*(PORT_X_t*)&GPIOC->ODR)

PORTC.PIN13 ^= 1;
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Stm32 с чего начать изучение...

Сообщение dosikus »

Лучше к

Код: Выделить всё

GPIOC->ODR ^= LED

А к битовым полям легко привыкнуть, отвыкать трудно...
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Stm32 с чего начать изучение...

Сообщение a5021 »

Не знаю, я ни привыкал, ни отвыкал. Так, пользую по мере целесообразности иногда. Из достоинств -- код получается чуть более наглядный. Из недостатков -- компилятор часто варит более громоздкий код.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Stm32 с чего начать изучение...

Сообщение VladislavS »

[uquote="Nicochip",url="/forum/viewtopic.php?p=3509670#p3509670"]*GPIOC.CRH Keil не понимает.[/uquote](*GPIOC).CRH

[uquote="a5021",url="/forum/viewtopic.php?p=3509623#p3509623"]Причину своей категоричности с технической точки зрения сможете объяснить?[/uquote]
А я вообще-то и показать могу.

Код: Выделить всё

  for(;;)
  {   
    GPIOC->BSRR = GPIO_BSRR_BS13;
    GPIOC->BRR = GPIO_BRR_BR13;
  };

Изображение


Код: Выделить всё

  for(;;)
  {   
    GPIOC->CRH ^= GPIO_CRH_MODE13;
  };

Изображение

Добавлено after 26 minutes 20 seconds:
[uquote="dosikus",url="/forum/viewtopic.php?p=3509759#p3509759"]А к битовым полям легко привыкнуть, отвыкать трудно...[/uquote]
А не надо к ним привыкать. Лучше к плюсам привыкнуть.

Код: Выделить всё

extern "C" void SysTick_Handler(void)
{
  IOPORTS::PC_13 LED;
  LED = !LED;
}


//   18 extern "C" void SysTick_Handler(void)
//   19 {
//   20   IOPORTS::PC_13 LED;
//   21   LED = !LED;
SysTick_Handler:
        LDR.N    R0,??DataTable1  ;; 0x40011008
        LDR      R2,[R0, #+0]
        LSLS     R2,R2,#+18
        MOV      R1,#+8192
        BMI.N    ??SysTick_Handler_0
        STR      R1,[R0, #+8]
        BX       LR
??SysTick_Handler_0:
        STR      R1,[R0, #+12]
//   22 }
        BX       LR               ;; return
Вложения
DS2_2018112119340.png
(28.59 КБ) 1113 скачиваний
DS2_20181121193434.png
(37.17 КБ) 1085 скачиваний
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: Stm32 с чего начать изучение...

Сообщение dosikus »

VladislavS, нафиг нафиг. Вы уж лучше сами, как показала практика, эксперды плюсов способны только на софтовый ногодрыг, каких либо преимуществ в работе с периферией стм32 ни один эксперд так и не доказал...
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Stm32 с чего начать изучение...

Сообщение a5021 »

[uquote="VladislavS",url="/forum/viewtopic.php?p=3509788#p3509788"]А я вообще-то и показать могу.[/uquote]
Показали вы блинк на частоте 2.77мгц. Разве публиковавшийся здесь код генерировал такие частоты? Вы просто подменили условия и реализацию обсуждавшейся здесь задачи. В чем смысл, кроме того, что столь неуклюже вы пытаетесь соскочить с неудобной темы?

А не надо к ним привыкать. Лучше к плюсам привыкнуть.

STMicro об этом скорее расскажите. А то они без вас все никак не привыкнут.

Код: Выделить всё

//   18 extern "C" void SysTick_Handler(void)
//   19 {
//   20   IOPORTS::PC_13 LED;
//   21   LED = !LED;
SysTick_Handler:
        LDR.N    R0,??DataTable1  ;; 0x40011008
        LDR      R2,[R0, #+0]
        LSLS     R2,R2,#+18
        MOV      R1,#+8192
        BMI.N    ??SysTick_Handler_0
        STR      R1,[R0, #+8]
        BX       LR
??SysTick_Handler_0:
        STR      R1,[R0, #+12]
//   22 }
        BX       LR               ;; return

Неизвестно, чего у нашего фокусника не получалось больше -- то ли вообще листинг от кейла получить, то ли листинг выглядевший прилично. В общем, поступил он в свойственной ему манере -- подменили листинг кейла листингом иара.

Кейл. То же самое, но без плюсов, прерываний и прочей бесполезной фигни:

Код: Выделить всё

    31:   while (1) GPIOC->CRH ^= GPIO_CRH_MODE13_0 * ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) != 0); 
  LDR      r2,[r0,#0x00]
  LDR      r3,[r1,#0x00]
  AND      r2,r2,#0x10000
  EOR      r2,r3,r2,LSL #4
  STR      r2,[r1,#0x00]
  B        0x0800015A
Ответить

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