glags 0 19 ноября, 2013 Опубликовано 19 ноября, 2013 · Жалоба Что было ДО, значение имеет. Замените на И не будет иметь значения. А вот про это Я скажу - "добро пожаловать в клуб" (хотя Вы и так уже в нём, судя по коду) тех, кто не читает документацию до конца. hint: не все биты в регистре MAPR доступны для чтения. У меня делается вообще вот такой функцией в F1X (напоролся в 107-м): /* установка битов в регистре AFIO_MAPR. Поддерживается режим переключения JTAG */ void cpu_stm32f1xx_setmapr( unsigned long bits ) { RCC->APB2ENR |= RCC_APB2ENR_AFIOEN; //включить тактирование альтернативных функций AFIO->MAPR = (AFIO->MAPR & ~ AFIO_MAPR_SWJ_CFG) | AFIO_MAPR_SWJ_CFG_JTAGDISABLE | bits; } Огромное преогромное спасибо, я |= не заметил. Привык выставлять биты в регистрах сохраняя их значение и не обратил внимание. Всё заработало! А по поводу STM32F1, я с ним не знаком и когда искал инфу на свой на каком-то из форумов нашёл этот код и принял его за истину, так как ребята отзывались что у них всё заработало, по этому и привёл здесь. Прошу прощения за ошибку, каюсь. :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 19 ноября, 2013 Опубликовано 19 ноября, 2013 · Жалоба Да чего каяться... сам наткнулся. используя чужой код можно и простые проблемы получить (вроде USART TXD и TXD - оба на ввод, но процессор игнорирует - не помню для какого процессора на такое наткнулся). И посложнее - вроде залипухи с не отключившимся jtag, что проявилось только на F107, нормально работая на 101, 103, 105... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
glags 0 20 ноября, 2013 Опубликовано 20 ноября, 2013 (изменено) · Жалоба Геннадий у меня к Вам как к знатоку ещё один вопросик по STM32F4. У меня не работает запись в бэкап регистры RTC. Делаю я это следующим образом: RTC->WPR = 0xCA; //Разблокировка записи RTC->WPR = 0x53; RTC->BKP0R=date; //Запись в 0 регистр RTC->WPR = 0xFF; //Блокировка записи Читаю соответственно: data=RTC->BKP0R; без разблокировки записи. RTC работает от кварца, то есть от LSЕ. Часы завелись и работают. Что я делаю не так. PS: если надо, то код инициализации приведу. Изменено 20 ноября, 2013 пользователем glags Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 20 ноября, 2013 Опубликовано 20 ноября, 2013 · Жалоба У меня не работает запись в бэкап регистры RTC К сожалению, не смогу ничего подсказать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 20 ноября, 2013 Опубликовано 20 ноября, 2013 · Жалоба У меня не работает запись в бэкап регистры RTC. Делаю я это следующим образом: В RCC->APB1ENR.PWR единичка? В PWR->CR.DPB единичка? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
glags 0 20 ноября, 2013 Опубликовано 20 ноября, 2013 (изменено) · Жалоба В RCC->APB1ENR.PWR единичка? В PWR->CR.DPB единичка? // Инициализация модуля void rtc_Init(void) { // Если часы запущены, делать тут нечего. if(RTC->ISR & RTC_ISR_INITS) return; // Включим тактирование PWR RCC->APB1ENR |= RCC_APB1ENR_PWREN; // Разрешим доступ к управляющим регистрам энергонезависимого домена PWR->CR |= PWR_CR_DBP; // Сбросим состояние энергонезависимого домена RCC->BDCR |= RCC_BDCR_BDRST; RCC->BDCR &= ~RCC_BDCR_BDRST; // Выберем его как источник тактирования RTC: RCC->BDCR &= ~RCC_BDCR_RTCSEL; // сбросим RCC->BDCR |= RCC_BDCR_RTCSEL_0 | RCC_BDCR_LSEON; while (!(RCC->BDCR & RCC_BDCR_LSERDY)){} // Ждём, когда заведётся LSE // Включим тактирование RTC RCC->BDCR |= RCC_BDCR_RTCEN; // Снимем защиту от записи с регистров RTC rtc_Unlock(); { // Войдём в режим инициализации: RTC->ISR |= RTC_ISR_INIT; // Ждём, когда это произойдёт while(!(RTC->ISR & RTC_ISR_INITF)) {} // Часы остановлены. Режим инициализации // Настроим предделитель для получения частоты 1 Гц. { uint32_t Sync = 255; // 15 бит uint32_t Async = 127; // 7 бит // Сначала записываем величину для синхронного предделителя RTC->PRER = Sync; // Теперь добавим для асинхронного предделителя RTC->PRER = Sync | (Async << 16); } // Переведём часы в 24-часовой формат RTC->CR |= RTC_CR_FMT; // Инициализация закончилась RTC->ISR &= ~RTC_ISR_INIT; } rtc_Lock(); // Всё, часы запустились и считают время. } // Выключить защиту от записи void rtc_Unlock(void) { // Запишем эти значения по очереди RTC->WPR = 0xCA; RTC->WPR = 0x53;} // Включить защиту от записи void rtc_Lock(void) { // Запишем какую-нибудь фигню, главное, чтоб не правильную RTC->WPR = 0xFF;} Да всё установлено. Изменено 21 ноября, 2013 пользователем IgorKossak [codebox] для длинного кода, [code] - для короткого!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 21 ноября, 2013 Опубликовано 21 ноября, 2013 · Жалоба // Сбросим состояние энергонезависимого домена RCC->BDCR |= RCC_BDCR_BDRST; RCC->BDCR &= ~RCC_BDCR_BDRST; Вроде, все Ок. Попробуйте временно закомментировать эти строчки. Вопросик: а проц у Вас какой? А то эта тема про новый STM32F42x. Если это он - тоды ой - я с ним пока не работал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
glags 0 21 ноября, 2013 Опубликовано 21 ноября, 2013 · Жалоба Вроде, все Ок. Попробуйте временно закомментировать эти строчки. Вопросик: а проц у Вас какой? А то эта тема про новый STM32F42x. Если это он - тоды ой - я с ним пока не работал. У меня STM32F407. Эти строчки нет смысла убирать, они делают как бы ресет бэкап домену. А вся процедура инициализации, запускается только один раз. После того как часы затикали, то она игнорится. Это в первой строке инициализации. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 21 ноября, 2013 Опубликовано 21 ноября, 2013 · Жалоба У меня STM32F407. Эти строчки нет смысла убирать, они делают как бы ресет бэкап домену. А вся процедура инициализации, запускается только один раз. После того как часы затикали, то она игнорится. Это в первой строке инициализации. Т.е. если часы настроены, то указанные мной битики не взводятся? Эти битики сбрасываются при ресете! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
glags 0 21 ноября, 2013 Опубликовано 21 ноября, 2013 · Жалоба Т.е. если часы настроены, то указанные мной битики не взводятся? Эти битики сбрасываются при ресете! Вопрос решён, надо было в самом начале инициализации разрешить доступ к регистрам PWR->CR |= PWR_CR_DBP; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться