Quasar 20 28 февраля, 2024 Опубликовано 28 февраля, 2024 · Жалоба 7 часов назад, EdgeAligned сказал: За 10 лет сию брошюру прочтёте? Или тоже скажете, типа нафик жизнь тратить. Думаете, Raspberry сделал один человек? А ведь кто-то к ней написал и HAL, и кто-то адаптировал образ Линукса под неё. Иль наверно думаете, что это появилось само по себе, родилось уже готовым? Наивные... А давайте мы насчет вас тоже пофантазируем? Вы наверное уверены, что земля плоская? А нет, представляете, она сплюснутый шар. Вы наверное думаете, что она на слонах стоит? А нет, там все сложнее! 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 15 29 февраля, 2024 Опубликовано 29 февраля, 2024 · Жалоба On 2/26/2024 at 4:05 PM, Quasar said: Зато они змейку на собственноручно собранном спектруме запускали!!! Эти ваши Кубы тогда еще не родились! "Змейку" запускали и на "Микро-80", из ж.Радио, за годы до РК86 и Спектрума. И это была в основном именно "железячники", но ведь кто-то из них ее написал... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sidy 1 10 января, 2025 Опубликовано 10 января, 2025 · Жалоба У меня вопрос по генератору кода в cube ide: инициализирую например usart1 код генерируется для инициализации usart1, но код для инициализация портов не генерируется хотя во вкладке pinout видно что данные порты задействованы для usart1. В чем может быть дело? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 85 12 января, 2025 Опубликовано 12 января, 2025 · Жалоба On 1/10/2025 at 9:12 PM, sidy said: У меня вопрос по генератору кода в cube ide: инициализирую например usart1 код генерируется для инициализации usart1, но код для инициализация портов не генерируется хотя во вкладке pinout видно что данные порты задействованы для usart1. В чем может быть дело? Всё прекрасно генерится. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sidy 1 12 января, 2025 Опубликовано 12 января, 2025 · Жалоба 15 hours ago, x893 said: Всё прекрасно генерится. Не совсем понятно где вызывается функция HAL_UART_MspInit? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardEgor 167 12 января, 2025 Опубликовано 12 января, 2025 · Жалоба 2 часа назад, sidy сказал: Не совсем понятно где вызывается функция HAL_UART_MspInit? Советую вначале пройти отладчиком по коду пошагово и всё найдется Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 85 13 января, 2025 Опубликовано 13 января, 2025 · Жалоба 7 hours ago, sidy said: Не совсем понятно где вызывается функция HAL_UART_MspInit? Как всегда из HAL_UART_Init. Нажать CTRL+H ввести HAL_UART_MspInit и посмотреть. Но есть способ лучше ! См. пост выше Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 2 1 апреля, 2025 Опубликовано 1 апреля, 2025 · Жалоба Может, в этой теме быстрее получу ответ на свой вопрос из другой темы: Чего не хватает прерываниям таймера?! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 85 1 апреля, 2025 Опубликовано 1 апреля, 2025 · Жалоба 5 minutes ago, ARV said: Может, в этой теме быстрее получу ответ на свой вопрос из другой темы: Чего не хватает прерываниям таймера?! Разрешить прерывания в NVIC Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 2 1 апреля, 2025 Опубликовано 1 апреля, 2025 · Жалоба Само сбой, прерывания разрешены, не поленился и проследил в отладчике - стоит битик. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 2 1 апреля, 2025 Опубликовано 1 апреля, 2025 · Жалоба Ничего не понимаю. По пунктам из журнала "мурзилка для начинающих": 1. Убедитесь, что прерывание TIM6 зарегистрировано в контроллере прерываний (NVIC) - убедился, зарегистрировано (в отладчике смотрел бит). 2. Значение PSC (предделитель) правильно рассчитано для достижения нужной частоты - как-то рассчитано. 3. Значение ARR (автоматическая перезагрузка) также правильно рассчитано - как-то рассчитано. 4. Таймер запущен (TIMx->CR1 |= TIM_CR1_CEN) - запущен (в отладчике смотрел). 5. Убедитесь, что бит прерывания в регистре TIMx->DIER установлен - убедился, стоит (в отладчике смотрел). 6. Убедитесь, что приоритет прерывания TIM6 установлен корректно и не ниже приоритета других активных прерываний - установка есть, приоритет 0 (по умолчанию), пробовал ставить 2 - результат тот же. 7. Убедитесь, что в файле stm32xxxx_it.c есть правильный обработчик прерывания для TIM6 - есть, куб сгенерировал, туда и не попадаю! 8. Убедитесь, что TIM6 правильно подключено к тактовой шине - куб генерировал, в регистре RCC->APB1ENR установлен RCC_APB1ENR_TIM6EN (смотрел в отладчике) 9. Если вы используете HAL-библиотеку, убедитесь, что вы правильно инициализируете TIM6 через функцию HAL_TIM_Base_Init() - ну, само собой, использую, и все эти вызовы делает куб. 10. Убедитесь, что флаг прерывания (TIMx->SR) правильно установлен - установлен, отладчик подтвердил. 11. Проверьте приоритеты всех прерываний - ну, куб все делал по умолчанию, может. оно и не правильно, но я пока не могу понять, что не так, если не так. приоритет - см. выше, делал и 0 и 2, безрезультатно. И какого, извините, корнеплода, этому прерыванию не хватает?! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 171 1 апреля, 2025 Опубликовано 1 апреля, 2025 · Жалоба Корнеплод в форме NVIC_EnableIRQ() И во-вторых, возможна ошибкав написании имени функции обработчика прерывания. Нужно свериться с тем, что написано в стартаповом файле В-третиьх, важно чтобы расположение таблицы векторов соответствовало заданному в регистре VTOR положению И еще одна фича - глобальный запрет прерываний ассемблерной командой. В и пятых, и если там запущена FreeRTOS, то это еще одна особенность и она заключается в настройке самой РТОС Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 2 1 апреля, 2025 Опубликовано 1 апреля, 2025 · Жалоба В общем, помогли в другом месте. Оказалось, не смотря на "галочный" стиль инициализации периферии, между HAL_TIM_Base_Start_IT(&htim6); и HAL_TIM_Base_Start(&htim6); большая разница! Которую я, ествественно, не учитывал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 171 1 апреля, 2025 Опубликовано 1 апреля, 2025 (изменено) · Жалоба И эта "большая" разница - всего лишь в строчке разрешения генерации прерываний таймером Спойлер HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim) { uint32_t tmpsmcr; /* Check the parameters */ assert_param(IS_TIM_INSTANCE(htim->Instance)); /* Check the TIM state */ if (htim->State != HAL_TIM_STATE_READY) { return HAL_ERROR; } /* Set the TIM state */ htim->State = HAL_TIM_STATE_BUSY; /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) { tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) { __HAL_TIM_ENABLE(htim); } } else { __HAL_TIM_ENABLE(htim); } /* Return function status */ return HAL_OK; } Спойлер HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim) { uint32_t tmpsmcr; /* Check the parameters */ assert_param(IS_TIM_INSTANCE(htim->Instance)); /* Check the TIM state */ if (htim->State != HAL_TIM_STATE_READY) { return HAL_ERROR; } /* Set the TIM state */ htim->State = HAL_TIM_STATE_BUSY; /* Enable the TIM Update interrupt */ __HAL_TIM_ENABLE_IT(htim, TIM_IT_UPDATE); /* Enable the Peripheral, except in trigger mode where enable is automatically done with trigger */ if (IS_TIM_SLAVE_INSTANCE(htim->Instance)) { tmpsmcr = htim->Instance->SMCR & TIM_SMCR_SMS; if (!IS_TIM_SLAVEMODE_TRIGGER_ENABLED(tmpsmcr)) { __HAL_TIM_ENABLE(htim); } } else { __HAL_TIM_ENABLE(htim); } /* Return function status */ return HAL_OK; } /* Enable the TIM Update interrupt */ __HAL_TIM_ENABLE_IT(htim, TIM_IT_UPDATE); которая представляет собой макрос #define __HAL_TIM_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->DIER |= (__INTERRUPT__)) Элементарно жеж! Если до этого не работало, значит, где-то чето недосмотрели, или смотрели не тот бит. Он назыается UIE в регистре TIM6->DIER. Не путать с UIF Изменено 1 апреля, 2025 пользователем EdgeAligned Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 2 1 апреля, 2025 Опубликовано 1 апреля, 2025 · Жалоба Так я ж использовал HAL_TIM_Base_Start(&htim6), будучи уверен, что раз в кубе галочкой прерывание отметил, то оно и будет включено при вызове этой функции! Какой-то этот куб странный: 99% всего делается мышкой, но 1% где-то хитро спрятан и его надо делать руками... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться