RTC.c 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /*
  2. * RTC.c
  3. *
  4. * Created on: 15 janv. 2019
  5. * Author: e_rcluze
  6. */
  7. #include "RTC.h"
  8. #include "i2c.h"
  9. void readHeure(Heure *heure){
  10. uint8_t tab[2];
  11. readRTC(MINUTES,tab,2);
  12. heure->minute = (((tab[0]&0x70)>>4)*10)+(tab[0]&0X0F);
  13. heure->heure = (((tab[1]&0X30)>>4)*10)+(tab[1]&0X0F);
  14. }
  15. void readDate(Date *date){
  16. uint8_t tab[7];
  17. readRTC(SECOND,tab,7);
  18. //uint8_t sec10 = (((tab[0]&0X70)>>4)*10);
  19. //uint8_t sec = tab[0]&0X0F;
  20. date->second=(((tab[0]&0X70)>>4)*10)+(tab[0]&0X0F);
  21. date->minute=(((tab[1]&0x70)>>4)*10)+(tab[1]&0X0F);
  22. date->heure=(((tab[2]&0X30)>>4)*10)+(tab[2]&0X0F);
  23. date->jour=(((tab[4]&0X30)>>4)*10)+(tab[4]&0X0F);
  24. date->mois=(((tab[5]&0X10)>>4)*10)+(tab[5]&0X0F);
  25. date->annee=((tab[6]>>4)*10)+(tab[6]&0X0F);
  26. }
  27. void WriteDate(Date *date){
  28. uint8_t tab[7];
  29. tab[0]=((date->second/10)<<4) + (date->second%10);
  30. tab[1]=((date->minute/10)<<4) + (date->minute%10);
  31. tab[2]=((date->heure/10)<<4) + (date->heure%10);
  32. tab[3]=date->joursemaine;
  33. tab[4]=((date->jour/10)<<4) + (date->jour%10);
  34. tab[5]=((date->mois/10)<<4) + (date->mois%10);
  35. tab[6]=((date->annee/10)<<4) + (date->annee%10);
  36. writeRTC(SECOND,tab,7);
  37. }
  38. void redemareRTC(){
  39. uint8_t pt[1];
  40. readRTC(ALARM_HOURS,pt,1);
  41. pt[0]=pt[0]&!0x40;
  42. writeRTC(ALARM_HOURS,pt,1);
  43. }
  44. void testRTC(){
  45. Date d;
  46. d.annee=2020;
  47. d.mois=1;
  48. d.jour=20;
  49. d.joursemaine=1;
  50. d.heure=14;
  51. d.minute=0;
  52. d.second=0;
  53. writeDate(&d);
  54. redemareRTC();
  55. HAL_Delay(2000);
  56. readDate(d);
  57. HAL_Delay(1);
  58. }
  59. void testBatteryRTC(){
  60. redemareRTC();
  61. Date d;
  62. readDate(d);
  63. HAL_Delay(1);
  64. }