STM32 F103C8T6

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

krepton85, это аналоговое питание. Референс выведен только в 100-ногом корпусе.

Datak
Offline
Зарегистрирован: 09.10.2014

Ещё, если интересно, у этого STM'a есть встроенный референс, который можно выбрать программно. В цифрах не помню, извините если навру, но по-моему что-то около 1.2 вольта.

krepton85
Offline
Зарегистрирован: 02.02.2016

Datak пишет:
Ещё, если интересно, у этого STM'a есть встроенный референс, который можно выбрать программно. В цифрах не помню, извините если навру, но по-моему что-то около 1.2 вольта.

А он хоть стабилен? Мне нужно просто питание от батареек сделать и что бы уровень заряда измерялся АЦП. По этому напряжение питания МК не стабильное будет от 2 до 3 вольт, но источник опорного напряжения должен быть всегда стобилен.

Datak
Offline
Зарегистрирован: 09.10.2014

https://datasheet.octopart.com/STM32F103C8T6-STMicroelectronics-datasheet-48026265.pdf
стр.41, п.5.3.4 Embedded reference voltage

То есть, стабильность - 10mV во всём температурном диапазоне, но только при указанном напряжении питания - 3V.

Как опорное напряжение зависит именно от напряжения питания - не написано. Значит, придётся поискать другой PDF, более детальный, если такой есть.

Или просто поэкспериментировать.

krepton85
Offline
Зарегистрирован: 02.02.2016

Вопрос по библиотеке  LowPower: https://github.com/stm32duino/STM32LowPower.

Использую режим shutdown mode  и пробуждение по внешнему прериванию attachInterruptWakeup(uint32_t pin, voidFuncPtrVoid callback, uint32_t mode), для данного микроконтроллера и режима доступен только пин PA0 это я уже выяснил.

По прериванию срабатывает ресет микроконтроллера, все как задумано, но затем повторно через секунд 10 (так задумано в скетче), все вызывается:

   


LowPower.attachInterruptWakeup(gdo0, rx_cc1101, FALLING);
LowPower.shutdown(TIME_SHUTDOWN_12H);

И почему то даже при отсутствии внешнего преривания микроконтроллер вновь перезагружается и так по кругу. Складывается такое впечатление будь то бы куда то в RTC память сохраняется событие о первом внешнем преривании и оно не очищается, что вновь вызывает ресет, сразу же после команды  LowPower.shutdown(TIME_SHUTDOWN_12H);

 Как это побороть?  

 

NaPoleYa
Offline
Зарегистрирован: 02.08.2020

Приветствую! 
У меня есть скетч под управление BT модулем. Смысл такой,что при определённых условиях, STM один из выходов замыкает на массу (простите,если криво говорю) ). Но новый BT модуль работает наоборот и ему необходимо получать плюсовой сигнал. 

Вот отрезок кода 

void setup() {
  Serial2.begin(115200); // USART2 on A2-A3 pins
  CANSetup() ;
  pinMode(PB12, OUTPUT_OPEN_DRAIN); // Pin PP   Jumper
  pinMode(PB13, OUTPUT_OPEN_DRAIN); // Pin Prev 3.0k
  pinMode(PB14, OUTPUT_OPEN_DRAIN); // Pin Next 6.2k
  digitalWrite(PB12, HIGH);
  digitalWrite(PB13, HIGH);
  digitalWrite(PB14, HIGH);

 

Я правильно понимаю,что мне pinMode с open_drain необходимо перевести в open_drain_Pull_Up ? 

nik182
Offline
Зарегистрирован: 04.05.2015

В программе плюсовой сигнал на ноге. HIGH на LOW поменять надо. OUTPUT не может быть open и прочее.

NaPoleYa
Offline
Зарегистрирован: 02.08.2020
void CAN_message_process(CanMsg *can_msg) {
  if (((can_msg->ID) == MS_WHEEL_BUTTONS_ID) && AUX_mode)
  {
    switch (can_msg->Data[1]) {
      case MS_BTN_STATION: {
          if (can_msg->Data[0] == BTN_PRESSED)  {
            digitalWrite(PB12, LOW); btn = millis();
#ifdef DEBUG
            Serial2.print("\nBTN_STATION Pressed");
#endif
          }

          break;
        }

Я правильно понимаю,что в строке  digitalWrite(PB12, LOW); btn = millis(); необходимо вместо LOW выставить HIGH?

nik182
Offline
Зарегистрирован: 04.05.2015

Да. Во всех строках управления этими линиями нужно инвертировать значения.

NaPoleYa
Offline
Зарегистрирован: 02.08.2020

Спасибо