Size: a a a

2019 December 12

VS

Vadim S in STM32
Чтобы ацп у стм32 меньше шумел, полезно вставить в сигнальную линию последовательно резистор на 300 ом, а источник сигнала можно сделать низкоомным или вовсе 0.1 мкф поставить. Когда на ноге ацп висит 300 ом, шумы вообще прекращаются, до последнего знака все чисто. Не знаю почему. Просто опыт...
источник

s

stD in STM32
noname
SPL еще жива или все на HAL перешли?
В закреплённом сообщений ответ на этот вопрос.
источник

АД

А Д in STM32
добрый день. по программированию в среде arduino stm32 можно вопрос задать?
источник

s

stD in STM32
По хорошему то наверно лучше в группу ардуино - https://t.me/arduinostD
источник

s

stD in STM32
Хотя конечно это спорный вопрос. Даже не знаю как лучше.
источник

s

stD in STM32
Антон
хмм... обратил внимание, сейчас при выполнении   osKernelStart(); происходит перезагрузка платы (с stm32f4discovery работаю) собственно логично что отладка не работает.  но вопрос-почему ребут происходит.
Что-то я не понял вас совсем. Что значит не работает отладка. Отладка начинает работать с момента старта камня, а до того чтоб дойти до osKernelStart() надо милион шагов пройти. Объсните внятно, что не работает.
источник

А

Антон in STM32
stD
Что-то я не понял вас совсем. Что значит не работает отладка. Отладка начинает работать с момента старта камня, а до того чтоб дойти до osKernelStart() надо милион шагов пройти. Объсните внятно, что не работает.
могу пару скринов сбросить, но если кратко-запускаю отладку, на камень отправляется прошивка. стоит отметить что у меня так же по шагам идёт остановка выполенения каджой строки Main.c файла ( HAL_Init(); SystemClock_Config();..... инициализацие очередей и пр.) и когда дело доходит до запуска шедулера, связь с процессором теряется. при том, до момента когда запустится шедулер, есть возможность просмотра содержимого памяти. после-пропадает.
источник

АД

А Д in STM32
если не против давайте попробую тут :)
пишу программу для платы maple mini в среде arduino фреймфорк arduino stm32
https://github.com/rogerclarkmelbourne/Arduino_STM32

суть проблемы - зависает МК после запись в bkp регистры.
Есть библиотека для работы с RTC.
https://github.com/rogerclarkmelbourne/Arduino_STM32/blob/master/STM32F1/libraries/RTClock/src/RTClock.cpp
и есть надстройка для калибровки RTCCR регистров если часы RTC спешат. Как раз у меня это проблема имеется и эту функцию я использую.
https://github.com/rogerclarkmelbourne/Arduino_STM32/blob/master/STM32F1/libraries/RTClock/examples/RTCAdj/rtadjust.cpp
пример работы ее вот
https://github.com/rogerclarkmelbourne/Arduino_STM32/blob/master/STM32F1/libraries/RTClock/examples/RTCAdj/RTCAdjust.ino

автором библиотеки предполагается калибровать часы через serial порт. Сначала задать точное время. Потом через 3-10 дней снова задать точное время, и по разнице либа вычисляет значение RTCCR регистра и пишет туда. Так все работает. Я пошел дальше :)
У меня есть fram память в устройстве. Она работает нормально и все данные пишутся и читаются корректно. Я хотел дополнительно хранить значение RTCCR регистра в ней, чтобы если вытащить батарейку, снова не приходилось калибровать устройство. И второе - можно было бы на самом устростве тонко подстраивать значение RTCCR регистра если часы после калибровки спешат или отстают.

И вот тут вылезла проблема. Если я пишу в регистр командами setrtccr(RTCCR); или  setbkpdrift(drift_dur); то МК виснет.
два дня искал причину из за чего происходит зависон - определил что как раз из за этих операций. Если в бэкап регистры не пишу то ничего не виснет. Нет ли каких ньюансов работы с ними?
Запись в них проводится корректно - проверено

void setrtccr(uint8_t cal) {
 bkp_enable_writes();
 uint16_t val = 0;
 //calibration value is the 1st 7 bits of RTCCR
 //we zero out the other bits as it is not needed
 BKP->regs->RTCCR = cal & 0x7f;
 bkp_disable_writes();
}

void setbkpdrift(int16_t drift_dur) {
 bkp_enable_writes();
 bkp_write(7, drift_dur);
 bkp_disable_writes();
}
источник

АД

А Д in STM32
как бы да, ардуино, но вдруг есть какая то хитрость с этими бэкап регистрами.. которую я не учитываю
источник

s

stD in STM32
Антон
могу пару скринов сбросить, но если кратко-запускаю отладку, на камень отправляется прошивка. стоит отметить что у меня так же по шагам идёт остановка выполенения каджой строки Main.c файла ( HAL_Init(); SystemClock_Config();..... инициализацие очередей и пр.) и когда дело доходит до запуска шедулера, связь с процессором теряется. при том, до момента когда запустится шедулер, есть возможность просмотра содержимого памяти. после-пропадает.
Поставьте брекпоинт около osKernelStart(), как только отладка остановится там, включите Instruction Steping Mode, и шагайте. Вот и увидите где упадёт.
источник

s

stD in STM32
Скорее всего проблема с выделением памяти.
источник

s

stD in STM32
Можно ещё так сделать: в функции void vTaskStartScheduler( void ) натыкайте везде printf("1");, printf("2");, printf("3"); и т.д. Что не напечатает, там и упала.
источник

L

LADA_BenLADA in STM32
Здравствуйте.
Вопрос как бы о языке Си но в оправдание этому скажу что делаю я проект таймера на stm .
Так вот суть вопроса : написал я заголовочный файл для работы с LCD дисплеем (тот что на HD44780 16Х02) через регистр сдвига с I2С интерфейсом. И вроде все работает, но при выводе времени не правильно выставляется позиция числа . Т.е. хочу я что бы отображалось 9 секунд (нормально это выглядило бы так 00:09) но у меня это выглядит так 00:90.
Значение времени я храню в двух uint16 переменных (одна для минут другая для секунд) потом преобразую их в char массив с помощью itoa . Потом вывожу его на дисплей .
Как сделать или что изменить что бы отображалось нормально значения числа ?
источник

s

stD in STM32
Зачем часы и минуты хранить в 16-ти битных переменных, достаточно uint8_t.

 uint8_t hour = 12;
 uint8_t minute = 43;

 char str[64] = {0,};
 snprintf(str, 64, "%d%d:%d%d\n", hour / 10, hour % 10, minute / 10, minute % 10);

 HAL_UART_Transmit(&huart1, (uint8_t*)str, strlen(str), 1000);
источник

s

stD in STM32
источник

YL

Yury Lyushnevsky in STM32
stD
Можно ещё так сделать: в функции void vTaskStartScheduler( void ) натыкайте везде printf("1");, printf("2");, printf("3"); и т.д. Что не напечатает, там и упала.
А куда выводится текст от printf?
источник

s

stD in STM32
В отладочную консоль.
источник

YL

Yury Lyushnevsky in STM32
stD
В отладочную консоль.
По какому uart? Надо как-то отдельно настроить?
источник

s

stD in STM32
К уарту это не имеет отношения. Вывод идёт в среду разработки через SWO.
источник

YL

Yury Lyushnevsky in STM32
stD
К уарту это не имеет отношения. Вывод идёт в среду разработки через SWO.
Я просто не пользуюсь STM32CubeIDE
источник