Ещё, если интересно, у этого STM'a есть встроенный референс, который можно выбрать программно. В цифрах не помню, извините если навру, но по-моему что-то около 1.2 вольта.
Ещё, если интересно, у этого STM'a есть встроенный референс, который можно выбрать программно. В цифрах не помню, извините если навру, но по-моему что-то около 1.2 вольта.
А он хоть стабилен? Мне нужно просто питание от батареек сделать и что бы уровень заряда измерялся АЦП. По этому напряжение питания МК не стабильное будет от 2 до 3 вольт, но источник опорного напряжения должен быть всегда стобилен.
Использую режим shutdown mode и пробуждение по внешнему прериванию attachInterruptWakeup(uint32_t pin, voidFuncPtrVoid callback, uint32_t mode), для данного микроконтроллера и режима доступен только пин PA0 это я уже выяснил.
По прериванию срабатывает ресет микроконтроллера, все как задумано, но затем повторно через секунд 10 (так задумано в скетче), все вызывается:
И почему то даже при отсутствии внешнего преривания микроконтроллер вновь перезагружается и так по кругу. Складывается такое впечатление будь то бы куда то в RTC память сохраняется событие о первом внешнем преривании и оно не очищается, что вновь вызывает ресет, сразу же после команды LowPower.shutdown(TIME_SHUTDOWN_12H);
Приветствую!
У меня есть скетч под управление BT модулем. Смысл такой,что при определённых условиях, STM один из выходов замыкает на массу (простите,если криво говорю) ). Но новый BT модуль работает наоборот и ему необходимо получать плюсовой сигнал.
krepton85, это аналоговое питание. Референс выведен только в 100-ногом корпусе.
Ещё, если интересно, у этого STM'a есть встроенный референс, который можно выбрать программно. В цифрах не помню, извините если навру, но по-моему что-то около 1.2 вольта.
А он хоть стабилен? Мне нужно просто питание от батареек сделать и что бы уровень заряда измерялся АЦП. По этому напряжение питания МК не стабильное будет от 2 до 3 вольт, но источник опорного напряжения должен быть всегда стобилен.
https://datasheet.octopart.com/STM32F103C8T6-STMicroelectronics-datasheet-48026265.pdf
стр.41, п.5.3.4 Embedded reference voltage
То есть, стабильность - 10mV во всём температурном диапазоне, но только при указанном напряжении питания - 3V.
Как опорное напряжение зависит именно от напряжения питания - не написано. Значит, придётся поискать другой PDF, более детальный, если такой есть.
Или просто поэкспериментировать.
Вопрос по библиотеке LowPower: https://github.com/stm32duino/STM32LowPower.
Использую режим shutdown mode и пробуждение по внешнему прериванию attachInterruptWakeup(uint32_t pin, voidFuncPtrVoid callback, uint32_t mode), для данного микроконтроллера и режима доступен только пин PA0 это я уже выяснил.
По прериванию срабатывает ресет микроконтроллера, все как задумано, но затем повторно через секунд 10 (так задумано в скетче), все вызывается:
И почему то даже при отсутствии внешнего преривания микроконтроллер вновь перезагружается и так по кругу. Складывается такое впечатление будь то бы куда то в RTC память сохраняется событие о первом внешнем преривании и оно не очищается, что вновь вызывает ресет, сразу же после команды LowPower.shutdown(TIME_SHUTDOWN_12H);
Как это побороть?
Приветствую!
У меня есть скетч под управление 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 ?
В программе плюсовой сигнал на ноге. HIGH на LOW поменять надо. OUTPUT не может быть open и прочее.
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?
Да. Во всех строках управления этими линиями нужно инвертировать значения.
Спасибо