Internal RTC Nucleo F767ZI
RTC.cpp@1:12b099f1e8da, 2019-09-16 (annotated)
- Committer:
- shivanandgowdakr
- Date:
- Mon Sep 16 13:42:47 2019 +0000
- Revision:
- 1:12b099f1e8da
- Parent:
- 0:d8084da95aff
Internal RTC STM32 Simplified
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
shivanandgowdakr | 0:d8084da95aff | 1 | #include "mbed.h" |
shivanandgowdakr | 0:d8084da95aff | 2 | #include "RTC.h" |
shivanandgowdakr | 0:d8084da95aff | 3 | #include <string> |
shivanandgowdakr | 0:d8084da95aff | 4 | |
shivanandgowdakr | 0:d8084da95aff | 5 | |
shivanandgowdakr | 0:d8084da95aff | 6 | |
shivanandgowdakr | 0:d8084da95aff | 7 | int Date_Time_Setting(struct tm curt,char *str) |
shivanandgowdakr | 0:d8084da95aff | 8 | { |
shivanandgowdakr | 0:d8084da95aff | 9 | int len=0; |
shivanandgowdakr | 0:d8084da95aff | 10 | len= strlen(str); |
shivanandgowdakr | 0:d8084da95aff | 11 | printf("len = %d",len); |
shivanandgowdakr | 0:d8084da95aff | 12 | if(len < 14) |
shivanandgowdakr | 0:d8084da95aff | 13 | return 0; |
shivanandgowdakr | 0:d8084da95aff | 14 | |
shivanandgowdakr | 0:d8084da95aff | 15 | curt.tm_mday = ( str[0]-0x30)*10+(str[1]-0x30); |
shivanandgowdakr | 0:d8084da95aff | 16 | curt.tm_mon = ( str[2]-0x30)*10+(str[3]-0x30) -1; |
shivanandgowdakr | 0:d8084da95aff | 17 | curt.tm_year = (( str[4]-0x30)*1000 + (str[5]-0x30)*100 + (str[6]-0x30)*10 + (str[7]-0x30)) -1900 ; |
shivanandgowdakr | 0:d8084da95aff | 18 | |
shivanandgowdakr | 0:d8084da95aff | 19 | curt.tm_hour=(str[8]-0x30)*10+(str[9]-0x30); |
shivanandgowdakr | 0:d8084da95aff | 20 | curt.tm_min=(str[10]-0x30)*10+(str[11]-0x30); |
shivanandgowdakr | 0:d8084da95aff | 21 | curt.tm_sec=(str[12]-0x30)*10+(str[13]-0x30); |
shivanandgowdakr | 0:d8084da95aff | 22 | |
shivanandgowdakr | 0:d8084da95aff | 23 | time_t epoch = mktime(&curt); |
shivanandgowdakr | 0:d8084da95aff | 24 | if (epoch == (time_t) -1) { |
shivanandgowdakr | 0:d8084da95aff | 25 | error("Error in clock setting\n"); |
shivanandgowdakr | 0:d8084da95aff | 26 | // Stop here |
shivanandgowdakr | 0:d8084da95aff | 27 | } |
shivanandgowdakr | 0:d8084da95aff | 28 | set_time(epoch); |
shivanandgowdakr | 0:d8084da95aff | 29 | return 1; |
shivanandgowdakr | 0:d8084da95aff | 30 | } |
shivanandgowdakr | 0:d8084da95aff | 31 | |
shivanandgowdakr | 0:d8084da95aff | 32 | |
shivanandgowdakr | 0:d8084da95aff | 33 | int iSetTerminalTime(char *tstring) |
shivanandgowdakr | 0:d8084da95aff | 34 | { |
shivanandgowdakr | 0:d8084da95aff | 35 | int ret=0; |
shivanandgowdakr | 0:d8084da95aff | 36 | struct tm curt; |
shivanandgowdakr | 1:12b099f1e8da | 37 | int index = 0; |
shivanandgowdakr | 1:12b099f1e8da | 38 | |
shivanandgowdakr | 1:12b099f1e8da | 39 | uint8_t date, month, hours, minutes, seconds; |
shivanandgowdakr | 1:12b099f1e8da | 40 | uint16_t year; |
shivanandgowdakr | 0:d8084da95aff | 41 | |
shivanandgowdakr | 1:12b099f1e8da | 42 | char* token = strtok(tstring, "/ :"); |
shivanandgowdakr | 1:12b099f1e8da | 43 | while (token != NULL) |
shivanandgowdakr | 1:12b099f1e8da | 44 | { |
shivanandgowdakr | 1:12b099f1e8da | 45 | index++; |
shivanandgowdakr | 1:12b099f1e8da | 46 | if(index == 1) |
shivanandgowdakr | 1:12b099f1e8da | 47 | { |
shivanandgowdakr | 1:12b099f1e8da | 48 | date = atoi(token); |
shivanandgowdakr | 1:12b099f1e8da | 49 | } |
shivanandgowdakr | 1:12b099f1e8da | 50 | else if(index == 2) |
shivanandgowdakr | 1:12b099f1e8da | 51 | { |
shivanandgowdakr | 1:12b099f1e8da | 52 | month = atoi(token); |
shivanandgowdakr | 1:12b099f1e8da | 53 | } |
shivanandgowdakr | 1:12b099f1e8da | 54 | else if(index == 3) |
shivanandgowdakr | 1:12b099f1e8da | 55 | { |
shivanandgowdakr | 1:12b099f1e8da | 56 | year = atoi(token); |
shivanandgowdakr | 1:12b099f1e8da | 57 | } |
shivanandgowdakr | 1:12b099f1e8da | 58 | else if(index == 4) |
shivanandgowdakr | 1:12b099f1e8da | 59 | { |
shivanandgowdakr | 1:12b099f1e8da | 60 | hours = atoi(token); |
shivanandgowdakr | 1:12b099f1e8da | 61 | } |
shivanandgowdakr | 1:12b099f1e8da | 62 | else if(index == 5) |
shivanandgowdakr | 1:12b099f1e8da | 63 | { |
shivanandgowdakr | 1:12b099f1e8da | 64 | minutes = atoi(token); |
shivanandgowdakr | 1:12b099f1e8da | 65 | } |
shivanandgowdakr | 1:12b099f1e8da | 66 | else if(index == 6) |
shivanandgowdakr | 1:12b099f1e8da | 67 | { |
shivanandgowdakr | 1:12b099f1e8da | 68 | seconds = atoi(token); |
shivanandgowdakr | 1:12b099f1e8da | 69 | } |
shivanandgowdakr | 1:12b099f1e8da | 70 | |
shivanandgowdakr | 1:12b099f1e8da | 71 | printf(" %d %s\n", index, token); |
shivanandgowdakr | 1:12b099f1e8da | 72 | token = strtok(NULL, "/ :"); |
shivanandgowdakr | 1:12b099f1e8da | 73 | } |
shivanandgowdakr | 0:d8084da95aff | 74 | |
shivanandgowdakr | 1:12b099f1e8da | 75 | curt.tm_mday = date; |
shivanandgowdakr | 1:12b099f1e8da | 76 | curt.tm_mon = month - 1; |
shivanandgowdakr | 1:12b099f1e8da | 77 | curt.tm_year = year -1900 ; |
shivanandgowdakr | 1:12b099f1e8da | 78 | |
shivanandgowdakr | 1:12b099f1e8da | 79 | curt.tm_hour = hours; |
shivanandgowdakr | 1:12b099f1e8da | 80 | curt.tm_min = minutes; |
shivanandgowdakr | 1:12b099f1e8da | 81 | curt.tm_sec = seconds; |
shivanandgowdakr | 1:12b099f1e8da | 82 | |
shivanandgowdakr | 1:12b099f1e8da | 83 | time_t epoch = mktime(&curt); |
shivanandgowdakr | 1:12b099f1e8da | 84 | |
shivanandgowdakr | 1:12b099f1e8da | 85 | if (epoch == (time_t) -1) |
shivanandgowdakr | 1:12b099f1e8da | 86 | { |
shivanandgowdakr | 1:12b099f1e8da | 87 | error("Error in clock setting\n"); |
shivanandgowdakr | 1:12b099f1e8da | 88 | // Stop here |
shivanandgowdakr | 0:d8084da95aff | 89 | } |
shivanandgowdakr | 1:12b099f1e8da | 90 | else |
shivanandgowdakr | 1:12b099f1e8da | 91 | { |
shivanandgowdakr | 1:12b099f1e8da | 92 | set_time(epoch); |
shivanandgowdakr | 1:12b099f1e8da | 93 | printf("time is Set: \r\n"); |
shivanandgowdakr | 1:12b099f1e8da | 94 | } |
shivanandgowdakr | 0:d8084da95aff | 95 | return ret; |
shivanandgowdakr | 0:d8084da95aff | 96 | } |
shivanandgowdakr | 0:d8084da95aff | 97 | |
shivanandgowdakr | 0:d8084da95aff | 98 | |
shivanandgowdakr | 0:d8084da95aff | 99 | int chk_time (char *str) |
shivanandgowdakr | 0:d8084da95aff | 100 | { |
shivanandgowdakr | 0:d8084da95aff | 101 | int HH,MM,SS; |
shivanandgowdakr | 0:d8084da95aff | 102 | HH=(str[0]-0x30)*10+(str[1]-0x30); |
shivanandgowdakr | 0:d8084da95aff | 103 | MM=(str[2]-0x30)*10+(str[3]-0x30); |
shivanandgowdakr | 0:d8084da95aff | 104 | SS=(str[4]-0x30)*10+(str[5]-0x30); |
shivanandgowdakr | 0:d8084da95aff | 105 | |
shivanandgowdakr | 0:d8084da95aff | 106 | if ( HH < 0 || HH > 23 || MM < 0 || MM > 59 || SS < 0 || SS > 59 ) |
shivanandgowdakr | 0:d8084da95aff | 107 | return -1; |
shivanandgowdakr | 0:d8084da95aff | 108 | |
shivanandgowdakr | 0:d8084da95aff | 109 | return 1; |
shivanandgowdakr | 0:d8084da95aff | 110 | } |
shivanandgowdakr | 0:d8084da95aff | 111 | |
shivanandgowdakr | 0:d8084da95aff | 112 | int chk_date (char *str) |
shivanandgowdakr | 0:d8084da95aff | 113 | { |
shivanandgowdakr | 0:d8084da95aff | 114 | int epos_date=0,epos_month=0,epos_year=0; |
shivanandgowdakr | 0:d8084da95aff | 115 | |
shivanandgowdakr | 0:d8084da95aff | 116 | epos_date = ( str[0]-0x30)*10+(str[1]-0x30); |
shivanandgowdakr | 0:d8084da95aff | 117 | epos_month = ( str[2]-0x30)*10+(str[3]-0x30); |
shivanandgowdakr | 0:d8084da95aff | 118 | epos_year = ( str[4]-0x30)*1000+ (str[5]-0x30)*100 + (str[6]-0x30)*10 + (str[7]-0x30); |
shivanandgowdakr | 0:d8084da95aff | 119 | |
shivanandgowdakr | 0:d8084da95aff | 120 | |
shivanandgowdakr | 0:d8084da95aff | 121 | if ( epos_month < 1 || epos_date < 1 || epos_date > 31 || epos_month > 12 || epos_year < 2008 ) return ERROR ; |
shivanandgowdakr | 0:d8084da95aff | 122 | |
shivanandgowdakr | 0:d8084da95aff | 123 | else if(epos_month == 1 || epos_month == 3 || epos_month == 5 || epos_month == 7 || epos_month == 8 || epos_month ==10 ||epos_month == 12) { |
shivanandgowdakr | 0:d8084da95aff | 124 | |
shivanandgowdakr | 0:d8084da95aff | 125 | if (epos_date > 31) |
shivanandgowdakr | 0:d8084da95aff | 126 | return -1; |
shivanandgowdakr | 0:d8084da95aff | 127 | } |
shivanandgowdakr | 0:d8084da95aff | 128 | |
shivanandgowdakr | 0:d8084da95aff | 129 | else if (epos_month == 4 || epos_month == 6 || epos_month == 9 || epos_month == 11) { |
shivanandgowdakr | 0:d8084da95aff | 130 | |
shivanandgowdakr | 0:d8084da95aff | 131 | if (epos_date > 30) |
shivanandgowdakr | 0:d8084da95aff | 132 | return -1; |
shivanandgowdakr | 0:d8084da95aff | 133 | } |
shivanandgowdakr | 0:d8084da95aff | 134 | |
shivanandgowdakr | 0:d8084da95aff | 135 | else if (epos_month == 2 ) |
shivanandgowdakr | 0:d8084da95aff | 136 | |
shivanandgowdakr | 0:d8084da95aff | 137 | { |
shivanandgowdakr | 0:d8084da95aff | 138 | if ( !(epos_year%400) || (epos_year%100 != 0 && epos_year%4==0 ) ) { |
shivanandgowdakr | 0:d8084da95aff | 139 | if (epos_date > 29 ) return -1; |
shivanandgowdakr | 0:d8084da95aff | 140 | } |
shivanandgowdakr | 0:d8084da95aff | 141 | |
shivanandgowdakr | 0:d8084da95aff | 142 | else if( epos_date > 28 ) return -1; |
shivanandgowdakr | 0:d8084da95aff | 143 | } |
shivanandgowdakr | 0:d8084da95aff | 144 | |
shivanandgowdakr | 0:d8084da95aff | 145 | |
shivanandgowdakr | 0:d8084da95aff | 146 | return 1; |
shivanandgowdakr | 0:d8084da95aff | 147 | } |
shivanandgowdakr | 0:d8084da95aff | 148 | |
shivanandgowdakr | 0:d8084da95aff | 149 | void Get_Date_Time(char *date_string,char *time_string, char *DTSTRING) |
shivanandgowdakr | 0:d8084da95aff | 150 | { |
shivanandgowdakr | 0:d8084da95aff | 151 | |
shivanandgowdakr | 0:d8084da95aff | 152 | time_t curr_time; |
shivanandgowdakr | 0:d8084da95aff | 153 | tm * curr_tm; |
shivanandgowdakr | 0:d8084da95aff | 154 | time(&curr_time); |
shivanandgowdakr | 0:d8084da95aff | 155 | curr_tm = localtime(&curr_time); |
shivanandgowdakr | 1:12b099f1e8da | 156 | strftime(date_string,10,"%Y/%m/%d ",curr_tm); |
shivanandgowdakr | 0:d8084da95aff | 157 | } |
shivanandgowdakr | 0:d8084da95aff | 158 | |
shivanandgowdakr | 0:d8084da95aff | 159 | |
shivanandgowdakr | 0:d8084da95aff | 160 | void Get_Date_Time( char *DTSTRING) |
shivanandgowdakr | 0:d8084da95aff | 161 | { |
shivanandgowdakr | 0:d8084da95aff | 162 | |
shivanandgowdakr | 0:d8084da95aff | 163 | time_t curr_time; |
shivanandgowdakr | 0:d8084da95aff | 164 | tm * curr_tm; |
shivanandgowdakr | 0:d8084da95aff | 165 | time(&curr_time); |
shivanandgowdakr | 0:d8084da95aff | 166 | curr_tm = localtime(&curr_time); |
shivanandgowdakr | 1:12b099f1e8da | 167 | strftime(DTSTRING,20,"%Y/%m/%d %H:%M:%S",curr_tm); |
shivanandgowdakr | 0:d8084da95aff | 168 | // printf("Time is : %s",DTSTRING); |
shivanandgowdakr | 0:d8084da95aff | 169 | |
shivanandgowdakr | 0:d8084da95aff | 170 | } |