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

Кто любит RISC в жизни, заходим, не стесняемся.
pvit
Нашел транзистор. Понюхал.
Сообщения: 191
Зарегистрирован: Вт июн 05, 2018 00:18:01

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

Сообщение pvit »

Енумы стейтов там строго локальные и в одном коротком файле, не было смысла в разухабистых префиксах. Дефайны надо будет перепроверить.

Вообще, подозреваю, что когда девайс окончательно заработает, проще будет кого-нибудь попросить, чтобы оформили нормально. У меня нет иллюзий на тему собственных познаний в плюсах, но заныривать глубже тоже как-то не хочется.

https://github.com/zserge/pt - нашел прототреды, забавная штука. Если станет совсем тяжко, можно будет попробовать.
Реклама
Аватара пользователя
bezzabotna
Встал на лапы
Сообщения: 134
Зарегистрирован: Пн ноя 07, 2016 12:14:14

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

Сообщение bezzabotna »

Почему могут отставать RTC?
Даже когда плата питается от внешнего источника питания.
В регистрах все тикает, но видимо реже чем в 1с.
инициализация:

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

hrtc.Instance = RTC;
 hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
 hrtc.Init.AsynchPrediv = 127;
 hrtc.Init.SynchPrediv = 255;
 hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
 hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
 hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
LSE 32768кГц.
Я конечно все понимаю, но этого я не понимаю.
Реклама
pvit
Нашел транзистор. Понюхал.
Сообщения: 191
Зарегистрирован: Вт июн 05, 2018 00:18:01

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

Сообщение pvit »

Кстати, может кто-то из благородных донов пожелает поучаствовать в улучшении мира? Есть в паре железок такие места, где можно кодить только на сях, которые я плохо перевариваю. Ну или если кто-то пожелает попрактиковаться в расте, надо аккуратно сколоть сишную. библиотеку GUI (для дисплея).

Я вполне реалистично оцениваю свои скилы программирования, и не вижу смысла трясти пыльными орденами, рассказывая как кодил на ассемблере под PIC12F508 двадцать лет назад :). Типа, если сильно припрет, то шашкой помахать могу, но нормальный программист справится быстрее и лучше. Зато я неплохо шарю в проектировании архитектур проектов и понимаю как сделать так, чтобы на выходе был "продукт", а не любительская поделка.

Так что если кому интересно приложить руку к опенсорсным регуляторам или reflow-паялке, был бы рад помощи. Они в любом случае будут доделаны, но время... рук на все не хватает...
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

bezzabotna, я не спец по ARM, но делитель 255 меня насторожил. Я чаще встречал 256.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Эиком - электронные компоненты и радиодетали
xVekx
Встал на лапы
Сообщения: 125
Зарегистрирован: Вс мар 01, 2009 20:41:19

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

Сообщение xVekx »

bezzabotna, начиная с железяки говёный кварц, разводка , кондёры, не отмыли плату, софт stm32f4xx_hal_conf.h (или что там у вас)
LSE_VALUE , LSE_STARTUP_TIMEOUT , RCC_OscInitTypeDef {.LSEState = RCC_LSE_ON, .LSIState = RCC_LSI_OFF,}
Спойлер

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

RTC_HandleTypeDef hrtc;

void HAL_RTC_MspInit(RTC_HandleTypeDef *hrtc)
{
	if(hrtc->Instance == RTC) {
		__HAL_RCC_RTC_ENABLE();
		__HAL_RCC_GPIOC_CLK_ENABLE();
	}
}

void RTC_Init(void)
{
	RTC_TimeTypeDef sTime;
	RTC_DateTypeDef sDate;

	hrtc.Instance = RTC;
	hrtc.Init.HourFormat		= RTC_HOURFORMAT_24;
	hrtc.Init.AsynchPrediv		= 0x7f;
	hrtc.Init.SynchPrediv		= 0xff;
	hrtc.Init.OutPut			= RTC_OUTPUT_DISABLE;
	hrtc.Init.OutPutPolarity	= RTC_OUTPUT_POLARITY_HIGH;
	hrtc.Init.OutPutType		= RTC_OUTPUT_TYPE_OPENDRAIN;


	if(HAL_RTC_Init(&hrtc) != HAL_OK) {
		printf("File:%s Fun:%s Line:%i\n",__FILE__,__func__,__LINE__);
	}

	if(HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR0) != 0x1111) {

		sTime.Hours = 0x0;
		sTime.Minutes = 0x0;
		sTime.Seconds = 0x0;
		sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
		sTime.StoreOperation = RTC_STOREOPERATION_RESET;

		if( HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BCD) != HAL_OK) {
			printf("File:%s Fun:%s Line:%i\n",__FILE__,__func__,__LINE__);
		}

		sDate.WeekDay = RTC_WEEKDAY_MONDAY;
		sDate.Month = RTC_MONTH_JANUARY;
		sDate.Date = 0x1;
		sDate.Year = 0x0;

		if(HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BCD) != HAL_OK) {
			printf("File:%s Fun:%s Line:%i\n",__FILE__,__func__,__LINE__);
		}

		HAL_RTCEx_BKUPWrite(&hrtc,RTC_BKP_DR0,0x1111);
	}

	__HAL_RTC_WAKEUPTIMER_CLEAR_FLAG(&hrtc, RTC_FLAG_WUTF);

	if (HAL_RTCEx_SetWakeUpTimer_IT(&hrtc,
			0, RTC_WAKEUPCLOCK_CK_SPRE_16BITS) != HAL_OK) {
		printf("File:%s Fun:%s Line:%i\n",__FILE__,__func__,__LINE__);
	}

	HAL_NVIC_EnableIRQ(RTC_WKUP_IRQn);
}


Реклама
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Маленький вопрос.

Тут недавно пришла из Китая отладочная плата на STM32F407VET6. Обвеска вроде ничего (даже батарейку поставили, не пожалели) и относительно недорого.

Есть на ней разъём для подключения дисплея. Может, кто-то сталкивался с такой платой и может посоветовать ссылку на какой-нибудь дисплей, который легко подключается в этот разъём без лишних шлейфов?
СпойлерИзображение
P.S. Вот про эту платку: http://wiki.stm32duino.com/index.php?title=STM32F407
Реклама
Аватара пользователя
hector
Грызет канифоль
Сообщения: 251
Зарегистрирован: Сб янв 23, 2016 10:30:29

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

Сообщение hector »

Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Нет, совсем другая разводка у дисплея.

После долгих поисков нашёл-таки подходящий: Чуть дороже, но зато без проблем подключить можно. Для экспериментов с этой платой удобнее, а для какого-нибудь конечного устройства со своей платой можно и подешевле будет выбрать, пусть и с другой разводкой.
pvit
Нашел транзистор. Понюхал.
Сообщения: 191
Зарегистрирован: Вт июн 05, 2018 00:18:01

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

Сообщение pvit »

Кстати, я тут топил за PlatformIO. Все-таки есть у него косяк - через месяц в бесплатной версии отваливается дебагер и тесты, и надо либо перерегистрироваться либо платить - ну кому что ближе.

Но к сожалению, альтернатив где юзерам было бы удобно заливать прошивки пока найти так и не удалось. Пока сваливать некуда.
Аватара пользователя
baghear
Опытный кот
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

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

Сообщение baghear »

Подскажите пожалуйста как перезапустить dma в 407?
В РМ написано, что после отработки в сингл режиме дма отключается и надо снова заполнить все его регистры и запустить, но у меня он повторно не запускается
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

Конечно не запустится, в вашем секретном коде явная ошибка!
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

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

Сообщение jcxz »

[uquote="ARV",url="/forum/viewtopic.php?p=3442988#p3442988"]bezzabotna, я не спец по ARM, но делитель 255 меня насторожил. Я чаще встречал 256.[/uquote]
Обычное дело когда в регистр сравнения некоего таймера записывается максимально возможное его значение. Тогда период такого таймера будет == максимально возможное значение + 1.
Настораживать должна запись в регистр делителя значений 2_в_степени_N.

Добавлено after 4 minutes 23 seconds:
[uquote="bezzabotna",url="/forum/viewtopic.php?p=3442889#p3442889"]Почему могут отставать RTC?[/uquote]
Численное выражение проблемы есть?
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

По поводу RTC.. Я столкнулся с тем, что на широко распространённых платах с STM32F103C8T6 (т.н. BluePill) стоит часовой кварц с нагрузочными конденсаторами где-то в 15пФ. Тогда как по даташиту кварц обязательно должен быть рассчитан на 6пФ (или около того).

Пока не сменил кварц на такой, всё было очень плохо. Часы могли идти нормально, могли заметно тормозить, могли вообще не запуститься. Ход зависел от того, держишь плату в руке или нет. В общем, всё было очень нестабильно.

После замены - всё чётко.

Так что, bezzabotna, советую убедиться, может и в Вашем случае стоит неправильный кварц.
Аватара пользователя
bezzabotna
Встал на лапы
Сообщения: 134
Зарегистрирован: Пн ноя 07, 2016 12:14:14

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

Сообщение bezzabotna »

Проблема решилась. Была ошибка в выводе данных.

У меня теперь вопрос по ацп.
Нужно мне мерить 3 канала.

1,2- сигналы 10кгц, а так же прикрутить watchdog и вызывать прерывание если сигнал превысит порог
3- сигнал 100Гц


Мне бы хотелось разобраться с регулярными каналами, поэтому для данных будет 1 регистр, и через дма надо отправлять данные в сдкарту. Но мне непонятно как я буду отличать данные один от другого? С одной стороны они по очереди измеряются, но с другой что то может пойти не так и где-то данные потеряются по дороге и я получу смещение. Это как-то ненадежно. Это если использовать режим ScanConv.

Можно конечно измерять данные для каждого канала по отдельности в режиме SingleConv, но это как-то не очень рационально. Да и неинтересно, этот режим уже освоен. Хотелось бы разобраться дальше.

И еще был вариант делать это в режиме Scan continuous, но в этом случае непонятно как подобрать частоту измерения. То есть АЦП у меня висит на шине 60МГц, там в настройках есть предделитель и для каждого канала фиксированные выборки в сек. Еще надо учесть время которое пойдет на преобразование каждого канала и разрешение данных. Стоит ли вообще заморачиваться с этим режимом? Частота сигналов не очень большая. Можно и по таймеру ацп пинать используя первый вариант.

Кстати, на счет таймера тоже не очень понятно. Если настроить включение ацп по таймеру, то ацп будет включаться с той частотой, что будет тикать таймер или таймер будет вызывать включение ацп по какому-то событию (переполнение например)?
Я конечно все понимаю, но этого я не понимаю.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

Pебята, завязываем флудить ! :kill:
Последние посты с флудом вычистил.
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

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

Сообщение jcxz »

[uquote="bezzabotna",url="/forum/viewtopic.php?p=3446048#p3446048"]И еще был вариант делать это в режиме Scan continuous, но в этом случае непонятно как подобрать частоту измерения. То есть АЦП у меня висит на шине 60МГц, там в настройках есть предделитель и для каждого канала фиксированные выборки в сек. Еще надо учесть время которое пойдет на преобразование каждого канала и разрешение данных. Стоит ли вообще заморачиваться с этим режимом? Частота сигналов не очень большая. Можно и по таймеру ацп пинать используя первый вариант.[/uquote]
Небольшая? Вы же написали про 2 канала по 10кГц каждый. 10кГц - это максимальная гармоника сигнала? Тогда частоту оцифровки нужно как минимум в 4 раза выше, а лучше ещё повыше. А это уже довольно немаленькая частота получается. И лучше конечно положить на непрерывный режим измерения + DMA с двойной буферизацией (или как оно там в STM32 называется). С АЦП именно в STM32 не работал, но думаю ничего там особенно отличающегося от других МК нет.
А то может ещё и фильтровать сигналы нужно окажется каким-нить КИХ или медианным фильтром. Чтобы всё это делать эффективно, не нагружая ЦП кучей лишних входов/выходов в ISR, нужно это делать пакетно, над блоком данных, полученным с DMA.
Аватара пользователя
bezzabotna
Встал на лапы
Сообщения: 134
Зарегистрирован: Пн ноя 07, 2016 12:14:14

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

Сообщение bezzabotna »

Частота оцифровки - это частота дискретизации канала?
Не очень понятно как ее установить.
Допустим частота тактирования АЦП у меня задается через предделитель 60МГц/8=7,5Мгц=0,13333мкс-1
Для канала 10 кГц мне нужна частота дискретизации
как минимум в 4 раза выше, а лучше ещё повыше.
.
С помощью SamplingTime я могу установить лишь время преобразования, тупо выжидая какое-то количество циклов перед тем как начать собственно измерять канал. Потом ждать SamplingTime для второго канала, потом третий и так по кругу. Или я неправильно понимаю предназначение SamplingTime?
Есть еще мысль, что это как бы время прореживания сигнала. То есть допустим
1 канал SamplingTime = 3
2 канал SamplingTime=3
3 канал SamplingTime =15
Таким образом третий канал будет преобразовываться только каждую 5 итерацию. Не могу найти где об этом можно подробно почитать.
Я конечно все понимаю, но этого я не понимаю.
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

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

Сообщение Reflector »

[uquote="bezzabotna",url="/forum/viewtopic.php?p=3446569#p3446569"]1 канал SamplingTime = 3
2 канал SamplingTime=3
3 канал SamplingTime =15
Таким образом третий канал будет преобразовываться только каждую 5 итерацию. Не могу найти где об этом можно подробно почитать.[/uquote]
Это же не полное время, там еще прибавляется 12 тактов(для 12 бит), итого получится 15 и 27... Вообще берешь таймер, задаешь в регистре CR2 поле MMS, например, чтобы Update генерил TRGO, потом в том же CR2, но уже ADC, выбираешь для EXTSEL нужный TRGO. Вроде все, даже если будет DMA, то, насколько помню, ничего больше добавлять не нужно.
Аватара пользователя
bezzabotna
Встал на лапы
Сообщения: 134
Зарегистрирован: Пн ноя 07, 2016 12:14:14

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

Сообщение bezzabotna »

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

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

Сообщение Reflector »

[uquote="bezzabotna",url="/forum/viewtopic.php?p=3446659#p3446659"]Хорошо, а зачем вообще установка времени выборки?[/uquote]
Если по-простому, то ADC подключает канал и заряжает конденсатор, потом канал отключается и измеряется напряжение на этом конденсаторе. SamplingTime подбирается таким образом, чтобы этот конденсатор успевал полностью заряжаться, от этого зависит точность измерений, а частоту дискретизации таким образом не задают, хотя в некоторых случаях можно, конечно, и так...
Ответить

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