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

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

Сообщение a5021 »

[uquote="Ярослав555",url="/forum/viewtopic.php?p=3511229#p3511229"]даташит доступен в проекте после выбора кристала,[/uquote]
В жизни никогда даташит, при работе в кубе, мне не требовался. Вы что оттуда черпаете в момент использования этой программы и как это вам помогает? Просто даже интересно.
настройки проекта доступны в один клик, а не как раньше - в два.
Число кликов -- это не юзабилити. Было бы так, все пункты вывалили бы в рабочее окно и все они стали бы доступны в один клик. Юзабилити 100%, улучшать больше нечего.

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

Новый дизайн -- это какой-то аляповатый пододеяльник, на котором в беспорядке разбросаны самые разнообразные предметы. Одно "GENERATE CODE" в сторонке, прямо под кнопками социальных сетей -- это вывих головного мозга. За такое на принудлечение надо определять. Все пиктограммы убрали, кроме ссылок на какие-то левые ресурсы. Иконки вынесли совсем, зато нечитаемых текстовых блоков накидали по всему полю. Да бред же сумасшедшего!
Активация и настройки периферии находятся на одной вкладке, а не на разных как раньше.
У меня ощущение, что вы просто перечисляете обнаруженные отличия версий. Ну хоть что-нибудь сказать.
Вижу можно чип крутить, не помню было ли такое в старом кубе...
И раньше можно было.

В общем, вы не ответили.
prinv писал(а):Но это не помешало вам упомянутую субстанцию попробовать на вкус :-)
По себе судите? Мне вообще-то достаточно было просто посмотреть мельком.
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

Сообщение Ярослав555 »

не нравится не пользуйтесь
Реклама
Друг Кота
Сообщения: 6457
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

Так я почти и не пользуюсь. Вы какой вселенской мудростью в этой фразе со мной поделиться хотели?
Последний раз редактировалось Аlex Сб ноя 24, 2018 18:54:04, всего редактировалось 1 раз.
Причина: -
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Вс ноя 13, 2016 18:04:13

Сообщение AlDr70 »

Есть вопрос по адресной арифметике. Хочу задействовать ADC1 и ADC2 в одновременном режиме преобразований. Там результат в регистре в виде младшего и старшего полуслова. К младшему обращаюсь (*(uint16_t *)((uint32_t)&(i))), к старшему
(*(uint16_t *)((uint32_t)&(i) + sizeof(uint16_t))), можно и так:
(*(uint16_t *)((uint32_t)&(i) + 2)). Так все нормально. Но, на сколько я понимаю эту запись, при обращении к старшему полуслову должна работать такая запись (*(uint16_t *)((uint32_t)&(i) + 1)). Но при таком обращении адрес сдвигается только на байт. Ведь в записи нигде нет упоминания uint8_t.
Код: прицепил 13 светодиодов на порт А для наглядности . Камень 32F103, Keil 4. Поясните пожалуйста подробнее. спасибо.

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

 #include <stm32f10x.h>                       /* STM32F103 definitions         */
#define i_High          (*(uint16_t *)((uint32_t)&(i) + sizeof(uint16_t)))
#define i_Low             (*(uint16_t *)((uint32_t)&(i))) 
/*----------------------------------------------------------------------------
  wait function
 *----------------------------------------------------------------------------*/	
		uint32_t p;
  void wait (p)  {
    uint32_t  d;
    for (d = 0; d < p; d++); 
}
/*----------------------------------------------------------------------------
  Main Program
 *----------------------------------------------------------------------------*/
  int main (void) {
  uint32_t i=0; 
  RCC->APB2ENR |=  RCC_APB2ENR_IOPAEN;
  GPIOA->CRH    =  0x22222222; 
  GPIOA->CRL    =  0x22222222;
	 	
  while (1)  { 
	 i=0xF070301 ;
	GPIOA->ODR=i_Low ;
		wait(16000000 );
  GPIOA->ODR=i_High ;
  wait(16000000 );		
   }
 }
Реклама
Эиком - электронные компоненты и радиодетали
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="AlDr70",url="/forum/viewtopic.php?p=3511776#p3511776"]Но, на сколько я понимаю эту запись, при обращении к старшему полуслову должна работать такая запись (*(uint16_t *)((uint32_t)&(i) + 1)). Но при таком обращении адрес сдвигается только на байт.[/uquote]
Как написано, так и работает. Почему прибавление единички к uint32_t должно делать что-то другое?
Реклама
Мучитель микросхем
Аватара пользователя
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Сообщение Myp3ik »

Вероятно вы хотели применить индексацию указателей

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

uint16_t dataLow = ((uint16_t*)ADC1->DR)[0];
uint16_t dataHi = ((uint16_t*)ADC1->DR)[1];
Можно по-народному, без цирка с указателями

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

uint16_t dataLow = (uint16_t)(ADC1->DR & 0x0000FFFF);
uint16_t dataHi = (uint16_t)((ADC1->DR & 0xFFFF0000) >> 16);
Иван Сусанин - первый полупроводник :solder:
Реклама
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Вс ноя 13, 2016 18:04:13

Сообщение AlDr70 »

Myp3ik, да хочу разобраться. Можно и по-народному, конечно. Но в чужом коде частенько попадаются подобные конструкции. Хотелось бы увереннее стоять на ногах. Название ветки и вопрос вроде соответствуют. Reflector, значит, если явно не указать sizeof(тип), то единица измерения адреса это байт и не зависит от размерности выражения, тоесть если к адресу 32 битного регистра прибавить 1, адрес сместится на байт, если к адресу 16 битного прибавить 1. то смещение будет тоже 1 байт. Я ожидал смещение адреса согласно размерности регистра. Что не логично.
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Если к _адресу_ прибавить единицу, указатель сместится именно на то количество байт, которое занимает тип данных, на которые указатель, собственно, указывает. На 1 байт - частный случай для char и т.п. однобайтных символов.

А Reflector на ошибку правильно указал. Единицу-то Вы прибавляете не к указтелю, а к обычному uint32_t числу.
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Вс ноя 13, 2016 18:04:13

Сообщение AlDr70 »

Как правильно написать? Мозги кипят. Изначально я отталкивался от справочника по С. Вот отрывок: "Операции адресной арифметики подчиняются следующим правилам. После выполнения операции
увеличения над указателем, данный указатель будет ссылаться на следующий объект своего
базового типа. После выполнения операции уменьшения— на предыдущий объект.
Применительно к указателям на char, операций адресной арифметики выполняются как обычные
арифметические операции, потому что длина объекта char всегда равна 1. Для всех указателей
адрес увеличивается или уменьшается на величину, равную размеру объекта того типа, на который
они указывают. Поэтому указатель всегда ссылается на объект с типом, тождественным базовому
типу указателя." Но потом запутался где-то.
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

Что мешает самому объявить как два uint16_t , и не насиловать мозг себе и окружающим?
Друг Кота
Сообщения: 6457
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

Вместе с кубом в новом дизайне появилась и утилитка для прошивки STM32 с незатейливым названием STM32CubeProgrammer. По сути, это бывший STM32 ST-LINK Utility, но в новом оперении.

Изображение

Каких либо революционных новшеств я пока не увидел, но китайский ST-LINK V2 оно мне прошило до новой версии, чего от старой утилиты было не добиться.
Друг Кота
Аватара пользователя
Сообщения: 3386
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

a5021 писал(а):китайский ST-LINK V2 оно мне прошило до новой версии, чего от старой утилиты было не добиться.
С STM32 ST-LINK Utility поставляется утилита ST-LinkUpgrade которая нормально обновляет китайские ст-линки.
Друг Кота
Сообщения: 6457
Зарегистрирован: Пт сен 13, 2013 13:11:31

Сообщение a5021 »

До какой версии?
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

А он каквсегданевкурсе...
Мучитель микросхем
Аватара пользователя
Сообщения: 450
Зарегистрирован: Вс янв 09, 2011 23:05:37
Откуда: СССР

Сообщение Myp3ik »

[uquote="AlDr70",url="/forum/viewtopic.php?p=3512293#p3512293"]После выполнения операции
увеличения над указателем, данный указатель будет ссылаться на следующий объект своего
базового типа. После выполнения операции уменьшения— на предыдущий объект.[/uquote]

Здесь имелись в виду операции инкремента/декремента указателя ++ и --
Иван Сусанин - первый полупроводник :solder:
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18788
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

AlDr70 писал(а):длина объекта char всегда равна 1
не всегда
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

Сообщение Мурик »

a5021 писал(а):До какой версии?
До текущей V2.J32.S7.
Встал на лапы
Сообщения: 125
Зарегистрирован: Вс мар 01, 2009 20:41:19

Сообщение xVekx »

Кто терзал тач на STM32F746G-Discovery или ft5336 ft6x06 чипы регистр Gesture ID получалось заставить работать?
Открыл глаза
Сообщения: 53
Зарегистрирован: Вт янв 19, 2016 23:13:21

Сообщение lazarev »

[uquote="AlDr70",url="/forum/viewtopic.php?p=3512140#p3512140"]да хочу разобраться. Можно и по-народному, конечно. Но в чужом коде частенько попадаются подобные конструкции. Хотелось бы увереннее стоять на ногах.[/uquote]Если действительно хотите разобраться в полете инженерной мысли типа #define i_Low (*(uint16_t *)((uint32_t)&(i))), разбейте его на маленькие части, упростите, и склейте упрощение части, и в результате ви получите (uint16_t)i(на конкретном примере). Или же используйте отладчик, и налету посмотрите значения переменних или карту памяти, и сразу все станет ясно и понятно как на картинке. Второй вопрос - если дошло до такого, то кто знает как он используется гдето там в коде.

PS: хороший пример того как простое чтение/запись переменной превратить в настоящий ад для человека, читающего этот код. Стоит ли использовать это дальше - однозначно да, особенно если нужно будет через пол года, год внести какието правки, и снова нужно будет потратить 2 часа времени, чтоб просто понять, что это делает
Вложения
debug.png
(61.73 КБ) 484 скачивания
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Вс ноя 13, 2016 18:04:13

Сообщение AlDr70 »

lazarev, я так и сделал. Разбил этот код на маленькие участки и разбирался с этим. Пока по другому никак. Нехорощо, конечно, когда столкнешься с плохо читаемым кодом. Отладка в железе пока мечта в слезах. Напаял светодиодов на выходе . Не получается и все тут. Много сайтов пересмотрел. Остается обновить STLink, но боюсь напортачить. Нечем будет и прошивать. Мой вопрос в целях учебы, ваши мнения все равно нужны. Практически, конечно, чем проще - тем надежней. За ответы всем спасибо. Есть сайты, где вообще могут тупо игнорировать человека если вопрос не понравился.
Ответить

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