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

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Мучитель микросхем
Сообщения: 437
Зарегистрирован: Пн май 27, 2019 07:18:28
Откуда: ВВХ-ск

Сообщение mont-oriol »

[uquote="VladislavS",url="/forum/viewtopic.php?p=4050583#p4050583"]Что значит "не влезет"?[/uquote]
Это значит, что в результате смены типа изменится значение.
А что ещё это может значить?
Реклама
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

[uquote="СКАЗОЧНИК",url="/forum/viewtopic.php?p=4050589#p4050589"]Ассемблер для STM пока что сложноватая штука для меня. ) Команды не такие , как были в АВР.[/uquote]
Так экспериментируйте на AVR, кто мешает. Вот например как можно организовать порты для ATmega8

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

#include <avr/io.h>

typedef struct{
  uint8_t PIN;
  uint8_t DDR;
  uint8_t PORT;
}GPIO;

#define GPIOB ((volatile GPIO*)(0x0036))
#define GPIOC ((volatile GPIO*)(0x0033))
#define GPIOD ((volatile GPIO*)(0x0030))

int main(){
  GPIOB->DDR = 1;
  GPIOB->PORT = 2;
  GPIOB->PIN = 3;
  
}
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Почему адреса 36/33/30, а не 16/13/10?

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

// iom8.h

/* Port D */
#define PIND	_SFR_IO8(0x10)
#define DDRD	_SFR_IO8(0x11)
#define PORTD	_SFR_IO8(0x12)

/* Port C */
#define PINC	_SFR_IO8(0x13)
#define DDRC	_SFR_IO8(0x14)
#define PORTC	_SFR_IO8(0x15)

/* Port B */
#define PINB	_SFR_IO8(0x16)
#define DDRB	_SFR_IO8(0x17)
#define PORTB	_SFR_IO8(0x18)
Контактная информация:
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

Ну, тут уже дело техники. ) Сам смысл понятен, что можно от традиционного АВР получить что-то похожее на СТМ. ) И если изначально так бы было, то переход с тех же АВР был бы легче.
Станислав
Реклама
Эиком - электронные компоненты и радиодетали
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

[uquote="WiseLord",url="/forum/viewtopic.php?p=4050681#p4050681"]Почему адреса 36/33/30, а не 16/13/10?[/uquote]
Потому что указывается адрес, отображенный на память, а не сырой адрес для in/out.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Ага, ОК, увидел __SFR_OFFSET в sfr_defs.h, который может быть либо 0x20, либо 0x00 в разных МК AVR.
Контактная информация:
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18788
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

COKPOWEHEU писал(а):Вот например как можно организовать порты для ATmega8
а если добавить одну звездочку, то можно вместо -> использовать точку :)))

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

#define GPIOB (*(volatile GPIO*)(0x0036))
#define GPIOC (*(volatile GPIO*)(0x0033))
#define GPIOD (*(volatile GPIO*)(0x0030))

int main(){
  GPIOB.DDR = 1;
  GPIOB.PORT = 2;
  GPIOB.PIN = 3;
}
многим точечки удобнее стрелочек :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

В stm32 используются стрелочки, я на него похожим делал чтобы СКАЗОЧНИК'у проще было понять принцип.
А для практического применения в AVR это просто не нужно, да и не всегда возможно. Вон UART распилили на несколько частей с дыркой посередине.
Родился
Сообщения: 2
Зарегистрирован: Чт июн 17, 2021 19:04:29

Сообщение Fahrenheite »

[uquote="Fahrenheite",url="/forum/viewtopic.php?p=4048939#p4048939"]Кто может помочь?
Купил девбоард STM32MP157A-DK1.
Как правильно подключить LRCLK и MCLK на I2S к STM32MP157?
Всем спасибо, кто откликнется.[/uquote]

Ребята, кто может помочь?
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 363
Зарегистрирован: Вс мар 03, 2019 08:18:34
Откуда: Волгоград

Сообщение do-vitas »

Валяется у меня один блюпил прошитый под stlink!(прошил когда-то т.к. китайский свисток сгорел а надо было чем-то шить) времена тяжёлые пришли хотел его стереть а хрен там залочен! даже просто стереть не дает пробовал много чем... кто знает как стереть?
Fahrenheite, https://narodstream.ru/programmirovanie-mk-stm32/ есть много инфы или тут http://we.easyelectronics.ru/STM32/stm3 ... tenko.html
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

Снять защиту на запись. Я несколько раз лочил контроллеры, потом восстанавливал.
stm32flash -k /dev/ttyUSB0
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 363
Зарегистрирован: Вс мар 03, 2019 08:18:34
Откуда: Волгоград

Сообщение do-vitas »

Спасибо родил уже в STM32 ST-LINK Utility в меню Option Bytes но тока через swd а я то через uart терзал...
Мучитель микросхем
Сообщения: 446
Зарегистрирован: Вс ноя 01, 2015 09:15:16
Откуда: 69.Ржев

Сообщение a797945 »

do-vitas, у него игрушка не для начинающих, начинающим на ней разве что готовые продукты юзать. что залил, от того описание и курить.
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

Мужики, а подскажите мне еще чуток. )

Есть вот такие объявления струкур в сандартном заголовочном файле:

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

typedef struct
{
  __IO uint16_t CRH;
  uint16_t  RESERVED0;
  __IO uint16_t CRL;
  uint16_t  RESERVED1;
  __IO uint16_t PRLH;
  uint16_t  RESERVED2;
  __IO uint16_t PRLL;
  uint16_t  RESERVED3;
  __IO uint16_t DIVH;
  uint16_t  RESERVED4;
  __IO uint16_t DIVL;
  uint16_t  RESERVED5;
  __IO uint16_t CNTH;
  uint16_t  RESERVED6;
  __IO uint16_t CNTL;
  uint16_t  RESERVED7;
  __IO uint16_t ALRH;
  uint16_t  RESERVED8;
  __IO uint16_t ALRL;
  uint16_t  RESERVED9;
} RTC_TypeDef;
Правильно я понимаю, чо uint16_t RESERVED7; это заглушки? Есть и 32 битные такие. Или это не правильно?
Станислав
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

СКАЗОЧНИК, правильно. В RM есть картинка распределения этих регистров в памяти. И вместо того, чтобы сделать их 32-битными, ST использовали только младшие 2 байта, а старшие типа на будущее зарезервировали, поэтому и нужны заглушки, чтобы не обращаться к регистру как к 32-битному. Хотя, сдается мне, что пока если не писать в старшую половину, легко можно переделать это так:

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

ypedef struct
{
  __IO uint32_t CRH;
  __IO uint32_t CRL;
...
Кстати, у F103 в CRH используется лишь 3 младших бита, а в CRL - 5! В общем, правильней было бы эту структуру под F103 несколько иначе расписать (еще и с битовыми полями)...
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

Спасибо. )
Станислав
Друг Кота
Сообщения: 6457
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

Это два фрагмента stm32f103xb.h
Что вы тут видите?

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

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;
...
typedef struct
{
  __IO uint32_t CRH;
  __IO uint32_t CRL;
  __IO uint32_t PRLH;
  __IO uint32_t PRLL;
  __IO uint32_t DIVH;
  __IO uint32_t DIVL;
  __IO uint32_t CNTH;
  __IO uint32_t CNTL;
  __IO uint32_t ALRH;
  __IO uint32_t ALRL;
} RTC_TypeDef;

Если не знать, что это на одном устройстве, то можно было бы сказать, что один блок с тупоконечной, а другой с остроконечной платформы. Как и с какого перепугу они в таком виде на одном устройстве оказались? Дичь какая-то.
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

Не понимаю вопроса... Тут же вроде указаны две разные структуры, относящиеся к разным блоком контроллера. И что означает тупоконечная и остроконечная платформа?
Станислав
Собутыльник Кота
Аватара пользователя
Сообщения: 2516
Зарегистрирован: Пт июл 12, 2019 22:52:01

Сообщение Eddy_Em »

СКАЗОЧНИК, тупоконечная - big endian (многие армы, кстати, умеют "в оба конца"), остроконечная - "little endian" (подавляющее большинство процессоров и МК). Та же структура для тупоконечных выглядела бы так:

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

typedef struct
{
  uint16_t  RESERVED0;
  __IO uint16_t CRH;
  uint16_t  RESERVED1;
  __IO uint16_t CRL;
...
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Контактная информация:
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

Сообщение СКАЗОЧНИК »

Вы в частности про эти строки говорите?

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


typedef struct
{
  __IO uint32_t CRL;
  __IO uint32_t CRH;
.....
} GPIO_TypeDef;
...
typedef struct
{
  __IO uint32_t CRH;
  __IO uint32_t CRL;
 __IO uint32_t PRLH;
  __IO uint32_t PRLL;
  __IO uint32_t DIVH;
  __IO uint32_t DIVL;
  __IO uint32_t CNTH;
  __IO uint32_t CNTL;
  __IO uint32_t ALRH;
  __IO uint32_t ALRL;
} RTC_TypeDef;


То что перевернуты старшие и младшие регистры?
Станислав
Ответить

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