RTC.c 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /*
  2. * RTC.c
  3. *
  4. * Created on: 15 janv. 2019
  5. * Author: e_rcluze
  6. */
  7. #include "RTC.h"
  8. /** Private Fonction*/
  9. void readRTC(uint8_t reg, uint8_t *tab, int len){
  10. HAL_I2C_Master_Transmit(&I2C_RTC,RTC_ADD,&reg,1,1000);
  11. HAL_I2C_Master_Receive(&I2C_RTC,RTC_ADD,tab,len,1000);
  12. }
  13. void writeRTC(uint8_t reg, uint8_t *tab, int len){
  14. uint8_t t[len+1];
  15. t[0]=reg;
  16. for(int i=0;i<len;i++)
  17. t[i+1]=tab[i];
  18. HAL_I2C_Master_Transmit(&I2C_RTC,RTC_ADD,t,len+1,1000);
  19. }
  20. /** Public Fonction*/
  21. void initRTC(I2C_HandleTypeDef typ){
  22. I2C_RTC = typ;
  23. }
  24. void readHeure(Heure *heure){
  25. uint8_t tab[2];
  26. readRTC(MINUTES,tab,2);
  27. heure->minute = (((tab[0]&0x70)>>4)*10)+(tab[0]&0X0F);
  28. heure->heure = (((tab[1]&0X30)>>4)*10)+(tab[1]&0X0F);
  29. }
  30. /** Public Fonction*/
  31. void readDate(Date *date){
  32. uint8_t tab[7];
  33. readRTC(SECOND,tab,7);
  34. date->second=(((tab[0]&0X70)>>4)*10)+(tab[0]&0X0F);
  35. date->minute=(((tab[1]&0x70)>>4)*10)+(tab[1]&0X0F);
  36. date->heure=(((tab[2]&0X30)>>4)*10)+(tab[2]&0X0F);
  37. date->jour=(((tab[4]&0X30)>>4)*10)+(tab[4]&0X0F);
  38. date->mois=(((tab[5]&0X10)>>4)*10)+(tab[5]&0X0F);
  39. date->annee=((tab[6]>>4)*10)+(tab[6]&0X0F);
  40. }
  41. void writeDate(Date *date){
  42. uint8_t tab[7];
  43. tab[0]=((date->second/10)<<4) + (date->second%10);
  44. tab[1]=((date->minute/10)<<4) + (date->minute%10);
  45. tab[2]=((date->heure/10)<<4) + (date->heure%10);
  46. tab[3]=date->joursemaine;
  47. tab[4]=((date->jour/10)<<4) + (date->jour%10);
  48. tab[5]=((date->mois/10)<<4) + (date->mois%10);
  49. tab[6]=((date->annee/10)<<4) + (date->annee%10);
  50. writeRTC(SECOND,tab,7);
  51. }
  52. void redemareRTC(){
  53. uint8_t pt[1];
  54. readRTC(ALARM_HOURS,pt,1);
  55. pt[0]=pt[0]&!0x40;
  56. writeRTC(ALARM_HOURS,pt,1);
  57. }
  58. void testRTC(){
  59. Date d;
  60. d.annee=2020;
  61. d.mois=1;
  62. d.jour=20;
  63. d.joursemaine=1;
  64. d.heure=14;
  65. d.minute=0;
  66. d.second=0;
  67. writeDate(&d);
  68. redemareRTC();
  69. HAL_Delay(2000);
  70. readDate(&d);
  71. HAL_Delay(1);
  72. }
  73. void testBatteryRTC(){
  74. redemareRTC();
  75. Date d;
  76. readDate(&d);
  77. HAL_Delay(1);
  78. }