STM32 новичку в ARM что к чему
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: STM32 новичку в ARM что к чему
[uquote="uldemir",url="/forum/viewtopic.php?p=3410020#p3410020"]когда считывать регистр RTC_CNT.[/uquote]
А зачем его считывать? Его состояние и так известно.
А зачем его считывать? Его состояние и так известно.
- Реклама
- Ярослав555
- Поставщик валерьянки для Кота
- Сообщения: 2081
- Зарегистрирован: Пт май 31, 2013 17:14:38
- Откуда: Украина, Винница
Re: STM32 новичку в ARM что к чему
Скачал тут 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
У меня включен компилятор С++ принудительно, не экстендет бейсед.
В общем проблема не в проекте - сгенерил кубом чистый проект, как только подключаю стринг - ошибка.
Экспериментальным путем обнаружил что снятая галочка мультифайловой компиляции решает проблему. Ну ок, не суть. Но, внезапно, из мейна перестал быть виден инклюд в другой папке, пр итом что в список источников эта папка добавлена. Указание полного пути тоже не решает проблему
В общем файлы перенес файлы в общую папку, благо их только два, и проект собрался. Уже сил нет дальше ковырять, тем более создавать бесплатную пробную учетку и делать реквест в сапорт (с АВР я так делал - прокатило
). Если есть идеи куда посмотреть-потыкать буду благодарен.
У меня включен компилятор С++ принудительно, не экстендет бейсед.
В общем проблема не в проекте - сгенерил кубом чистый проект, как только подключаю стринг - ошибка.
Экспериментальным путем обнаружил что снятая галочка мультифайловой компиляции решает проблему. Ну ок, не суть. Но, внезапно, из мейна перестал быть виден инклюд в другой папке, пр итом что в список источников эта папка добавлена. Указание полного пути тоже не решает проблему
В общем файлы перенес файлы в общую папку, благо их только два, и проект собрался. Уже сил нет дальше ковырять, тем более создавать бесплатную пробную учетку и делать реквест в сапорт (с АВР я так делал - прокатило
- Oxford
- Опытный кот
- Сообщения: 819
- Зарегистрирован: Вт окт 23, 2012 13:17:25
- Откуда: Прокопьевск
- Контактная информация:
Re: STM32 новичку в ARM что к чему
IAR шлак, KEIL рулит
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: STM32 новичку в ARM что к чему
Ярослав555, Первое подтверждаю. Конкретнее в <new>. Для C++17 пилят overaligned allocation. Ну ничего, подождём, допилят. Второе не подтверждаю, всё подключается из списка директорий.
Oxford, когда в Keil C++17 завезут - приходи, похоливарим
Oxford, когда в Keil C++17 завезут - приходи, похоливарим
- Ярослав555
- Поставщик валерьянки для Кота
- Сообщения: 2081
- Зарегистрирован: Пт май 31, 2013 17:14:38
- Откуда: Украина, Винница
Re: STM32 новичку в ARM что к чему
[uquote="VladislavS",url="/forum/viewtopic.php?p=3412784#p3412784"]Первое подтверждаю.
Второе не подтверждаю, всё подключается из списка директорий.[/uquote]
По первому - ок, ждем обновы. Пока что проблему поборол.
По второму - у меня мейн лежит в папке срц, инклюды в папке инк. А вот системный таймер лежал со своим инклюдом в отдельной папочке, и эта папка была добавлена в источники. При этом из мейна хидер таймера был в упор не виден. Ну ладно, не суть может глюк какой-то. Тоже поборол. Ждем обнову.
Второе не подтверждаю, всё подключается из списка директорий.[/uquote]
По первому - ок, ждем обновы. Пока что проблему поборол.
По второму - у меня мейн лежит в папке срц, инклюды в папке инк. А вот системный таймер лежал со своим инклюдом в отдельной папочке, и эта папка была добавлена в источники. При этом из мейна хидер таймера был в упор не виден. Ну ладно, не суть может глюк какой-то. Тоже поборол. Ждем обнову.
- Реклама
- Ярослав555
- Поставщик валерьянки для Кота
- Сообщения: 2081
- Зарегистрирован: Пт май 31, 2013 17:14:38
- Откуда: Украина, Винница
Re: STM32 новичку в ARM что к чему
еще один "бажик" нового иара - открываю проект, снимаю птичку мультифайловой компиляции, сохраняю, закрываю среду. Запускаю по новой - птичка стоит. Не знаю - баг самого проекта от предыдущей версии, или баг среды, или оно эту птичку само выставляет потому что по каким то причинам считает это нужным.
Re: STM32 новичку в ARM что к чему
Приветствую, уважаемые. Есть тривиальная задача подключения 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 что к чему
pavell, самое правильное решение - то, которое работает как задумывалось.
А как оно выполнено - по большому счёту, фиолетово.
А как оно выполнено - по большому счёту, фиолетово.
Re: STM32 новичку в ARM что к чему
pavell , оптимальное -аппаратная динамическая индикация на таймере и дма.
Есть вариант на внешних сдвиговых регистрах, здесь эмуляция многоканального SPI опять таки же на таймере и дма...
Есть вариант на внешних сдвиговых регистрах, здесь эмуляция многоканального SPI опять таки же на таймере и дма...
Re: STM32 новичку в ARM что к чему
Если необходимо экономить ножки до такой степени что хочется вставить внешний чип, то лучше не дешифратор, а сдвиговый регистр. Всего 2 ноги на управление. Можно SPI, а можно и ногодрыжеством, поскольку скорости много не надо. Так проще. В прерывании по таймеру. Если больше одной цифры, можно либо использовать еще сколько то ножек для динамической индикации. Скажем 4 знака. Если осталось 4 ноги процессора, то прямо управлять ключами. Если нет - 2 ножки и дешифратор.
Re: STM32 новичку в ARM что к чему
alexf58 , если приходится экономить что либо -выбор камня сделан не верно, и это подход кулибина-наколенника.
Re: STM32 новичку в ARM что к чему
Спасибо за советы, посмотрю на сдвиговые регистры, реализация как мне кажется более изящная + экономия ног. К слову МК будет использоваться в корпусе TSSOP-20 т.е. ног не много. Ну и сегодня попытался реализовать описанное мою выше , понял что даже там можно упростить. Вот так глядишь и научусь чему-нибудь ))
[uquote="dosikus",url="/forum/viewtopic.php?p=3418319#p3418319"]alexf58 , если приходится экономить что либо -выбор камня сделан не верно, и это подход кулибина-наколенника.[/uquote]
Ну я собственно им и являюсь, чоуж. А выбор сделан в соответствии со своими возможностями, под 48 ногий корпус мне ни платы не изготовить, ни МК запаять.
[uquote="dosikus",url="/forum/viewtopic.php?p=3418319#p3418319"]alexf58 , если приходится экономить что либо -выбор камня сделан не верно, и это подход кулибина-наколенника.[/uquote]
Ну я собственно им и являюсь, чоуж. А выбор сделан в соответствии со своими возможностями, под 48 ногий корпус мне ни платы не изготовить, ни МК запаять.
Re: STM32 новичку в ARM что к чему
Все ваялось "на коленке" - лутЪ, и жало "топор" 900m-t-k








Re: STM32 новичку в ARM что к чему
[uquote="dosikus",url="/forum/viewtopic.php?p=3418319#p3418319"]alexf58 , если приходится экономить что либо -выбор камня сделан не верно, и это подход кулибина-наколенника.[/uquote]
Естественно В ОБЩЕМ СЛУЧАЕ лучше всего выбрать чип где всего хватает. Но вопрос был не об этом. Более того, в отдельных случаях дополнительный корпус полезен, например если нужно 5 В на выходе, или больше ток чем может дать сам процессор. Но главное, что на вопрос "как вытащить Жигули из лужи", ответ "ездить на Джипе" может и правильный, но не очень полезный.
P.S. В наше время китайцы делают небольшие двухсторонние платы с маской и надписями примерно по $1 штука. Если не надо прямо сегодня, зачем лутовское наколенное кулибинство?
Естественно В ОБЩЕМ СЛУЧАЕ лучше всего выбрать чип где всего хватает. Но вопрос был не об этом. Более того, в отдельных случаях дополнительный корпус полезен, например если нужно 5 В на выходе, или больше ток чем может дать сам процессор. Но главное, что на вопрос "как вытащить Жигули из лужи", ответ "ездить на Джипе" может и правильный, но не очень полезный.
P.S. В наше время китайцы делают небольшие двухсторонние платы с маской и надписями примерно по $1 штука. Если не надо прямо сегодня, зачем лутовское наколенное кулибинство?
Re: STM32 новичку в ARM что к чему
Добрый вечер столкнулся с необъяснимым для себя. Имеется таймер с прерыванием по переполнению, который работает при дефолтных настройках тактирования (HSI 8Мгц). Добавляю в функцию SystemInit() файла system_stm32f0xx.c, сразу после сброса предделителей, делитель шины APB1EHR и либо таймер, либо прерывание перестают работать (а может и оба сразу). Мануал каких то особых рекомендаций и условий установки предделителя не дает. Я обескуражен
Код: Выделить всё
/* 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; //добавленная строка
Re: STM32 новичку в ARM что к чему
[uquote="pavell",url="/forum/viewtopic.php?p=3421216#p3421216"]сразу после сброса предделителей, делитель шины APB1EHR и либо таймер, либо прерывание перестают работать (а может и оба сразу).[/uquote]
Уверен, что таймер именно перестает работать, а не работает в 16 раз медленнее?
Уверен, что таймер именно перестает работать, а не работает в 16 раз медленнее?
Re: STM32 новичку в ARM что к чему
Уверен, так как меняю значения прескейл с 7999 на 999, даже если бы я этого не сделал, то работал бы он только в 8 раз медленнее, т.к. на эти таймеры после делителя идет "железный" множитель на 2
UPD. Не знаю на сколько можно верить отладчику, но он показывает, что таймер таки работает и по крайней мере значение счетчика растет. Смею предположить, что дело в прерывании.
UPD. Не знаю на сколько можно верить отладчику, но он показывает, что таймер таки работает и по крайней мере значение счетчика растет. Смею предположить, что дело в прерывании.
Re: STM32 новичку в ARM что к чему
[uquote="pavell",url="/forum/viewtopic.php?p=3421224#p3421224"]Уверен, так как меняю значения прескейл с 7999 на 999, даже если бы я этого не сделал, то работал бы он только в 8 раз медленнее, т.к. на эти таймеры после делителя идет "железный" множитель на 2[/uquote]
Точно, в 8 раз, но это сам таймер будет в 8 раз медленнее, а шина в 16 раз и через эту шину идет доступ к регистрам таймера. В начале обработчика прерывания обычно сбрасываются флаги, но из-за делителя это произойдет с опозданием и если обработчик небольшой, то сразу после выхода в него сразу попадем снова. Чтобы удостоверится, что флаги сброшены достаточно прочесть регистр TIMx->SR...
Точно, в 8 раз, но это сам таймер будет в 8 раз медленнее, а шина в 16 раз и через эту шину идет доступ к регистрам таймера. В начале обработчика прерывания обычно сбрасываются флаги, но из-за делителя это произойдет с опозданием и если обработчик небольшой, то сразу после выхода в него сразу попадем снова. Чтобы удостоверится, что флаги сброшены достаточно прочесть регистр TIMx->SR...
Re: STM32 новичку в ARM что к чему
[uquote="Reflector",url="/forum/viewtopic.php?p=3421254#p3421254"]но из-за делителя это произойдет с опозданием и если обработчик небольшой, то сразу после выхода в него сразу попадем снова.[/uquote]
Спасибо, все так и было. Поставил в обработчик цикл задержки и появились признаки правильной работы. Это что получается - использование отдельных делителей шин AHB, APB зло?
Спасибо, все так и было. Поставил в обработчик цикл задержки и появились признаки правильной работы. Это что получается - использование отдельных делителей шин AHB, APB зло?
- bezzabotna
- Встал на лапы
- Сообщения: 134
- Зарегистрирован: Пн ноя 07, 2016 12:14:14
Re: STM32 новичку в ARM что к чему
Здравствуйте!. Помогите разобраться с FSMC.
Пишу программу для управления дисплеем на ST7735R (8 бит, параллельный интерфейс). https://cdn-shop.adafruit.com/datasheet ... R_V0.2.pdf
Весь даташит прочитала, но всего, что мне надо не нашла.
FSMC настраивался с помощью Cube.
Теперь мне надо инициализировать дисплей.
Тут в статье нашла что-то похожее для AVR:
То есть человек просто отправляет данные и флаг команда/данные.
А мне получается надо в функции LCD_Write_Com отправлять данные по одному адресу, а команду по другому. То есть data =SWRESET, например. Флаг данных/команды тоже выставляется там где #define. А соm где найти? И я не очень понимаю откуда эти адреса брать. В документации показаны только данные, адресов нет. Во вложении показано как выглядит описание команд. Есть еще одна статья, но там тоже не объясняется откуда это все берется и как искать https://microtechnics.ru/stm32-i-disple ... anie-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;
}
Теперь мне надо инициализировать дисплей.
Тут в статье нашла что-то похожее для 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 скачиваний
Я конечно все понимаю, но этого я не понимаю.


