Я CubeIDE пользуюсь редко, но с каких пор Куб стал компилировать код? Генерировать проект, который потом компилируется, например, Keil, это одно, но сразу компилировать Си-шный код CubeIDE давно научился?
smacorp, вроде да: "STM32CubeIDE is an advanced C/C++ development platform with peripheral configuration, code generation, code compilation, and debug features for STM32" (тоже редко пользовался и давно)
Добавлено after 31 minute 41 second:
[uquote="Linuxoid91",url="/forum/viewtopic.php?p=4707938#p4707938"]С Volatile вчера не помогло. Но может сегодня поможет? Бывает у Cube IDE такой загон, иногда он bin файл не перезаписывает или собирает по предыдущему коду, а я этого не заметил, приговорил Volatile, и продолжил отлаживать костыль printf...
Да, так и вышло - Cube настолько "умный", что пока не внесешь значительные изменения в код, он может не пересобраться. Не раз с утра такое замечал - куб запустил, код собрал, а бинарник остался вчерашний[/uquote] Что-то не верится мне в это. Не знаю ни одной среды разработки с таким поведением.
Как уже говорил выше, лучше бы начать с азов, с изучения двоичной алгебры, языка, потом инструмента... ничего хорошего из того, как Вы делаете сейчас, не выйдет, поверьте. Даже если получится работающая программа, в итоге останется крайне неправильный опыт.
[uquote="Linuxoid91",url="/forum/viewtopic.php?p=4707938#p4707938"]С Volatile вчера не помогло.[/uquote]Уж который раз наш мучитель страйкболистов пишет про какой-то 'Volatile'. Кто-нить знает - что это такое?
Может все здесь думают, что он имеет в виду 'volatile', а он на самом деле в коде пишет 'Volatile'. Который где-нить в его хидерах (откуда-то скачанных) определён как:
Добавлено after 1 minute 9 seconds:
[uquote="Уош",url="/forum/viewtopic.php?p=4707998#p4707998"]Как уже говорил выше, лучше бы начать с азов[/uquote]Согласен полностью. Автору нужно брать учебник и садиться за учёбу. Рано ему ещё программы писать....
Говорить: "Загляни в дизассемблер кода или в листинг - и сразу поймёшь, что не так с переменными и как они в реале работают" - вообще не имеет смысла. Всё равно, что слепому говорить "Оцени красоту заката".
Есть вопрос по отладке. Тренируюсь на STM32F407G-DISC1. Сейчас пытаюсь запустить АЦП с DMA. Если запускать программу в режиме отладки, напряжение показывает правильно. Если выйти из отладки и нажать кратковременно Ресет , отображаемое напряжение на 15% меньше, но измерение работает. Если выключить и включить питание(или подержать Ресет более сек.)- половина напряжения и на его изменение не реагирует. Ну да ладно с измерениями( программа написана не правильно), но в чем тогда смысл отладки?
[uquote="lubitel5",url="/forum/viewtopic.php?p=4727511#p4727511"]Ну да ладно с измерениями( программа написана не правильно), но в чем тогда смысл отладки?[/uquote]Вот как раз в этом, кэп. Вы увидели в реале, что ваша "программа написана неправильно".
[uquote="lubitel5",url="/forum/viewtopic.php?p=4727511#p4727511"]но в чем тогда смысл отладки?[/uquote]
Отладка отладке рознь. Если речь за статичную/пошаговую, то она лишь для проверки правильности вашей математики алгоритмов и, возможно, проверки правильности настройки оборудования по вычитке его статусов. А есть динамическая отладка, которая чаще в режиме реального времени и аппаратный отладчик а так же режим отладки в IDE никакого к ней отношения не имеют. Нарушение таймингов - частая ошибка новичков при работе с реальным железом.
[uquote="jcxz",url="/forum/viewtopic.php?p=4727578#p4727578"][uquote="lubitel5",url="/forum/viewtopic.php?p=4727511#p4727511"]Ну да ладно с измерениями( программа написана не правильно), но в чем тогда смысл отладки?[/uquote]Вот как раз в этом, кэп. Вы увидели в реале, что ваша "программа написана неправильно". [/uquote]
Это я увидел и без отладки.
Добавлено after 1 minute 44 seconds:
[uquote="tonyk",url="/forum/viewtopic.php?p=4727546#p4727546"]
lubitel5 писал(а):чем тогда смысл отладки?
Да хотя бы в том, чтобы узнать о проблемах в вашей схеме и ПО, коли они так реагируют на изменение способа запуска _вашей_ программы.[/uquote]
lubitel5, задавать вопросы о коде без самого кода бессмысленно. Поделитесь хотя бы фрагментом своего кода.
Можете попробовать сделать невозможное? Часто одна строчка или отсутствие настройки ставят исполнение в невозможные ситуации.
[uquote="HardWareMan",url="/forum/viewtopic.php?p=4727621#p4727621"][uquote="lubitel5",url="/forum/viewtopic.php?p=4727511#p4727511"]но в чем тогда смысл отладки?[/uquote]
Отладка отладке рознь. Если речь за статичную/пошаговую, то она лишь для проверки правильности вашей математики алгоритмов и, возможно, проверки правильности настройки оборудования по вычитке его статусов. А есть динамическая отладка, которая чаще в режиме реального времени и аппаратный отладчик а так же режим отладки в IDE никакого к ней отношения не имеют. Нарушение таймингов - частая ошибка новичков при работе с реальным железом.[/uquote]
Да, статичная/пошаговая. Динамическую, скорее всего, уже не осилю.
Добавлено after 2 minutes 5 seconds:
[uquote="veso74",url="/forum/viewtopic.php?p=4727703#p4727703"]lubitel5, задавать вопросы о коде без самого кода бессмысленно. Поделитесь хотя бы фрагментом своего кода.
Можете попробовать сделать невозможное? Часто одна строчка или отсутствие настройки ставят исполнение в невозможные ситуации.[/uquote]
[uquote="lubitel5",url="/forum/viewtopic.php?p=4727704#p4727704"]Да, статичная/пошаговая. Динамическую, скорее всего, уже не осилю.[/uquote]
А придётся, увы. Таков путь.
[uquote="lubitel5",url="/forum/viewtopic.php?p=4728464#p4728464"]VREFINT, внутренний IN_17, настраивал через CubeMX.[/uquote]
а если из ADC_Channel_TempSensor прочитать значение?
[uquote="lubitel5",url="/forum/viewtopic.php?p=4728464#p4728464"]VREFINT, внутренний IN_17, настраивал через CubeMX.[/uquote]
Я имел в виду наружные пины контроллера. Или у вас готовая девборда? Если так, посмотрите на её схему, иногда там тоже упрощено.
Часть схемы такая, но получается дело не в ней. Наверное я не правильно пользуюсь CubeMX.IDE. Сначала я настраивал IN_11. потом VREFIN, по факту менял только Sampling Time с 3 на 28 и проверял через стат. отладку. Сейчас сделал так: сначала поставил поставил галку на IN_11, потом снял с VREFIN (Sampling Time в настройках сохраняется)- не работает IN_11. Потом снял галку с IN_11 и поставил на VREFIN (Sampling Time сбросилось по умолчанию), выставил Sampling Time=28, сгенерировал- заработало. Похожее было и с непрерывным режимом АЦП: после генерации на Single-channel, single conversion mode, а потом на Single-channel continuous conversion mode, последний у меня не работал. Возможно нужно перед изменением сбрасывать настройки, не знаю. Но вот когда работает в реалии, при пошаговой настройке не выходит из while(), только через Run.
После внесения изменений нажмите "сохранить все", а затем сгенерируйте код (прописав свой код только в указанных местах). Таким образом, код будет под контролем.
Иногда также запускаю очистку, а затем делает и компиляцию. В меню есть опция.
Не знаю, может и не корректный вопрос, но... Пытаюсь хоть немного разобраться с прерываниями и интересует: вот такая реализация обработки данных по прерыванию правильная или нет?
ADC1->SQR1 =0; // 1 регулярный канал
ADC1->SQR3 =11; // 1 преобразование - канал 0
ADC1->SMPR1 |= ADC_SMPR1_SMP11_1; // Установка sample time 28 для канала 11
ADC1->CR2 |= ADC_CR2_DMA; // разрешение DMA
ADC1->CR1 &= ~ADC_CR1_SCAN; // запрет режима сканирования
ADC1->CR2 &= ~ADC_CR2_EOCS; // сбрасываем этот бит, сгенерирован Кубом и не работает непрерывный режим
ADC1->CR2 |= ADC_CR2_CONT; // разрешить непрерывный режим
ADC1->CR2 |= ADC_CR2_ADON; // разрешить АЦП
DMA2_Stream0->PAR = (uint32_t) &ADC1->DR; // указываем откуда брать данные
DMA2_Stream0->NDTR = 256; // количество данных которые пишем
DMA2_Stream0->M0AR = (uint32_t) ADC_sum; // указываем куда ложить данные
DMA2_Stream0->CR |= (1 << 13); // размер данных памяти
DMA2_Stream0->CR |= (1 << 11); // размер данных перефирии
DMA2_Stream0->CR |= (1 << DMA_SxCR_CIRC_Pos); // circular
DMA2_Stream0->CR |= (1 << DMA_SxCR_MINC_Pos); // инкремируем адрес памяти для передачи данных
DMA2_Stream0->CR |= (1 << DMA_SxCR_TCIE_Pos); // разрешаем прерывание по завершению передачи данных
RCC->APB1ENR |= RCC_APB1ENR_TIM3EN; // включаем тактирование TIM3
TIM3->PSC = 41; // Частота 1 МГц (42 / (41+1))
TIM3->ARR = 65000;
TIM3->CCMR1 |= TIM_CCMR1_CC1S_0 | TIM_CCMR1_CC2S_1; // CC1 and CC2 channel is configured as input, IC1 and IC2 is mapped on TI1
TIM3->CCER |= TIM_CCER_CC1P_Msk | TIM_CCER_CC1E_Msk | TIM_CCER_CC2E_Msk; // TIM3_CCR1- активный по спаду, TIM3_CCR2- активный по наростанию, capture enabled
TIM3->SMCR |= TIM_SMCR_TS_0 | TIM_SMCR_TS_2 | TIM_SMCR_SMS_2; // TS-Trigger selection: 101: Filtered Timer Input 1 (TI1FP1); : SMS-Reset mode
NVIC_EnableIRQ(TIM3_IRQn); // разрешаем прерывания от TIM3
//----------------------------------------
void TIM3_IRQHandler () { // interrupt TIM3
GPIOD->BSRR = GPIO_PIN_13;
}
Здравствуйте. Хочу настроить режим PWM input mode для работы с пультом. Пр нажатии на кнопку в регистре TIMx status register (TIMx_SR) устанавливаются флаги что значения счетчика зафиксированы в регистрах TIMx_CCR1,2, значит сигнал захватывается? Но не вызывается прерывание, почему?