Перейти к содержанию
    

Что было ДО, значение имеет.

Замените

 

на

 

И не будет иметь значения.

 

 

А вот про это

 

Я скажу - "добро пожаловать в клуб" (хотя Вы и так уже в нём, судя по коду) тех, кто не читает документацию до конца.

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:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да чего каяться... сам наткнулся. используя чужой код можно и простые проблемы получить (вроде USART TXD и TXD - оба на ввод, но процессор игнорирует - не помню для какого процессора на такое наткнулся). И посложнее - вроде залипухи с не отключившимся jtag, что проявилось только на F107, нормально работая на 101, 103, 105...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Геннадий у меня к Вам как к знатоку ещё один вопросик по STM32F4.

У меня не работает запись в бэкап регистры RTC. Делаю я это следующим образом:

 

RTC->WPR = 0xCA; //Разблокировка записи

RTC->WPR = 0x53;

RTC->BKP0R=date; //Запись в 0 регистр

RTC->WPR = 0xFF; //Блокировка записи

 

Читаю соответственно: data=RTC->BKP0R;

без разблокировки записи.

 

RTC работает от кварца, то есть от LSЕ. Часы завелись и работают. Что я делаю не так.

PS: если надо, то код инициализации приведу.

Изменено пользователем glags

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня не работает запись в бэкап регистры RTC

К сожалению, не смогу ничего подсказать...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня не работает запись в бэкап регистры RTC. Делаю я это следующим образом:

В RCC->APB1ENR.PWR единичка?

В PWR->CR.DPB единичка?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 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;}

 

Да всё установлено. :biggrin:

Изменено пользователем IgorKossak
[codebox] для длинного кода, [code] - для короткого!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

    // Сбросим состояние энергонезависимого домена
    RCC->BDCR |=  RCC_BDCR_BDRST;
    RCC->BDCR &= ~RCC_BDCR_BDRST;

Вроде, все Ок.

Попробуйте временно закомментировать эти строчки.

Вопросик: а проц у Вас какой? А то эта тема про новый STM32F42x. Если это он - тоды ой - я с ним пока не работал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вроде, все Ок.

Попробуйте временно закомментировать эти строчки.

Вопросик: а проц у Вас какой? А то эта тема про новый STM32F42x. Если это он - тоды ой - я с ним пока не работал.

У меня STM32F407. Эти строчки нет смысла убирать, они делают как бы ресет бэкап домену. А вся процедура инициализации, запускается только один раз. После того как часы затикали, то она игнорится. Это в первой строке инициализации.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня STM32F407. Эти строчки нет смысла убирать, они делают как бы ресет бэкап домену. А вся процедура инициализации, запускается только один раз. После того как часы затикали, то она игнорится. Это в первой строке инициализации.

Т.е. если часы настроены, то указанные мной битики не взводятся?

Эти битики сбрасываются при ресете!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Т.е. если часы настроены, то указанные мной битики не взводятся?

Эти битики сбрасываются при ресете!

 

Вопрос решён, надо было в самом начале инициализации разрешить доступ к регистрам

PWR->CR |= PWR_CR_DBP;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...