AlexBel 6 28 декабря, 2022 Опубликовано 28 декабря, 2022 (изменено) · Жалоба Всем привет. Перевожу контроллер AT32F421F8P7 в режим Standby, при этом потребление составляет порядка 250мкА. Измерения производил мультиметром Keithley DMM6500. Вывод из сна производится сбросом по IWDG, т.е. работает низкочастотный внутренний генератор на 40кГц. Для чистоты эксперимента выводы портов никуда не подключены. Пробовал, чтобы не было "висячек", перед переводом в Standby, включать их на вход с подтяжкой вверх и вниз, включал на выход с выводом нуля и единицы, переводил в аналоговый режим - на потребляемый ток это не повлияло. По даташиту ток в режиме Standby должен быть менее 8мкА. Кому-нибудь приходилось переводить AT32F421F8P7 в режим Standby с током потребления, соответствующим даташиту, т.е. менее 8мкА? Видимо, где-то у меня ошибка, но не могу понять, где. Помогите, пожалуйста, найти. Вот моя функция, котороая переводит контроллер в Standby. В первой части - настройка IWDG, во второй - перевод в Standby. Закомментированные строчки - варианты настройки GPIO, которые я использовал в ходе эксперимента. Spoiler void power_sleep(void) { IWDG->KEY = (uint16_t)0x5555; // Unlock IWDG regs IWDG->PSC = (uint16_t)0x07; // IWDG->RLD = 0x00000FFF; // 30 sec // IWDG->RLD = 0x000007FF; // 15 sec IWDG->RLD = 0x000003FF; // 7,5 sec IWDG->KEY = (uint16_t)0xAAAA; // Lock IWDG regs and Reload IWDG->KEY = (uint16_t)0xCCCC; // IWDG start! //============================================= PWR->CTRL2 = 0x00000000; SCB->SCR |= SCB_SCR_SLEEPDEEP; PWR->CTRL |= PWR_CTRL_PDDS; PWR->CTRL |= PWR_CTRL_LDDS; PWR->CTRL |= PWR_CTRL_CLWUF; nvic_irq_disable(TMR6_GLOBAL_IRQn); RCC->BDC &= ~RCC_BDC_ERTCEN; // GPIOA->MODER = 0xFFFFFFFF; // GPIOB->MODER = 0xFFFFFFFF; // GPIOF->MODER = 0xFFFFFFFF; GPIOA->MODER = 0x55555555; GPIOB->MODER = 0x55555555; GPIOF->MODER = 0x55555555; // GPIOA->MODER = 0x00000000; // GPIOB->MODER = 0x00000000; // GPIOF->MODER = 0x00000000; // GPIOA->PUPDR = 0xAAAAAAAA; // GPIOB->PUPDR = 0xAAAAAAAA; // GPIOF->PUPDR = 0xAAAAAAAA; GPIOA->PUPDR = 0x55555555; GPIOB->PUPDR = 0x55555555; GPIOF->PUPDR = 0x55555555; // GPIOA->OTYPER = 0x0000FFFF; // GPIOB->OTYPER = 0x0000FFFF; // GPIOF->OTYPER = 0x0000FFFF; GPIOA->OTYPER = 0x00000000; GPIOB->OTYPER = 0x00000000; GPIOF->OTYPER = 0x00000000; GPIOA->OPTDT = 0x00000000; GPIOB->OPTDT = 0x00000000; GPIOF->OPTDT = 0x00000000; // GPIOA->OPTDT = 0x0000FFFF; // GPIOB->OPTDT = 0x0000FFFF; // GPIOF->OPTDT = 0x0000FFFF; __WFI(); } Изменено 28 декабря, 2022 пользователем AlexBel Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 28 декабря, 2022 Опубликовано 28 декабря, 2022 · Жалоба Гм. Микроконтроллер у Вас от Artery, а код - от STM32. Или Вы подкорректировали заголовочный файл с регистрами от STM32? Они не похожи друг с другом. Может быть где-то в этом ошибка? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexBel 6 28 декабря, 2022 Опубликовано 28 декабря, 2022 (изменено) · Жалоба 19 minutes ago, haker_fox said: Гм. Микроконтроллер у Вас от Artery, а код - от STM32. Или Вы подкорректировали заголовочный файл с регистрами от STM32? Они не похожи друг с другом. Может быть где-то в этом ошибка? Используется Keil с библиотекой для Artery. Я ничего не корректировал, использовал названия регистров такими, какие они есть в этой библиотеке. Эти названия немного отличаются, но весьма схожи с STM32, как, впрочем, и RM и DS. Изменено 28 декабря, 2022 пользователем AlexBel Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexBel 6 29 декабря, 2022 Опубликовано 29 декабря, 2022 (изменено) · Жалоба Попробовал сейчас контроллер того же типа, но в корпусе на 48 ног - AT32F421C8T7. Порты настроены на вход и подтянуты с GND. После перехода в Standby результат почти тот же, что и ранее - потребляемый ток порядка 290мкА. В библиотеке Artery для Keil нашёл функцию перевода в StandBy: Spoiler void PWR_EnterSTANDBYMode(void) { /* Clear Wake-up flag */ PWR->CTRL |= PWR_CTRL_CLWUF; /* Select STANDBY mode */ PWR->CTRL |= PWR_CTRL_PDDS; /* Set SLEEPDEEP bit of Cortex System Control Register */ SCB->SCR |= SCB_SCR_SLEEPDEEP; /* This option is used to ensure that store operations are completed */ #if defined ( __CC_ARM ) __force_stores(); #endif /* Request Wait For Interrupt */ __WFI(); } Использовал её вместо своей, ничего не изменилось. Что, впрочем, понятно - у меня такая же. Опробовал функцию перевода в Stop из той же библиотеки - ничего не изменилось. Оба контроллера на отладочных платах, минимум компонентов, которые не влияют на GPIO. Уже начинаю думать - может, делаю всё правильно, а проблема в контроллерах... Изменено 29 декабря, 2022 пользователем AlexBel Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 29 декабря, 2022 Опубликовано 29 декабря, 2022 · Жалоба 44 minutes ago, AlexBel said: Уже начинаю думать - может, делаю всё правильно, а проблема в контроллерах... Если в регистрах всё правильно, а это можно проверить под отладкой, то, ИМХО, следует задать вопрос техподдержке. Понимаю, что это Artery, а не STM. Но все же это лучше, чем теряться в догадках. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Михась 4 29 декабря, 2022 Опубликовано 29 декабря, 2022 · Жалоба Скорее всего МК в DBGMCU. Ну и тщательно проверить что отключаются внутренние стабилизаторы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexBel 6 30 декабря, 2022 Опубликовано 30 декабря, 2022 · Жалоба Проверил DBGMCU. Когда включаю, потребляемый ток увеличивается. Написал в Artery, может, ответят. В режиме отладки прошагал каждую строчку до входа в standby... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 8 января, 2023 Опубликовано 8 января, 2023 (изменено) · Жалоба On 12/28/2022 at 7:57 AM, AlexBel said: Всем привет. Перевожу контроллер AT32F421F8P7 в режим Standby, при этом потребление составляет порядка 250мкА. эксперимента. у вас на плате есть отдельный сенсор на замер тока контроллера? или вы меряете потребление всей платы? Изменено 8 января, 2023 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexBel 6 8 января, 2023 Опубликовано 8 января, 2023 · Жалоба 52 minutes ago, jenya7 said: у вас на плате есть отдельный сенсор на замер тока контроллера? или вы меряете потребление всей платы? Измеряю потребление всей платы. Но на плате нет ничего, кроме кварца и светодиода, это маленькая девборда-макетка. Кварц в статичном режиме - конденсатор, он никак не может давать утечку, тем более, что на пинах, к которым он подключен, одинаковый уровень. Светодиод на одной плате подключен анодом к пину, но на этот пин я, предварительно, подаю ноль. На второй плате (их две, один и тот же контроллер, но в разных корпусах) светодиод вообще можно отключать джампером. Остальные элементы - конденсаторы по питанию, на сбросе и резистор на BOOT, подключение которого на питание/минус мало что меняет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 60 8 января, 2023 Опубликовано 8 января, 2023 · Жалоба А питание как устроено на плате ? LDO ? или просто вход 3.3V для измерения ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexBel 6 8 января, 2023 Опубликовано 8 января, 2023 · Жалоба 11 minutes ago, x893 said: А питание как устроено на плате ? LDO ? или просто вход 3.3V для измерения ? Питание - напрямую на контроллер Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 8 января, 2023 Опубликовано 8 января, 2023 · Жалоба Не знаю ничего об AT32, но, например, у STM32WLE в режиме Standby регистры настройки портов не работают, там есть отдельные регистры PWR->PDCRx и PWR->PUCRx, которыми можно включить подтяжки к земле и питанию, а без подтяжек висящие в воздухе ноги вполне могут вызывать повышенное потребление. Кроме этого есть выводы, у которых подтяжки включены по-умолчанию и эти подтяжки могут конфликтовать с внешними сигналами (у меня, например, в рабочем режиме конфликтовала подтяжка NJTRST). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexBel 6 8 января, 2023 Опубликовано 8 января, 2023 · Жалоба 4 minutes ago, Сергей Борщ said: Не знаю ничего об AT32, но, например, у STM32WLE в режиме Standby регистры настройки портов не работают, там есть отдельные регистры PWR->PDCRx и PWR->PUCRx, которыми можно включить подтяжки к земле и питанию, а без подтяжек висящие в воздухе ноги вполне могут вызывать повышенное потребление. Кроме этого есть выводы, у которых подтяжки включены по-умолчанию и эти подтяжки могут конфликтовать с внешними сигналами (у меня, например, конфликтовала подтяжка NJTRST). Спасибо, но я это учёл, все подтяжки настроил и перепроверил. В процессе экспериментов специально делал "висячки" - потребляемый ток увеличивался. NRST не имеет внешней подтяжки, использую внутренний резистор и внешний конденсатор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 8 января, 2023 Опубликовано 8 января, 2023 · Жалоба 3 часа назад, AlexBel сказал: В процессе экспериментов специально делал "висячки" - потребляемый ток увеличивался А нет ли у этого контроллера варианта с бОльшим количеством ног? Кристаллы в них обычно идут одинаковые и часть портов просто не подключаются к выводам корпуса, но их тоже нужно настраивать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 8 января, 2023 Опубликовано 8 января, 2023 · Жалоба On 12/28/2022 at 1:57 PM, AlexBel said: змерения производил мультиметром Keithley DMM6500. Я возможно спрошу банальность, но Вы уверены в показаниях данного прибора? У него есть сертификат о поверке? Погрешность измерения самого амперметра на этом диапазоне позволяет измерять такие токи? Возможно, стоит сымитировать ток 8 мкА с помощью поверенного источника напряжения и более-менее точного резистора номиналом подходящим и убедиться в адекватности показаний амперметра? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться