Spider 0 12 апреля, 2022 Опубликовано 12 апреля, 2022 · Жалоба Всем привет! Пробую включить HAL RTC из STM32Cube и получаю 1kHz на ноге. Была мыcль, что с этим как-то связан Tamper1 AF1, но он выключен, нога проинициализирована в GPIO_Output. Эффект проявляется спонтанно, раз может включиться с этим "багом", а раз всё нормально - нога реагирует на команды GPIO. В еррате ничего не нашёл что бы могло подходить к такому случаю.... Что ещё можно глянуть? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 13 апреля, 2022 Опубликовано 13 апреля, 2022 · Жалоба 12 часов назад, Spider сказал: Была мыcль, что с этим как-то связан Tamper1 AF1, но он выключен, нога проинициализирована в GPIO_Output. RTC имеет приоритет над режимом порта. 12 часов назад, Spider сказал: Что ещё можно глянуть? Документацию Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Spider 0 13 апреля, 2022 Опубликовано 13 апреля, 2022 · Жалоба Беда в том что он выключен... Ну и если на то пошло, почему оно спонтанно само включается ИНОГДА? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Spider 0 14 апреля, 2022 Опубликовано 14 апреля, 2022 · Жалоба Беда в том что он выключен... Ну и если на то пошло, почему оно спонтанно само включается ИНОГДА? Пробую разобраться. Имеем стандартный код инициализации от LSI 32kH Spoiler /** * @brief RTC Initialization Function * @param None * @retval None */ static void MX_RTC_Init(void) { /* USER CODE BEGIN RTC_Init 0 */ /* USER CODE END RTC_Init 0 */ /* USER CODE BEGIN RTC_Init 1 */ /* USER CODE END RTC_Init 1 */ /** Initialize RTC Only */ hrtc.Instance = RTC; hrtc.Init.HourFormat = RTC_HOURFORMAT_24; hrtc.Init.AsynchPrediv = 127; hrtc.Init.SynchPrediv = 249; hrtc.Init.OutPut = RTC_OUTPUT_DISABLE; hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH; hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN; if (HAL_RTC_Init(&hrtc) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN RTC_Init 2 */ /* USER CODE END RTC_Init 2 */ } Вроде как hrtc.Init.OutPut = RTC_OUTPUT_DISABLE и это вроде как хорошо. Идём далее. Внтури оно ещё вызывает HAL_RTC_MspInit(), где тоже "вроде" криминала нет. Spoiler /** * @brief RTC MSP Initialization * This function configures the hardware resources used in this example * @param hrtc: RTC handle pointer * @retval None */ void HAL_RTC_MspInit(RTC_HandleTypeDef* hrtc) { RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; if(hrtc->Instance==RTC) { /* USER CODE BEGIN RTC_MspInit 0 */ /* USER CODE END RTC_MspInit 0 */ /** Initializes the peripherals clock */ PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC; PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSI; if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { Error_Handler(); } /* Peripheral clock enable */ __HAL_RCC_RTC_ENABLE(); /* USER CODE BEGIN RTC_MspInit 1 */ /* USER CODE END RTC_MspInit 1 */ } } Есть HAL_RCCEx_PeriphCLKConfig(), в которой оно много чего делает, но главное COE не трогает, да и вообще CR пишет только, чтобы снять блокировку с RTC. Затем внутри HAL_RTC_Init() есть строка /* Set RTC_CR register */ hrtc->Instance->CR |= (uint32_t)(hrtc->Init.HourFormat | hrtc->Init.OutPut | hrtc->Init.OutPutPolarity); В которой hrtc->Init.OutPut всё же равен нолю и не должен взвести бит COE. На всякий случай ещё посмотрим в отладку: Вроде всё "красиво" и нет COE. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 14 апреля, 2022 Опубликовано 14 апреля, 2022 · Жалоба Ну если COE в нуле, а импульсы есть - где-то ваша программа ногой дергает. Ищите. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Spider 0 14 апреля, 2022 Опубликовано 14 апреля, 2022 · Жалоба То то и оно, что если не вызывать MX_RTC_Init(), то дёргать ногой моя программа перестаёт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 14 апреля, 2022 Опубликовано 14 апреля, 2022 · Жалоба Чудес не бывает. Или COE не ноль, или дергает кто-то другой. Вы отладчиком COE смотрите когда импульсы на выходе поймали, надеюсь? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Spider 0 14 апреля, 2022 Опубликовано 14 апреля, 2022 · Жалоба Конечно. То то и оно... причём я заметил, что если просто запустить без отладчика, то ещё ни разу не проявилось. Появляется, только когда я под отладкой Кстати, поздравляю с 10001 постом :))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться