Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

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

Ср ноя 21, 2018 02:16:13

Давайте я поищу в гугле за вас?

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

Ср ноя 21, 2018 03:40:41

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

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

Ср ноя 21, 2018 07:48:28

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


Спойлер
Минимум телодвижений, минимум писанины.
И эти люди запрещают мне ковырять в носу :) Новичку, который хочет разобраться с железом, рекомендовать дрыгать ногой с помощью GPIO->CHR это фиаско, братан. :kill:
Вложения
blink.png
(36.68 KiB) Скачиваний: 1181
Последний раз редактировалось VladislavS Ср ноя 21, 2018 08:06:32, всего редактировалось 2 раз(а).

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

Ср ноя 21, 2018 07:53:59

А у меня 2 вопроса
как прошивал Nicochip свою таблетку в аурдунье и в каком положении джамперы на таблетке...

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

Ср ноя 21, 2018 08:02:07

dosikus, второй вопрос, похоже, в точку! Искать нужно всегда на самом видном месте.

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

Ср ноя 21, 2018 08:47:31

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

Если я вас правильно понял, видео этого парня Вам помогут создать рабочий проект в Keil.
https://www.youtube.com/watch?v=6bsvxxR ... Vv0ic24jqV

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

Ср ноя 21, 2018 11:26:59

Открываешь проект, нажимаешь F7 - проект компилируется. Нажимаешь Ctrl-F5 - проект прошивается.


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

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

Ср ноя 21, 2018 15:24:45

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?

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

Ср ноя 21, 2018 15:41:59

"->" выбирает указанный элемент структуры.
SysTick состоит из элементов, мы вытаскиваем нужный и работаем с ним.

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

Ср ноя 21, 2018 15:44:58

Всё это время перемычка BOOT0 была в положении "1",
dosikus плюс в карму :)

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

Да и вообще, что означает эта мнемоника "->"? Это часть имени переменных типа GPIOC->CRH, или у неё есть определённое значение, обозначающее какие-то действия над GPIOC и CRH?
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 раз.

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

Ср ноя 21, 2018 15:46:38

дрыгать ногой с помощью GPIO->CHR это фиаско

Причину своей категоричности с технической точки зрения сможете объяснить?

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

Ср ноя 21, 2018 16:37:37

GPIOC это адрес структуры типа GPIO_TypeDef. CRH это элемент структуры. GPIOC->CRH это доступ к элементу структуры по её адресу. То же самое что и *GPIOC.CRH.
*GPIOC.CRH Keil не понимает. Дайте, пожалуйста, ссылку, где можно подробно почитать об этих структурах, из каких файлов заголовков их брать и как использовать.

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

Ср ноя 21, 2018 16:40:26

*GPIOC.CRH Keil не понимает.

Да потому, что фигню он сказал, как обычно. Правильной и наглядной будет запись вида:

Код:
#define PORTC (*GPIOC)
PORTC.CRH ^= GPIO_CRH_MODE13_0;

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

Ср ноя 21, 2018 17:45:01

Вот бы привести к виду
PORTC.13 ^= 1;
:))

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

Ср ноя 21, 2018 18:07:42

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

Код:
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;

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

Ср ноя 21, 2018 18:13:31

Лучше к
Код:
GPIOC->ODR ^= LED

А к битовым полям легко привыкнуть, отвыкать трудно...

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

Ср ноя 21, 2018 18:26:07

Не знаю, я ни привыкал, ни отвыкал. Так, пользую по мере целесообразности иногда. Из достоинств -- код получается чуть более наглядный. Из недостатков -- компилятор часто варит более громоздкий код.

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

Ср ноя 21, 2018 19:07:56

*GPIOC.CRH Keil не понимает.
(*GPIOC).CRH

Причину своей категоричности с технической точки зрения сможете объяснить?

А я вообще-то и показать могу.
Код:
  for(;;)
  {   
    GPIOC->BSRR = GPIO_BSRR_BS13;
    GPIOC->BRR = GPIO_BRR_BR13;
  };

Изображение


Код:
  for(;;)
  {   
    GPIOC->CRH ^= GPIO_CRH_MODE13;
  };

Изображение

Добавлено after 26 minutes 20 seconds:
А к битовым полям легко привыкнуть, отвыкать трудно...

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

Код:
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 KiB) Скачиваний: 1011
DS2_20181121193434.png
(37.17 KiB) Скачиваний: 996

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

Ср ноя 21, 2018 20:03:02

VladislavS, нафиг нафиг. Вы уж лучше сами, как показала практика, эксперды плюсов способны только на софтовый ногодрыг, каких либо преимуществ в работе с периферией стм32 ни один эксперд так и не доказал...

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

Ср ноя 21, 2018 20:07:23

А я вообще-то и показать могу.

Показали вы блинк на частоте 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
Ответить