<?xml version="1.0" encoding="UTF-8"?>        <rss version="2.0"
             xmlns:atom="http://www.w3.org/2005/Atom"
             xmlns:dc="http://purl.org/dc/elements/1.1/"
             xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
             xmlns:admin="http://webns.net/mvcb/"
             xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
             xmlns:content="http://purl.org/rss/1.0/modules/content/">
        <channel>
            <title>
									Прерывания в STM и изменение вектора прерывания. - STM32				            </title>
            <link>https://microtechnics.ru/community/stm32/preryvaniya-v-stm-i-izmenenie-vektora-preryvaniya/</link>
            <description>Обсуждение вопросов, посвященных программированию микроконтроллеров, разработке электроники и не только.</description>
            <language>ru-RU</language>
            <lastBuildDate>Sat, 06 Jun 2026 11:36:51 +0000</lastBuildDate>
            <generator>wpForo</generator>
            <ttl>60</ttl>
							                    <item>
                        <title>Прерывания в STM и изменение вектора прерывания.</title>
                        <link>https://microtechnics.ru/community/stm32/preryvaniya-v-stm-i-izmenenie-vektora-preryvaniya/#post-934</link>
                        <pubDate>Sat, 02 Apr 2022 08:55:14 +0000</pubDate>
                        <description><![CDATA[В темевозникли разногласия по поводу прерываний.
Автором &quot;tonyk&quot; было вывалена куча кода без привязки к библиотекам и среде разработки. Без этого ценность информации равна нулю.
Как я вижу...]]></description>
                        <content:encoded><![CDATA[<p>В теме https://microtechnics.ru/profilegrid_blogs/chast-9-stm32-i-s-biblioteka-uart/ возникли разногласия по поводу прерываний.</p>
<p>Автором "tonyk" было вывалена куча кода без привязки к библиотекам и среде разработки. Без этого ценность информации равна нулю.</p>
<p>Как я вижу проблему с подменой вектора прерываний.</p>
<p>Сама таблица векторов находится во флэш и зашивается туда после компиляции и прошивки. Таким образом, если в коде не объявлено прерывание, вместо него в этой таблице будет заглушка. Поэтому это прерывание должно быть где то объявлено ещё до компиляции и код должен позволять вызвать другой обработчик прерывания, который вы напишете позже, допустим в классе.</p>
<p>В библиотеке UART я пошёл по пути объявления и написания всех прерываний сразу. Решение некрасивое, но пока я не научился делать по другому. Есть ещё проект, который я ещё не выкладывал. Это проект позволяющий запустить на классах RTC. Там я пошёл по другому пути. У меня есть прерывание, которое заранее объявлено, но обработка этого прерывания вынесена в другую функцию. Но там появляются другие проблемы.</p>
<p>Есть путь, который более правилен. Как мне кажется. Но я его ещё не разрулил.</p>
<p>Дело в том, что таблицу векторов можно перенести в ОЗУ. А там подменять вектора уже труда совсем не составит. Для этого есть специальный регистр и скрипты в CMSIS. Как этим пользоваться я ещё не знаю.</p>
<p>Я очень много рыл информации по этому поводу. Но максимум что я нашёл, это изменение пускового скрипта, что не приемлемо. И куча отдельных фраз без привязки к среде разработки. Поэтому невозможно понять на 146% как это делается на самом деле.</p>
<p>В общем задача такая:</p>
<ol>
<li>Сказать компилятору, что таблица будет в ОЗУ (Это не проблема);</li>
<li>Заполнить или перенести таблицу векторов из ПЗУ в ОЗУ;</li>
<li>В специальном регистре указать смещение векторов прерываний;</li>
<li>Сделать всё это до того, как начнут инициализироваться классы.</li>
</ol>
<p>Вроде ничего сложного, но не все пункты ещё мною решены и изучены.</p>
<p><span style="text-decoration: underline">Я вот думаю, может есть люди, которые без пространных рассуждений и поливания помоями незнакомого человека подскажут как это можно сделать правильно.</span></p>
<p>Есть только условие.</p>
<p><strong>Среда разработки CubeIDE.</strong></p>
<p><strong>Использовать только голый CMSIS.</strong></p>
<p><em>Никаких Keil &amp; IAR. И их библиотек.</em> Только если есть в них решение этой проблемы, только без изменения стандартных скриптов CubeIDE.</p>
<p> </p>]]></content:encoded>
						                            <category domain="https://microtechnics.ru/community/stm32/">STM32</category>                        <dc:creator>Эдуард</dc:creator>
                        <guid isPermaLink="true">https://microtechnics.ru/community/stm32/preryvaniya-v-stm-i-izmenenie-vektora-preryvaniya/#post-934</guid>
                    </item>
							        </channel>
        </rss>
		