Перейти к содержанию

STM32 для чайника


ART_ME

Рекомендуемые сообщения

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Так, решил я углубится в ADC, и понял, что скорости АДЦ я не получаю при переходе с 103 на 405 камень)

Правильно ли я понимаю ДШ.

Что судя по ДШ 103 камня

5c83399631ab4_2019-03-096_56_54.thumb.png.9122acdf485f023241c1da1045570796.png

у меня трантится на замер будет минимум 107 нс а для 405

5c833991d4448_2019-03-096_56_43.thumb.png.373109a67322783c3bf4cebbc59730d9.png

время будет всего лишь на 7 нс быстрей? :)

То есть то что тактирование в увеличится в 2 раза, выигрыш всего около 7% :D 

Ну только ОЗУ я получу больше на этом камне, а значит я смогу длиньше участки памяти писать в ДМА. А то что вместо 14МГц я получаю 36 - роли особой не сыграет?)

 

Ну и сразу еще вопрос, у меня будет менее 200кб памяти, это же даже секунду я не смогу засечь) Как замерять то что то?)

Ну то есть например я хочу измерить сигнал 1мГц. мне нужно начать измерять мгновенно с началом сигнала) 

Это ж не осцил а фигня будет)) Допустим я измеряю что шлет мне рфид на 125кГц. Как мне успеть стартануть ДМА в момент когда я поднес карточку, с учетом того , что мне нужно вписать данные в объем RAM)

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Что бы не наступать на грабли, почитайте темы на коте, думаю лишним для понимания вопроса не будет!

https://radiokot.ru/forum/viewtopic.php?f=59&t=134144

https://radiokot.ru/forum/viewtopic.php?f=59&t=103803

Сергей.

Ссылка на комментарий
Поделиться на другие сайты

Цитата

Откуда эти числа берутся? Для F103 должно быть 72 / 5 = 14.4 мегасемпла, для F407 будет 168 / 4 = 42, в разгоне F407 спокойно 240 MHz берет(у меня на 260 работал эмулятор спектрума), а это уже 60. Если, как говорят, DCMI может забирать за 2.5 такта, а такое вполне может быть, т.к. он пакует данные в 32 бита и реально их сохраняет в 2 или 4 раза реже, то можно в разгоне добиться 100 мегасемплов.

что то там какие то сказочные результаты имхо)) ну то есть даже если это все так, где это хранить?)

пока нашел что максимально я могу от спи получить 42мбит, от спи1. то есть в теории можно писать куда то типа 25Q32

но это в теории, я пока далек от этого, только читаю.

буду разбираться видимо пока на отладочной плате 103 стм, можно ли будет данные с ацп писать сразу в по спи в 1 дма или хотя бы с промежуточным использованием RAM через 2 ДМА канала.

Хм, интересные темы)

Ссылка на комментарий
Поделиться на другие сайты

Даже просто ДМА заставить работать не выходит))

Скрытый текст

#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_dma.h"
#include "stm32f10x_adc.h"

void SetSysClockTo72(void);

#define ADC_PORT GPIOA
#define ADC_PIN GPIO_Pin_0

#define ADC ADC1

#define DMA DMA1
#define DMA_ADC_CH DMA1_Channel1

#define ADC_BUF_SIZE 100

uint16_t adcBuff[ADC_BUF_SIZE];

void GPIOInit() {
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO, ENABLE);
	GPIO_InitTypeDef gpio;

	gpio.GPIO_Mode = GPIO_Mode_AIN;
	gpio.GPIO_Pin = ADC_PIN;
	gpio.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(ADC_PORT, &gpio);
}

void DMAInit() {
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

	DMA_DeInit(DMA_ADC_CH);

	DMA_InitTypeDef dma;

	dma.DMA_DIR = DMA_DIR_PeripheralSRC;

	dma.DMA_PeripheralBaseAddr = &ADC->DR;
	dma.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
	dma.DMA_PeripheralInc = DMA_PeripheralInc_Disable;

	dma.DMA_MemoryBaseAddr = adcBuff;
	dma.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
	dma.DMA_MemoryInc = DMA_MemoryInc_Enable;

	dma.DMA_BufferSize = ADC_BUF_SIZE;

	dma.DMA_M2M = DMA_M2M_Disable;
	dma.DMA_Mode = DMA_Mode_Circular;
	dma.DMA_Priority = DMA_Priority_VeryHigh;

	DMA_Init(DMA_ADC_CH, &dma);

	DMA_Cmd(DMA, ENABLE);

	//DMA_ITConfig(DMA, DMA_IT_TC, ENABLE);
	//NVIC_EnableIRQ(DMA1_Channel1_IRQn);
}

void ADCInit() {
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

	ADC_InitTypeDef adc;

	adc.ADC_ContinuousConvMode = ENABLE;
	adc.ADC_DataAlign = ADC_DataAlign_Right;
	adc.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
	adc.ADC_Mode = ADC_Mode_Independent;
	adc.ADC_NbrOfChannel = 1;
	adc.ADC_ScanConvMode = DISABLE;

	ADC_RegularChannelConfig(ADC, ADC_Channel_0, 1, ADC_SampleTime_7Cycles5);

	ADC_Init(ADC, &adc);

	ADC_Cmd(ADC, ENABLE);
	ADC_DMACmd(ADC, ENABLE);
	ADC_ResetCalibration(ADC);

	while (ADC_GetResetCalibrationStatus(ADC));
	ADC_StartCalibration(ADC);

	while (ADC_GetCalibrationStatus(ADC));
	ADC_SoftwareStartConvCmd(ADC, ENABLE);
}

void DMA1_Channel1_IRQHandler() {
	//DMA_ClearITPendingBit(DMA1_IT_TC1);
}

int main(void)
{
	SetSysClockTo72();

	GPIOInit();

	DMAInit();

	ADCInit();

	uint8_t i = 0;
    while(1)
    {
    	//i = ADC_GetConversionValue(ADC);
    }
}

void SetSysClockTo72(void)
{
    ErrorStatus HSEStartUpStatus;

    RCC_DeInit();

    RCC_HSEConfig(RCC_HSE_ON);

    HSEStartUpStatus = RCC_WaitForHSEStartUp();

    if (HSEStartUpStatus == SUCCESS)
    {
        RCC_HCLKConfig(RCC_SYSCLK_Div1);

        RCC_PCLK2Config(RCC_HCLK_Div1);

        RCC_PCLK1Config(RCC_HCLK_Div2);

        RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

        RCC_PLLCmd(ENABLE);

        while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
        {
        }

        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

        while (RCC_GetSYSCLKSource() != 0x08)
        {
        }
    }
    else
    {
        while (1)
        {
        }
    }
}

 

 

Только что, DrobyshevAlex сказал:

ADC_GetConversionValue(ADC)

вот эта функция в while возвращает значение похожее на правду, то что атм юинт8 не важно. а вот скок не жди в массиве всегда сплошные нули, то етсь не заполняется массив

Ссылка на комментарий
Поделиться на другие сайты

Купите STM32F429-Discovery там уже и экран и SDRAM. Ну или что-то с SDRAM. Да еще и LTDC уже и слои будут, как раз луч отображать удобно.

Изменено пользователем MasterElectric
Ссылка на комментарий
Поделиться на другие сайты

9 часов назад, DrobyshevAlex сказал:

Это ж не осцил а фигня будет)) Допустим я измеряю что шлет мне рфид на 125кГц. Как мне успеть стартануть ДМА в момент когда я поднес карточку, с учетом того , что мне нужно вписать данные в объем RAM)

Смотреть, сохранять с последующим разбором полётов - это одно, а работать - совершенно другое. То-есть либо собирай осцил, либо кард-ридер.

Для осцила понадобится внешний быстрый ацп, с подключением к dcmi интерфейсу - чтобы само работало. +Внешний чип юсб с оптической развязкой, и качественный кварц - хотя-бы из термостабильной серии. Мегагерцев для мк в этом случае мало не бывает, так-что лучше сразу взять что-то из F7, или Н7 серии. Без внешнего ацп получится версия аля али экспресс, и куча потраченного за зря времени.

Ну а для кард-ридера достаточно двух внешних компараторов, две линии цап, и пары таймеров. Мк кстати может быть настолько ущербный, настолько позволяет совесть.

Ссылка на комментарий
Поделиться на другие сайты

Хорошо, пусть оно  будет кардридер или что угодно) ща вопрос в другом, адц с дма у меня не работают вообще :)

Мне бы пока с эти разобраться)

Ссылка на комментарий
Поделиться на другие сайты

ппц, два часа чтения мануала, даташита и статей в инетрнете в пустую... пока не заметил что написал не DMA_Channel а DMA во включении :D  все работает)

 

Ссылка на комментарий
Поделиться на другие сайты

Почему в пустую, это же у тебя хобби кайф получаешь. Ты уже определись создание осциллографа для тебя это кайф или страдания.

Изменено пользователем Oxford
Ссылка на комментарий
Поделиться на другие сайты

Какая разница осциллограф это или что то другое?) я дма не правильно запускал) не знал что дма исключительно для осцила использовать можно) к тому же я не расстроился) просто написал где косяк, мало ли кто будет пытаться сделать и найдёт мой кусок кода, что б знали как запустить)

Отправлено с моего HRY-LX1 через Tapatalk

Ссылка на комментарий
Поделиться на другие сайты

чет перечитал свой пост, не вижу там страданий) одни смайлы и радость) это так то было интересно)) к тому же перечитывал с телефона когда делать было нечего)) для общего развития не повредит)

Ссылка на комментарий
Поделиться на другие сайты

блин это просто фраза)) я кучу раз говорил я дебил, но это же не обязательно значит что я такой)) даже если и такой, то это просто совпадение)) а фраза как пример)

я когда инкубатор делал потратил пару дней впустую по той же аналогии) первый день это когда я разбирался почему i2c не отвечает, пока не начал читать даташит подряд, и не прочел что надо всегда два раза команду старт слать)) с паузой 100мс)

второй раз пытаясь подставить тайминги для 1602 а все равно проскакивали кракозяблики, пока Алекс мне не дал свой код инициализации)

и таких разов куча была) ни уж то у Вас никогда не было такого, что не сразу заработало, например без дебага и всегда с первого раза компилилось) ну тогда Вы больше чем гений))

я ж писал выше что все что начинает работать я пока выбрасывал) у меня два ящика поделок лежит) мне НЕ нужен осцил, мне хочется поковыряться)

а фраза аля "фух, нажрался, ща сдохну" или "два часа убил" или "жена убьет" ... это блин просто фразы) не имеющие к расстройству и мучениям отношения в моих устах))

я так скажу, если бы я мог написать прошивку и составить схему сразу, без раздумий, я б даже делать не стал это, а смысл тогда от хобби?) тут суть вся в том что бы поковыряться, я ж писал уже)

я даже доделывать его может ен буду, этот осцил, как ток увижу синусоиду, положу в ту же коробочку к забытым проектам) у меня всегда так, делаю пока не получается или не знаю как сделать или вроде и знаю но надо тестить :)

 

7 часов назад, Oxford сказал:

Сам же написал в пустую 2 часа

вообще то, я бы на Вашем месте написал что то вроде "почему впустую, это опыт) будешь умнее :D"

 

2 минуты назад, DrobyshevAlex сказал:

как ток увижу синусоиду,

хотя думаю не увижу) и раньше брошу) я хочу с помощью дма данные сразу во внешнюю флешь слать) а я пока не уверен получиться ли это)

ну то есть я хочу непрерывно писать участки хотя бы пару секунд, иначе смысла нет вообще от такого пробника)

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

то есть даже с учетом того, как долго прерывание от дма запускается, прежде чем стартанет отправка во флешь, уже данные будут перетираться, надо выходит за ранее, по половине заполнения еще прерывание делать, и кусками по половине слать во флешь) вообщем пока интерес и мысли есть буду копать))

Ссылка на комментарий
Поделиться на другие сайты

4 часа назад, DrobyshevAlex сказал:

я хочу непрерывно писать участки хотя бы пару секунд

До этого момента нужно немного изучить доки на внешнюю флеш память. Там не слишком сложная последовательность действий при записи, все тайминги документированы, их просто нужно сложить в верной последовательности. А потом разделить размер сектора на это время - будет средняя скорость. Не думаю что вас устроит подобная скорость. Это уже не осцил как таковой, а почти логгер, просто чуть более скоростной чем обычно. В любом случае скорость ацп уже будет избыточной.

Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, AVI-crak Home сказал:

Не думаю что вас устроит подобная скорость.

ну так в этом и проблема) я как раз читаю мануал на микросхему, буду пытаться завести ее с аппаратным спи и дма, но я пока еще не дошел до протокола как она работает, не знаю сколько байт слать туда нужно.

2 минуты назад, AVI-crak Home сказал:

Это уже не осцил как таковой, а почти логгер

ну так а со встроенной памятью мк вы полагаете можно сделать осцил? в котором можно иметь навигацию вперед назад? мне не надо видеть на экране в реальном времени, что можно увидеть с учетом того что глаз человека это даже не воспримет)

я и делаю по сути да, логер, пробник, как угодно назвать можно) суть в том что буду измерять, писать в память и потом листать :)

но как вы и сказали, я тоже думаю что скорости не хватит записи во флешь) и не то что даже скорости, там квадро спи, ее то может и хватит) а вот скорости что бы мк мог успевать непрерывно читать ацп в память и с памяти слать, с учетом того, что нужно разбивать на мелкие куски, что то я прочел что там блоки максимум по 256 байт) так что нужно каждые 256 байт а это где то 4 * на 256 успевать отправить по спи служебные заголовки для внешней флешь + сами данные, вот тут я сильно сомневаюсь что это реально)

но я не считал еще, пока изучаю сами флешку...

 

Ссылка на комментарий
Поделиться на другие сайты

@DrobyshevAlex Блин я не одинок в этом мире))) только я забрасываю еще на этапе разработки до плат даже не доходит... только вот сейчас более менее интересную вещь делаю 

Изменено пользователем MasterElectric
Ссылка на комментарий
Поделиться на другие сайты

Ну у меня иногда доходит) но чаще всего как только хоть как то завелось, бросаю))

Ну доводчики стекол и кнопку старт стоп делал в машину, но машину поменял, там все это было с завода)) выкинул те, продавать ен стал в машине, вдруг замкнет чо сгорит))

сделал рфид читалку на 125кгц, для кнопки старт стоп юзал, выкинул с кнопкой)

инкубатор ща вот работает, ток.

сенсорный выключатель делал, три версии разные, но не стал ставить, а смысл от них если они с моими 12 ватными лампочками не работают)) они моргают когда выключены)

ну тот который питается от двх проводв на барной стойки работает, но он снят, лень поставить) снимал что бы потестить новые версии, и бросил в коробку.

сделал рфид + нрф24 удаленное отключение камеры наблюдения, потом снял хотел умный дом делать, потом понял что умный дом бред, нафиг мне светом управлять, а видео наблюдение с оповещением и так есть от ксяоми)

сделал сенсорный выключатель для умного дома, всунул нрф24 + блок питания + атмегу 8 и 2х канальный выключатель, написал прошивку, потестил, работает, верхнюю крышку не придумал как крепить) и как сделать красиво, выкинул)

Скрытый текст

pPdwUdxQeMQ.thumb.jpg.3de278ae0eb669c7e80bc727c55bdfb9.jpg

купил жсм модули, потестил звонит, смс шлет, бросил) не знаю куда его вставить и для чего)

 

вот за пока одна мысль, это осциллограф))

у меня многое упирается в корпуса)) был бы корпус норм для выключателей, и для блока контроля дома что бы повесить на стену с экраном, то может и делал бы, а брать страшную коробку это не красиво)) а 3д принтер дорогой) ради пары корпусов заказывать нет смысла, да и не все на нем сделаешь)) да и качество у них я смотрел что в городе делают такое себе... 

Ссылка на комментарий
Поделиться на другие сайты

как то я туповат :D теперь решил подключить флешку 25q32 не фига не работает)

спи в ответ читает всегда FF если подтяжка есть и 0 если нет, соответсвенно флешка не отвечает) 

кто нибудь подключал эту микруху?)

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, DrobyshevAlex сказал:

кто нибудь подключал эту микруху?

Есно да, причём вариантов реализации низкого уровня вагон и маленькая тележка, каждый лепит своё, под свои задачи. Мне например нравится когда чтение/запись происходит без контроля из кода пользователя, само, автоматом. С использованием усечённой по самые яйца файловой системы.

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

Ссылка на комментарий
Поделиться на другие сайты

та у меня беда в том что спи как будто не работает)) 

сегодня еще потестирую вечером, но что бы я не слал во флешку эту, miso вход не шевелится)

 

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...