1 Востаннє редагувалося FakiNyan (10.12.2019 22:38:03)

Тема: Купа питань початкового рівня про STM32 та програмування під то

Вітаю. Маю STM32F103C8T6 та програматор St-link v2.
На даний момент моя мета - це зробити так, аби я міг отримувати якийсь сигнал ззовні, якось його обробляти, та якось видавати результат обробки.
Якщо я правильно зрозумів, то кожен пін може приймати якийсь сигнал. Я спробував отримати сигнал на пін A0, і коли він є, то підсвічувати зелений діод, а коли немає - гасити той діод.
Ось конфігурація A0
https://cdn.discordapp.com/attachments/333936584481177600/654044099426517015/unknown.png
І ось мій код

  while (1)
  {
      if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0)) {
          HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
      } else {
          HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);

      }
}

воно ніби і працює. Коли я пихаю свого тоненького металевого щупа прямо в дірочку A0 - зелений діод підсвічується, і коли витягую щупа - діод згасає, але це відбувається не завжди так, як очікується. Іноді діод згасає не відразу після того, як щуп витягнутий, а через ~2 секунди.
В мене є лише два питання на даний момент:
1. Чому достатньо просто запхнути щось металеве в дірку A0? Хіба це металеве не повинно подавати якусь напругу?
2. Чому діод іноді згасає лише через ~2 секунди, а не відразу після того, як я витягую з піна металевий стержень?

2 Востаннє редагувалося reverse2500 (10.12.2019 22:45:32)

Re: Купа питань початкового рівня про STM32 та програмування під то

А0 це аналоговий сигнал
Це відома проблема, як кнопка тактова, яка не вимикає світлодіод, то краще покаже осцилоограф імпульси, тому в схему ставлять резистори чи пишуть код з delay()

Подякували: FakiNyan, 221VOLT2

3

Re: Купа питань початкового рівня про STM32 та програмування під то

reverse2500 написав:

А0 це аналоговий сигнал
Це відома проблема, як кнопка тактова, яка не вимикає світлодіод, то краще покаже осцилоограф імпульси, тому в схему ставлять резистори чи пишуть код з delay()

тобто значення піна A0 не може бути лише 0, або 1, а варіюється від 0 до 1, і при цьому швидкість зміни цього значення якась незрозуміла?
А чи є піни, які можуть приймати або 0, або 1 ? Я ось вже спробував декілька інакших А, і деякі B піни, але щось не надибав потрібного.

4 Востаннє редагувалося reverse2500 (10.12.2019 23:41:12)

Re: Купа питань початкового рівня про STM32 та програмування під то

Треба глянути що та ножкп відповідає
Все написано в даташиті
А0 це означає аналоговий порт номер 0
Деякі ножки чи контакти контролера можуть мати декілька функцій, як ними користуватись і перекоючати, все в даташиті

Подякували: FakiNyan, 221VOLT2

5

Re: Купа питань початкового рівня про STM32 та програмування під то

медоти завантаження коду, гляните на коньролер

Подякували: FakiNyan, 221VOLT2

6

Re: Купа питань початкового рівня про STM32 та програмування під то

щось не надибав, де воно пише, що певні піни працюють в цифровому режимі, натомість надибав якийсь аналогово-цифровий конвертер, але шо воно таке, і як його використовувати - хз
https://www.st.com/resource/en/datashee … f103c8.pdf

ADC (analog-to-digital converter)
Two 12-bit analog-to-digital converters are embedded into STM32F103xx performance line
devices and each ADC shares up to 16 external channels, performing conversions in singleshot or scan modes. In scan mode, automatic conversion is performed on a selected group
of analog inputs.
Additional logic functions embedded in the ADC interface allow:
• Simultaneous sample and hold
• Interleaved sample and hold
• Single shunt
The ADC can be served by the DMA controller.
An analog watchdog feature allows very precise monitoring of the converted voltage of one,
some or all selected channels. An interrupt is generated when the converted voltage is
outside the programmed thresholds.
The events generated by the general-purpose timers (TIMx) and the advanced-control timer
(TIM1) can be internally connected to the ADC start trigger, injection trigger, and DMA
trigger respectively, to allow the application to synchronize A/D conversion and timers.

7

Re: Купа питань початкового рівня про STM32 та програмування під то

переклади з англійського і зрозумієш для чого це
сигнали є аналогові, це навіть світло, вітер і так дальше, є цифрові, 0 і 1. От наприклад задача, NTC резистор і перевести його в цифрову велечину, щоб показувало температуру що в кімнаті. З нагрівом опір росте, напруга менша і на кожний градус, АЦП (ADC) фіксує скачки напруги, щоб вказати яка температура, це треба зрозуміти і погратись. Вся практично прилади по визначенню даних діляться на дільник вольтів і амперів, в простому прикладі, це послідовне і парарельне зєднання резисторів

8

Re: Купа питань початкового рівня про STM32 та програмування під то

Зроби підтяжку pa0 до gnd, чи 3.3v через резистор на 10к  чи програмно зроби підтяжку pa0.

if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0) == GPIO_PIN_SET)

Додай програмного трігера щоб кожного разу не вмикати, як увімкнено, і не вимикати, як вимкнено.

Подякували: FakiNyan1