-
Постов
1 069 -
Зарегистрирован
-
Посещение
-
Победитель дней
2
Сообщения, опубликованные firstvald
-
-
так не понятно:что еще нужно сделать чтобы компилер начал понимать что работает с сpp/
мысль попробовать пустой проект без куба интересная
компилер кейловский
-
Пробую начать использовать C++для stm32. Keil 5.17. Попробовал просто в рабочем проекте завести класс . Файл переименовал в *.cpp. Сходу получил ..\Src\y_modem.cpp(37): error: #20: identifier "class" is undefined. Заготовка для проекта изначально генерировалась кубом. Что нужно сделать чтобы получить заготовку проекта компилирующуюся с использованием C++?
-
не знаю надо смотреть
-
USART_ISR_LBDF флаг выставляется в прерывании при фиксации длинного 0 на линии. ну и можно просто руками опрашивать порт по чтению.
-
обратную польскую не хочу. вернее, всегда успеется. повторить калкулятор МК52 можно, но, с прицелом на будущее, имеет смысл именно текст и С подобный.
хотелось бы с отзывом о реализации
-
On 2/23/2020 at 7:37 AM, bzx said:
Извините за сарказм, но что ли, Ваш программист забыл школьный курс математики и не знает или не способен взять 1ю или 2ю производную сигнала или тупо хотя бы продифференцировать? Этих элементарных операций может быть достаточно для решения задачи и "высшей математики" может не понадобиться.
Вам экселя достаточно для построения мат моделек. Например, в колонке A Ваш вектор, в B первая прозводная с зависимостями ячеек A2-A1, A3-A2... Сройте графики, принимайте решения... Подсказка, начните с дифференцирования...
Если вопрос не удастся решить, то пишите на почту, контакт в подписи.
а топик то прав. программисты программисты как правило не очень умеют паять интегралы и работать с осциллографом. а тут именно надо смотреть и представлять что происходит.
-
Есть потребность в проект добавить возможность задания рассчета результатов измерения по введенной формуле. Хотелось бы в идеале просто загрузить в процессор несколько строчек кода в виде текста. В вычислениях будут использоваться несколько аргументов и одна- две результирующих переменных. В обработке будет использоваться сложение,умножение, деление вычитание, квадратный корень, возведение в степень. Вообще говоря, может понадобится анализа условий меньше, равно, больше. Уверен, что задача уже решалась неоднократно. Хотелось бы послушать мнение.
-
On 2/19/2020 at 12:20 AM, AlexandrY said:
Не 2-х, а 12-и месяцев.
Не хотите исправить ошибку?как разрабатывавший несколько кардиографов- передатчиков, с 12 месяцами согласен полностью. с поправкой на то что разработчиков было трое и бюджет был , вам не понравится какой. и, ребята не понимают сложности предприятия вааащее.
-
поскольку город не указан, по традиции форума считается что это - Нью Йорк
-
нашел решение просто тыком. несмотря на неправильность, нужно снять галочку debug->setting->debug->Download To Flash
тогда программа будет заливаться во флешь и отлаживаться. такое парадоксальное поведение только для 103 процессора. для тех, что смотрел: L412 L476 эта галка должна быть выставлена.
-
Ищу частичную/контрактную/постоянную работу в Петербурге.
STM32 C схемотехника modbus rtu Borland Builder
https://spb.hh.ru/resume/50c28e28ff072542300039ed1f7a5967636b78
-
я посмотрю, что будет получаться/ там тоже не просто - два варианта опорного.
-
да 3 я верну. но, вот напряжения
то измерены одним прибором....
-
static void MX_ADC1_Init(void) { /* USER CODE BEGIN ADC1_Init 0 */ /* USER CODE END ADC1_Init 0 */ ADC_MultiModeTypeDef multimode = {0}; ADC_ChannelConfTypeDef sConfig = {0}; /* USER CODE BEGIN ADC1_Init 1 */ /* USER CODE END ADC1_Init 1 */ /**Common config */ hadc1.Instance = ADC1; hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1; hadc1.Init.Resolution = ADC_RESOLUTION_12B; hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE; hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV; hadc1.Init.LowPowerAutoWait = DISABLE; hadc1.Init.ContinuousConvMode = DISABLE; hadc1.Init.NbrOfConversion = 1; hadc1.Init.DiscontinuousConvMode = DISABLE; hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; hadc1.Init.DMAContinuousRequests = DISABLE; hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED; hadc1.Init.OversamplingMode = DISABLE; if (HAL_ADC_Init(&hadc1) != HAL_OK) { Error_Handler(); } /**Configure the ADC multi-mode */ multimode.Mode = ADC_MODE_INDEPENDENT; if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK) { Error_Handler(); } /**Configure Regular Channel */ sConfig.Channel = ADC_CHANNEL_VBAT ;//ADC_CHANNEL_5 ;//ADC_CHANNEL_TEMPSENSOR; sConfig.Rank = ADC_REGULAR_RANK_1; sConfig.SamplingTime = ADC_SAMPLETIME_640CYCLES_5;//ADC_SAMPLETIME_2CYCLES_5; sConfig.SingleDiff = ADC_SINGLE_ENDED; sConfig.OffsetNumber = ADC_OFFSET_NONE; sConfig.Offset = 0; if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN ADC1_Init 2 */ /* USER CODE END ADC1_Init 2 */ }
я увеличил до максимума время выборки. стало получше и, в принципе, приемлимо /
1 hour ago, firstvald said:18 minutes ago, ViKo said:Ясно. У моего МК на 2.
То есть, делитель разрешается автоматически, а запрещать, значит, вручную надо? Хе-хе.
Может, у вас sampling time маловато? Не успевает набрать?
в точку. уже попробовал. огромное спасибо за компанию!!!!
там помимо того, что делителем нужно управлять, нужно проследить: чтобы внутри кристалла не оказались подключенными резисторы, через которые можно заряжать батарею. это лежит в PWR->CR4 бит VBE.
-
-
делитель на 3. питаются регистры. да я специально акцентировал что подключаю делитель к выводу vbat/ пример использования измерения напряжения с этого вывода так и не нашел. слежу чтобы от ножки отключились резисторы заряда батареи.
ну. очень много времени угрохал. казалось что этот узел работает и просто надо разобраться. похоже, идея с реле или коммутатором с измерением обычным входом ацп гораааздо правильная.
попробую полиномом прикрыть все эти стмовские косяки.
-
килоомный переменный резистор и 340 ом с движка на вывод vbat/
по документации пишут что делитель делит напряжение на 3.
да, меняю от 0 до 3.3 на ножке процессора.
-
да мне было удобно с pc3 3.3 подавать. но я мультиметром смотрю, что подавать. хотя, можно напрямую от питания подавать. я уже смотрел что непосредственно на ножку процессора приходит. вообще говоря , то, что там намерял ацп очень похоже на прямое напряжение на диоде. при этом какой то ток с ножки процессора не потребляется (на ножке спокойно регулируется от 0 до 33). и ни о каких 1/3 как в документации написано тоже говорить не получается. только если очень очень пофантазировать.
-
Зависимость получается вот такая. Хоть полиномом по ней проеззжай
U in U adc U in/U adc 0.512 0.484 1.06 1.025 0.506 2.03 1.469 0.535 2.75 2.025 0.575 3.52 2.496 0.61 4.09 3.025 0.649 4.66 -
кристалл L476/ по обычным входам читаю при 0 вольт код 0 при 3. 3 в на входе близкое к 0xfff. а вот попробовал почитать напряжение на vbat и получаю при 0 вольт код 0x25a, а при 3,3 вольтах 0x33a/
до измерения поставил
ADC1->CR|= ADC_CCR_VBATEN;//
/* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART2_UART_Init(); MX_ADC1_Init(); MX_RTC_Init(); /* USER CODE BEGIN 2 */ GPIOC->ODR|=GPIO_PIN_2|GPIO_PIN_3;// 1 ADC1->CR|= ADC_CCR_VBATEN;//â ATM32L476xx.h /* USER CODE END 2 */ while (1) { /* USER CODE END WHILE */ HAL_ADC_Start(&hadc1); GPIOC->ODR|=GPIO_PIN_8;// 1 HAL_ADC_PollForConversion(&hadc1, 100);// 21 mks GPIOC->ODR&=~GPIO_PIN_8;// 1 adcResult = HAL_ADC_GetValue(&hadc1); in_mv=(pwr_mv*adcResult)/0xfff; //bat_mv=(pwr_mv*adcResult*3)/0xfff; HAL_ADC_Stop(&hadc1); /* USER CODE BEGIN 3 */ } static void MX_ADC1_Init(void) { /* USER CODE BEGIN ADC1_Init 0 */ /* USER CODE END ADC1_Init 0 */ ADC_MultiModeTypeDef multimode = {0}; ADC_ChannelConfTypeDef sConfig = {0}; /* USER CODE BEGIN ADC1_Init 1 */ /* USER CODE END ADC1_Init 1 */ /**Common config */ hadc1.Instance = ADC1; hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1; hadc1.Init.Resolution = ADC_RESOLUTION_12B; hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE; hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV; hadc1.Init.LowPowerAutoWait = DISABLE; hadc1.Init.ContinuousConvMode = DISABLE; hadc1.Init.NbrOfConversion = 1; hadc1.Init.DiscontinuousConvMode = DISABLE; hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; hadc1.Init.DMAContinuousRequests = DISABLE; hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED; hadc1.Init.OversamplingMode = DISABLE; if (HAL_ADC_Init(&hadc1) != HAL_OK) { Error_Handler(); } /**Configure the ADC multi-mode */ multimode.Mode = ADC_MODE_INDEPENDENT; if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK) { Error_Handler(); } /**Configure Regular Channel */ sConfig.Channel = ADC_CHANNEL_VBAT ;//ADC_CHANNEL_5 ;//ADC_CHANNEL_TEMPSENSOR; sConfig.Rank = ADC_REGULAR_RANK_1; sConfig.SamplingTime = ADC_SAMPLETIME_2CYCLES_5; sConfig.SingleDiff = ADC_SINGLE_ENDED; sConfig.OffsetNumber = ADC_OFFSET_NONE; sConfig.Offset = 0; if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN ADC1_Init 2 */ /* USER CODE END ADC1_Init 2 */ }
т е то что я вижу это разрешение 8 бит с каким то смещением нуля
-
НЕ не помогает. появилась ошибка:
*** error 57: illegal address (0x08000000)
-
лежала плата с процессором L412/ брал поразбираться попозжже. запустилась сразу и отлаживается.
-
попробовал как будто у меня 100 процессор и с теми драйверами как у Arlleex . симулирует. но в железе нет точек останова.
проект вот:
https://yadi.sk/d/fvws_fyZHqPEvg
буду играться вообще с пустым проектом
спасибо огромное за потраченное время!
-
никак не пойму как сделать чтобы картинку было сразу видно
Составление схемы по описанию
в Предлагаю работу
Опубликовано · Пожаловаться
релюшку можно вот эту