stm32F0xx 시리즈를 사용 중이며 RTC를 작동 시키려고합니다. 외부 8MHz 크리스털을 연결하고 PLL을 사용하여 48MHz의 sysclk를 생성했습니다. 분명히 RTC와 함께이 시계를 사용하고 싶습니다. 나는 다음을 시도했다 :HSE를 PLL과 함께 사용하여 STM32에서 RTC 클럭을 사용하는 방법
//(1) Write access for RTC registers
//(2) Enable init phase
//(3) Wait until it is allow to modify RTC register values
//(4) set prescaler,
//(5) New time in TR
//(6) Disable init phase
//(7) Disable write access for RTC registers
RTC->WPR = 0xCA; //(1)
RTC->WPR = 0x53; //(1)
RTC->ISR |= RTC_ISR_INIT; //(2)
while ((RTC->ISR & RTC_ISR_INITF) != RTC_ISR_INITF) //(3)
{
//add time out here for a robust application
}
RCC->BDCR = RCC_BDCR_RTCSEL_HSE;
RTC->PRER = 0x007C2E7C; //(4)
RTC->TR = RTC_TR_PM | 0x00000001; //(5)
RTC->ISR &=~ RTC_ISR_INIT; //(6)
RTC->WPR = 0xFE; //(7)
RTC->WPR = 0x64; //(7)
메인 루프에는 두 개의 LED가 켜지고 꺼지는 무한대가있다. RTC 설정이 없으면이 코드는 정상적으로 작동하지만 위의 코드를 추가하자 마자 작동이 멈 춥니 다.
이렇게하면 나머지 코드가 손상됩니다. HSE를 사용할 수 있습니까? 그렇다면 프리스케일러를 올바르게 사용하고 있습니까?
왜 당신은 ST 사용하지 않는 냉동 유지 필요 표준 라이브러리? RTC를 사용하는 API는 이미 구현되어 있습니다. –
두 가지 추상화 수준이 있으므로 ST 라이브러리를 좋아하는 사람이 아닙니다. 첫 번째는 구조체이고 두 번째는 모든 함수입니다. 또한 ST 라이브러리에는 LSE 및 LSI 클럭을 사용할 수있는 옵션 만 있습니다. 내가 필요로하는 HSI 시계가 아닙니다. – TracyB
외부 결정을 사용하고 싶다고하셨습니까? 이것은 HSI가 아닌 HSE이며 ST 라이브러리에서 지원합니다. (RCC_RTCCLKSource_HSE_Div128 검색). –