내가하고있는 일
STM32 마이크로 컨트롤러를 사용하고 있으며 프로젝트의 특정 시간 (예 : 오전 11시와 오후 2시)에 데이터를 보낼 수 있어야합니다. 마이크로 컨트롤러는 이것을 달성하기 전에 몇 시인 지 알아야합니다. 불행히도, 나는 단방향 통신 만하기 때문에 네트워크에서 현재 시간을 요청할 수 없습니다.
따라서 프로그래밍을 마친 직후에 현재 시간을 설정하고 싶습니다. 다음 명령을 사용하여 ST-LINK Utility Command Line Interface (ST-LINK_CLI)를 사용하여 플래시에 데이터를 쓸 수 있다는 것을 알고있었습니다.
ST-LINK_CLI.exe -w32 <Address> <data> -Rst
현재 코드에서 사용하지 않는 주소에 유닉스 타임 스탬프를 쓰는 간단한 테스트 스크립트를 작성했습니다.
타임 스탬프를 읽고 RTC 시간을 설정하는 데 사용하는 함수를 작성하려고했습니다. ST-LINK 유틸리티 사용자 매뉴얼 에서 다음을 읽을 때까지 :
-w32는 플래시 메모리, OTP, SRAM 및 R / W 레지스터 쓰기를 지원합니다.
매뉴얼에 R / W 레지스터 쓰기를 지원한다고 말하면 RTC 레지스터에 직접 액세스하여 설정할 수 있습니까? 시도했지만이 레지스터에 쓰지 못하는 것 같습니다.
더 이상 마이크로 컨트롤러에서 처리하기 위해 특정 함수를 작성할 필요가 없으므로이 방법을 사용하는 것이 좋습니다. 즉, 코드를 업데이트 할 필요없이 현재 사용중인 모든 마이크로 컨트롤러의 RTC 시간을 설정할 수 있습니다.
내가 의도 한 것
RTC 레지스터를 설정하기 위해 STM Reference Manual에 설명 된대로 다음 단계를 수행했습니다 .
- PWR_CR 레지스터에서 DPB 비트 설정
- RTC_WPR 레지스터에 0xCA 쓰기
- RTC_WPR 레지스터에 0x53 쓰기
- RTC_ISR 레지스터에서 INIT 비트를 설정하여 RTC 중지
- RTC_PRER 레지스터에 기록하여 1Hz 클록을 선택하십시오
- RTC_TR 레지스터에 기록하여 현재 시간을로드
- RTC_DR 레지스터에 기록하여 현재 날짜를로드
- RTC_ISR 레지스터에서 INIT 비트를 재설정하여 RTC를 시작하십시오.
레지스터에 액세스하기 위해 다음 주소를 사용했습니다.
- PWR_CR : 0x4000 7000
- RTC_WPR : 0x4000 2824
- RTC_ISR : 0x4000 280C
- RTC_PRER : 0x4000 2810
- RTC_TR : 0x4000 2800
- RTC_DR : 0x4000 2804
무엇이 잘못 되었습니까
이 레지스터 중 하나에 쓸 수 없습니다. ST-LINK 유틸리티를 사용하면 다음 메시지가 나타납니다.
메모리 쓰기 중 오류가 발생했습니다!
ST-LINK_CLI 사용 :
0x40007000에서 0x00000100을 쓰는 중 ... 오류!
이 레지스터를 읽는 것은 문제가되지 않지만 ST-LINK 유틸리티 또는 명령 행 인터페이스를 사용하여 쓸 수는 없습니다.
질문
ST-LINK 유틸리티를 사용하여 R / W 레지스터에 쓰려면 어떻게해야합니까?
내가 간과 한 RTC 레지스터에 쓸 수있는 쓰기 방지 기능이 있습니까?