Доброго время суток! Начал знакомство с stm32 с примеров с сайта:
https://count-zero.ru/2018/stm32_start/
Синий диод замигал. На самом простейшем уровне плата заработала. Но попытки чуть-чуть усложнить программу или взять любые готовые примеры оказываются неудачными. Насколько понимаю не удается настроить тактирования платы на 72МГц.
Вот к примеру попытка инициализации в одном из примеров (функция ClockInit вызывается самой первой):
void
ClockInit( void) {
ErrorStatus HSEStartUpStatus;
RCC_DeInit();
RCC_HSEConfig( RCC_HSE_ON);
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if ( HSEStartUpStatus == SUCCESS ) {
...;
}
}
Судя по всему возвращается не SUCCESS (проверял через вставки досрочных return'ов). Похоже, что в функции:
/**
* @brief Waits for HSE start-up.
* @param None
* @retval An ErrorStatus enumuration value:
* - SUCCESS: HSE oscillator is stable and ready to use
* - ERROR: HSE oscillator not yet ready
*/
ErrorStatus RCC_WaitForHSEStartUp( void) {
__IO uint32_t StartUpCounter = 0;
ErrorStatus status = ERROR;
FlagStatus HSEStatus = RESET;
/* Wait till HSE is ready and if Time out is reached exit */
do {
HSEStatus = RCC_GetFlagStatus(RCC_FLAG_HSERDY);
StartUpCounter++;
} while((StartUpCounter != HSE_STARTUP_TIMEOUT) && (HSEStatus == RESET));
//return (SUCCESS);
if ( RCC_GetFlagStatus(RCC_FLAG_HSERDY) != RESET ) {
status = SUCCESS;
} else {
status = ERROR;
}
return (status);
}
в цикле ожидания не наступает условие (HSEStatus == Reset). Пробовал увеличить время ожидания в 5/50/500 раз (500*HSE_STARTUP_TIMEOUT). Но не помогает.
Это плата не работает, или это не правильная инициализация тактирования?