Jump to content

    
Sign in to follow this  
do_not_know_Linux

stm32f103c8

Recommended Posts

  скажите вот чтобы сделать прерывание от кнопки  по снисходящему фронту на ноге PA1 для включения светодиода на PC13 после того как я включу тактирование что еще нужно сделать?  если быть точнее то что выбрать из NVIC

EXTI9_5 EXTI Line[9:5] interrupts 0x0000_009C

это будет 23 позиция в регистре

NVIC_ISER0

и для  PA1 какой мод выбрать?

00: Analog mode
01: Floating input (reset state)
10: Input with pull-up / pull-down
11: Reserved
In output mode (MODE[1:0] > 00):
00: General purpose output push-pull
01: General purpose output Open-drain
10: Alternate function output Push-pull
11: Alternate function output Open-drain

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

только давайте пожалуйста не будет делать как раньше. давайте сначала решим вопрос.   не будет специально ругаться чтобы не отвечать.

Edited by do_not_know_Linux

Share this post


Link to post
Share on other sites
8 часов назад, do_not_know_Linux сказал:

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

Естественно режим ноги должен быть "вход с подтяжкой вверх". Можно без подтяжки (плавающий вход), если есть внешний подтягивающий резистор.

И самое главное: прочитать раздел мануала "External interrupt/event controller (EXTI)". И сконфигурить EXTI соответствующим образом.

Share this post


Link to post
Share on other sites
56 minutes ago, jcxz said:

 

И самое главное: прочитать раздел мануала "External interrupt/event controller (EXTI)". И сконфигурить EXTI соответствующим образом.

спасибо...  скажите, а из таблици векторов NVIC, что выбрать?

EXTI9_5 EXTI Line[9:5] interrupts 0x0000_009C

это?

Table 61. Vector table for connectivity line devices

находится в Reference manual.

это не бред.  мне нужет адрес

0x0000_009C

к примеру этот. и позиция

23 30 settable EXTI9_5 EXTI Line[9:5] interrupts 0x0000_009C
  тут 23

позиция мне скажет какой бит использовать в регистре

ISER0

можете помочь? знаете какой вектор NVIC нужен для того чтобы зажечь светодиод от кнопки которая будет между PA1 и GND

пишу не на CИ а на Assembler. поэтому так.   я не хочу обсуждать что ассемблер не годится для таких вещей.  единственное что сейчас нужно обсудить так это какой вектор подходит.  помогите если знаете

Share this post


Link to post
Share on other sites
40 минут назад, do_not_know_Linux сказал:

можете помочь? знаете какой вектор NVIC нужен для того чтобы зажечь светодиод от кнопки которая будет между PA1 и GND

Ещё раз:

1 час назад, jcxz сказал:

И самое главное: прочитать раздел мануала "External interrupt/event controller (EXTI)". И сконфигурить EXTI соответствующим образом.

там всё есть. И про вектора в том числе.

Share this post


Link to post
Share on other sites
53 minutes ago, jcxz said:

И про вектора в том числе

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

EXTI9_5 EXTI Line[9:5] interrupts 0x0000_009C

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

Share this post


Link to post
Share on other sites
6 minutes ago, do_not_know_Linux said:

МК очень легко выходят из строя

Ограничьте ток через светодиод... Что ещё за причирны выхода из строя беспокоят?

Кнопки (контакты) имеют "дребезг". Заводить на прерывание плохая идея.

Edited by GenaSPB

Share this post


Link to post
Share on other sites
8 minutes ago, GenaSPB said:

Ограничьте ток через светодиод...

 

на кнопке что между GND и PA1 и так подпаян резистор. 

 

11 minutes ago, GenaSPB said:

Заводить на прерывание плохая идея.

 

да я не спорю.  но мне надо разобраться как это работает.  сейчас вся проблема в том что мне нужно знать точно какой вектор выбрать.   Вы можете подсказать?

EXTI9_5 EXTI Line[9:5] interrupts 0x0000_009C

напишите пожалуйста.

Share this post


Link to post
Share on other sites

У Вас будет миллион раз прерывание... или десяток тысяч.
Про номер прерыванмя читайте даташит. Вы собираетесь обрабатывать PA1 а упоминаете 9..5

Edited by GenaSPB

Share this post


Link to post
Share on other sites
20 hours ago, do_not_know_Linux said:

 


EXTI9_5 EXTI Line[9:5] interrupts 0x0000_009C

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

EXTIxxx - цифра обозначает номер линии порта, т.е. для EXTI1 будут соответствовать PA1, PB1, PC1 и т.д.

Какой порт будет выбран для обслуживания данного прерывания выбирается в регистре SYSCFG_EXTICRx

Итак, чтобы активировать прерывание на ножке PA1, вам надо в NVIC разрешить прерывание EXTI1 и в SYSCFG_EXTICR1 в биты 0..3 записать нули, что будет соответствовать порту А.

Получается комбинация PORT.PIN  = SYSCFGR_EXTICRx.EXTIx

Так же в блоке EXTI вам надо настроить на какой фронт будет реагировать EXTI и поставить маску на запросы прерываний, в вашем случае маску на бит 1.

Ну и написать обработчик прерывания для EXTI1.

 

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

Какая ваше логика при этом была ?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this