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

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

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

Сообщение VladislavS »

[uquote="uldemir",url="/forum/viewtopic.php?p=3410020#p3410020"]когда считывать регистр RTC_CNT.[/uquote]
А зачем его считывать? Его состояние и так известно.
Реклама
Аватара пользователя
Ярослав555
Поставщик валерьянки для Кота
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

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

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

Скачал тут IAR 8.30 для ARMов. Открыл проект, который в 8.22 компилился, вроде. А тут - подключение <string> вызывает Error[Pe1061]: declaration of enum "std::align_val_t" is incompatible with a declaration in another translation unit C:\Program Files (x86)\IAR Systems\Embedded Workbench 8.1\arm\inc\cpp\new 137
У меня включен компилятор С++ принудительно, не экстендет бейсед.
В общем проблема не в проекте - сгенерил кубом чистый проект, как только подключаю стринг - ошибка.
Экспериментальным путем обнаружил что снятая галочка мультифайловой компиляции решает проблему. Ну ок, не суть. Но, внезапно, из мейна перестал быть виден инклюд в другой папке, пр итом что в список источников эта папка добавлена. Указание полного пути тоже не решает проблему :facepalm: :facepalm:
В общем файлы перенес файлы в общую папку, благо их только два, и проект собрался. Уже сил нет дальше ковырять, тем более создавать бесплатную пробную учетку и делать реквест в сапорт (с АВР я так делал - прокатило :))) ). Если есть идеи куда посмотреть-потыкать буду благодарен.
Реклама
Аватара пользователя
Oxford
Опытный кот
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск
Контактная информация:

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

Сообщение Oxford »

IAR шлак, KEIL рулит
Инженер R@D

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

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

Сообщение VladislavS »

Ярослав555, Первое подтверждаю. Конкретнее в <new>. Для C++17 пилят overaligned allocation. Ну ничего, подождём, допилят. Второе не подтверждаю, всё подключается из списка директорий.

Oxford, когда в Keil C++17 завезут - приходи, похоливарим :)
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Ярослав555
Поставщик валерьянки для Кота
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

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

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

[uquote="VladislavS",url="/forum/viewtopic.php?p=3412784#p3412784"]Первое подтверждаю.
Второе не подтверждаю, всё подключается из списка директорий.[/uquote]
По первому - ок, ждем обновы. Пока что проблему поборол.
По второму - у меня мейн лежит в папке срц, инклюды в папке инк. А вот системный таймер лежал со своим инклюдом в отдельной папочке, и эта папка была добавлена в источники. При этом из мейна хидер таймера был в упор не виден. Ну ладно, не суть может глюк какой-то. Тоже поборол. Ждем обнову.
Реклама
Аватара пользователя
Ярослав555
Поставщик валерьянки для Кота
Сообщения: 2081
Зарегистрирован: Пт май 31, 2013 17:14:38
Откуда: Украина, Винница

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

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

еще один "бажик" нового иара - открываю проект, снимаю птичку мультифайловой компиляции, сохраняю, закрываю среду. Запускаю по новой - птичка стоит. Не знаю - баг самого проекта от предыдущей версии, или баг среды, или оно эту птичку само выставляет потому что по каким то причинам считает это нужным.
Реклама
Аватара пользователя
pavell
Открыл глаза
Сообщения: 56
Зарегистрирован: Вт дек 29, 2015 11:33:49

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

Сообщение pavell »

Приветствую, уважаемые. Есть тривиальная задача подключения 7 сегментного индикатора. Для экономии ног будет использован отдельный bcd в 7 сегмент дешифратор. Вопрос в следующем какие есть варианты передачи на сам дешифратор? Сам пока вижу следующее - ширина 4бит следовательно используется 4 ноги (для примера P1 - P4):
Спойлер

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

#define DIG0      ~(GPIO_ODR_1 | GPIO_ODR_2 | GPIO_ODR_3 | GPIO_ODR_4)
#define DIG1      GPIO_ODR_1
...
#define DIG9      (GPIO_ODR_1 | GPIO_ODR_3)

int main(void){

/* тактирование и инициализация портов */

uint8_t digits[] {DIG0, DIG1 ... DIG9);

for (uint8_t i = 0; i < 9; i++){
   GPIOA->ODR |= digits[i]
   relay();
}
На сколько коряво такое решение и как правильнее решить эту задачу?
Последний раз редактировалось pavell Ср июл 11, 2018 21:11:19, всего редактировалось 1 раз.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

pavell, самое правильное решение - то, которое работает как задумывалось.
А как оно выполнено - по большому счёту, фиолетово.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

pavell , оптимальное -аппаратная динамическая индикация на таймере и дма.
Есть вариант на внешних сдвиговых регистрах, здесь эмуляция многоканального SPI опять таки же на таймере и дма...
alexf58
Нашел транзистор. Понюхал.
Сообщения: 183
Зарегистрирован: Сб фев 09, 2013 23:00:23

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

Сообщение alexf58 »

Если необходимо экономить ножки до такой степени что хочется вставить внешний чип, то лучше не дешифратор, а сдвиговый регистр. Всего 2 ноги на управление. Можно SPI, а можно и ногодрыжеством, поскольку скорости много не надо. Так проще. В прерывании по таймеру. Если больше одной цифры, можно либо использовать еще сколько то ножек для динамической индикации. Скажем 4 знака. Если осталось 4 ноги процессора, то прямо управлять ключами. Если нет - 2 ножки и дешифратор.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

alexf58 , если приходится экономить что либо -выбор камня сделан не верно, и это подход кулибина-наколенника.
Аватара пользователя
pavell
Открыл глаза
Сообщения: 56
Зарегистрирован: Вт дек 29, 2015 11:33:49

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

Сообщение pavell »

Спасибо за советы, посмотрю на сдвиговые регистры, реализация как мне кажется более изящная + экономия ног. К слову МК будет использоваться в корпусе TSSOP-20 т.е. ног не много. Ну и сегодня попытался реализовать описанное мою выше , понял что даже там можно упростить. Вот так глядишь и научусь чему-нибудь ))

[uquote="dosikus",url="/forum/viewtopic.php?p=3418319#p3418319"]alexf58 , если приходится экономить что либо -выбор камня сделан не верно, и это подход кулибина-наколенника.[/uquote]
Ну я собственно им и являюсь, чоуж. А выбор сделан в соответствии со своими возможностями, под 48 ногий корпус мне ни платы не изготовить, ни МК запаять.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

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

Сообщение dosikus »

Все ваялось "на коленке" - лутЪ, и жало "топор" 900m-t-k

Изображение

Изображение

Изображение

Изображение
alexf58
Нашел транзистор. Понюхал.
Сообщения: 183
Зарегистрирован: Сб фев 09, 2013 23:00:23

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

Сообщение alexf58 »

[uquote="dosikus",url="/forum/viewtopic.php?p=3418319#p3418319"]alexf58 , если приходится экономить что либо -выбор камня сделан не верно, и это подход кулибина-наколенника.[/uquote]

Естественно В ОБЩЕМ СЛУЧАЕ лучше всего выбрать чип где всего хватает. Но вопрос был не об этом. Более того, в отдельных случаях дополнительный корпус полезен, например если нужно 5 В на выходе, или больше ток чем может дать сам процессор. Но главное, что на вопрос "как вытащить Жигули из лужи", ответ "ездить на Джипе" может и правильный, но не очень полезный.

P.S. В наше время китайцы делают небольшие двухсторонние платы с маской и надписями примерно по $1 штука. Если не надо прямо сегодня, зачем лутовское наколенное кулибинство?
Аватара пользователя
pavell
Открыл глаза
Сообщения: 56
Зарегистрирован: Вт дек 29, 2015 11:33:49

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

Сообщение pavell »

Добрый вечер столкнулся с необъяснимым для себя. Имеется таймер с прерыванием по переполнению, который работает при дефолтных настройках тактирования (HSI 8Мгц). Добавляю в функцию SystemInit() файла system_stm32f0xx.c, сразу после сброса предделителей, делитель шины APB1EHR и либо таймер, либо прерывание перестают работать (а может и оба сразу). Мануал каких то особых рекомендаций и условий установки предделителя не дает. Я обескуражен :dont_know:

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

 /* Reset SW[1:0], HPRE[3:0], PPRE[2:0], ADCPRE and MCOSEL[2:0] bits */
 RCC->CFGR &= (uint32_t)0xF8FFB80CU;
 RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE_DIV16;    //добавленная строка
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

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

Сообщение Reflector »

[uquote="pavell",url="/forum/viewtopic.php?p=3421216#p3421216"]сразу после сброса предделителей, делитель шины APB1EHR и либо таймер, либо прерывание перестают работать (а может и оба сразу).[/uquote]
Уверен, что таймер именно перестает работать, а не работает в 16 раз медленнее?
Аватара пользователя
pavell
Открыл глаза
Сообщения: 56
Зарегистрирован: Вт дек 29, 2015 11:33:49

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

Сообщение pavell »

Уверен, так как меняю значения прескейл с 7999 на 999, даже если бы я этого не сделал, то работал бы он только в 8 раз медленнее, т.к. на эти таймеры после делителя идет "железный" множитель на 2

UPD. Не знаю на сколько можно верить отладчику, но он показывает, что таймер таки работает и по крайней мере значение счетчика растет. Смею предположить, что дело в прерывании.
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

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

Сообщение Reflector »

[uquote="pavell",url="/forum/viewtopic.php?p=3421224#p3421224"]Уверен, так как меняю значения прескейл с 7999 на 999, даже если бы я этого не сделал, то работал бы он только в 8 раз медленнее, т.к. на эти таймеры после делителя идет "железный" множитель на 2[/uquote]
Точно, в 8 раз, но это сам таймер будет в 8 раз медленнее, а шина в 16 раз и через эту шину идет доступ к регистрам таймера. В начале обработчика прерывания обычно сбрасываются флаги, но из-за делителя это произойдет с опозданием и если обработчик небольшой, то сразу после выхода в него сразу попадем снова. Чтобы удостоверится, что флаги сброшены достаточно прочесть регистр TIMx->SR...
Аватара пользователя
pavell
Открыл глаза
Сообщения: 56
Зарегистрирован: Вт дек 29, 2015 11:33:49

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

Сообщение pavell »

[uquote="Reflector",url="/forum/viewtopic.php?p=3421254#p3421254"]но из-за делителя это произойдет с опозданием и если обработчик небольшой, то сразу после выхода в него сразу попадем снова.[/uquote]
Спасибо, все так и было. Поставил в обработчик цикл задержки и появились признаки правильной работы. Это что получается - использование отдельных делителей шин AHB, APB зло?
Аватара пользователя
bezzabotna
Встал на лапы
Сообщения: 134
Зарегистрирован: Пн ноя 07, 2016 12:14:14

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

Сообщение bezzabotna »

Здравствуйте!. Помогите разобраться с FSMC.
Пишу программу для управления дисплеем на ST7735R (8 бит, параллельный интерфейс). https://cdn-shop.adafruit.com/datasheet ... R_V0.2.pdf
Весь даташит прочитала, но всего, что мне надо не нашла.

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

#define COM_ADR  		*(uint16_t*)0x60000000
#define DAT_ADR		*(uint16_t*)0x60080000
//---------------------------------------------------------------------------------------//
void LCD_Write_Com(uint16_t com,uint16_t data ){
	COM_ADR	= com;
	DAT_ADR	=	data;
}
//---------------------------------------------------------------------------------------//
void LCD_Write_Data(uint16_t data ){
	DAT_ADR	=	data;
}
FSMC настраивался с помощью Cube.
Теперь мне надо инициализировать дисплей.
Тут в статье нашла что-то похожее для AVR:

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

void Send(unsigned char DATA, unsigned char DC);
void disp_init()
{
	Send(SWRESET,0);	//программный ресет
	_delay_ms(120);

	Send(SLPOUT,0);		//будим после ресета
	_delay_ms(120);

	Send(DISPON,0);		//включаем экран

	Send(MADCTL,0);		//меняем вывод цветов с GBR на RGB
	Send(0b00001000,1);

	Send(COLMOD,0);		//меняем кодировку цветопередачи на 2-байтную (64К цветов)
	Send(5,1);
	
}
То есть человек просто отправляет данные и флаг команда/данные.
А мне получается надо в функции LCD_Write_Com отправлять данные по одному адресу, а команду по другому. То есть data =SWRESET, например. Флаг данных/команды тоже выставляется там где #define. А соm где найти? И я не очень понимаю откуда эти адреса брать. В документации показаны только данные, адресов нет. Во вложении показано как выглядит описание команд. Есть еще одна статья, но там тоже не объясняется откуда это все берется и как искать https://microtechnics.ru/stm32-i-disple ... anie-fsmc/.
Как это искать? Или я что-то неправильно понимаю.

Или может быть этот подход для других дисплеев, а мне нужны функции с одним аргументом?

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

void LCD_Write_Com(uint16_t com);
void LCD_Write_Data(uint16_t data );
Вложения
3.png
список команд ч3
(119 КБ) 447 скачиваний
2.png
список команд ч2
(111.75 КБ) 246 скачиваний
1.png
список команд ч1
(91.21 КБ) 457 скачиваний
Я конечно все понимаю, но этого я не понимаю.
Ответить

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