[STM32F4] STM32F407读写IIC串行接口高精度实时时钟

[复制链接]
1809|37
 楼主| 突然下起雨 发表于 2023-7-31 15:39 | 显示全部楼层
七、源程序
  1. //
  2. //写SD2405允许程序
  3. //
  4. void WriteTimeOn(void)
  5. {               
  6.         I2CStart();
  7.         I2CSendByte(0x64);      
  8.         I2CWaitAck();   
  9.         I2CSendByte(0x10);                //设置写地址10H      
  10.         I2CWaitAck();       
  11.         I2CSendByte(0x80);                //置WRTC1=1      
  12.         I2CWaitAck();
  13.         I2CStop();

  14.         I2CStart();
  15.         I2CSendByte(0x64);      
  16.         I2CWaitAck();   
  17.         I2CSendByte(0x0F);                //设置写地址0FH
  18.         I2CWaitAck();       
  19.         I2CSendByte(0x84);                //置WRTC2,WRTC3=1
  20.         I2CWaitAck();
  21.         I2CStop();
  22. }


  23. //
  24. //写SD2405禁止程序
  25. //
  26. void WriteTimeOff(void)
  27. {               
  28.         I2CStart();
  29.         I2CSendByte(0x64);      
  30.         I2CWaitAck();   
  31.         I2CSendByte(0x0F);                //设置写地址0FH      
  32.         I2CWaitAck();       
  33.         I2CSendByte(0x0) ;                //置WRTC2,WRTC3=0      
  34.         I2CWaitAck();

  35.         I2CStart();
  36.         I2CSendByte(0x64);      
  37.         I2CWaitAck();   
  38.         I2CSendByte(0x10);                //设置写地址10H      
  39.         I2CWaitAck();       
  40.         I2CSendByte(0x0) ;                //置WRTC1=0(10H地址)      
  41.         I2CWaitAck();
  42.         I2CStop();
  43. }


  44. //设置SD2405中断程序(设置报警时间:小时+分钟)
  45. void WriteALARM(uint8_t hour , uint8_t minute)
  46. {       
  47.         WriteTimeOn();            //写SD2405允许
  48.         I2CStart();
  49.         I2CSendByte(0x64);      //发送SD2400写寄存器命令
  50.         I2CWaitAck();   
  51.         I2CSendByte(0x08);      //发送起始地址(0x08=分钟报警寄存器)
  52.         I2CWaitAck();   
  53.         I2CSendByte(HEXtoBCD(minute));   //分钟
  54.         I2CWaitAck();
  55.         I2CStop();
  56.        
  57.        
  58.         I2CStart();
  59.         I2CSendByte(0x64);      //发送SD2400写寄存器命令
  60.         I2CWaitAck();   
  61.         I2CSendByte(0x09);      //发送起始地址(0x09=小时报警寄存器)
  62.         I2CWaitAck();   
  63.         I2CSendByte(HEXtoBCD(hour));     //小时
  64.         I2CWaitAck();
  65.         I2CStop();       
  66.        

  67.         I2CStart();
  68.         I2CSendByte(0x64);      //发送SD2400写寄存器命令
  69.         I2CWaitAck();   
  70.         I2CSendByte(0x0E);      //发送起始地址(0x0E=报警允许寄存器)
  71.         I2CWaitAck();   
  72.         I2CSendByte(0x06);      //设置报警允许(使能小时、分钟报警)
  73.         I2CWaitAck();
  74.         I2CStop();

  75.         I2CStart();
  76.         I2CSendByte(0x64);      //发送SD2400写寄存器命令
  77.         I2CWaitAck();   
  78.         I2CSendByte(0x10);      //发送起始地址(0x10=CTR2控制寄存器)
  79.         I2CWaitAck();   
  80.         I2CSendByte(0x92);      //设置INT中断选通(INTS1,INTS0),及报警中断总允许位(INTAE)
  81.         I2CWaitAck();
  82.         I2CStop();
  83.         WriteTimeOff();        //写SD2405禁止
  84. }



  85. //关闭报警中断
  86. void ClrALARM(void)
  87. {
  88.         WriteTimeOn();            //写SD2405允许
  89.         I2CStart();
  90.         I2CSendByte(0x64);      //发送SD2400写寄存器命令
  91.         I2CWaitAck();   
  92.         I2CSendByte(0x10);      //发送起始地址
  93.         I2CWaitAck();   
  94.         I2CSendByte(0x90);      //清报警中断总允许位(INTAE)
  95.         I2CWaitAck();
  96.         I2CStop();
  97.         WriteTimeOff();        //写SD2405禁止
  98. }
万图 发表于 2023-12-29 07:28 | 显示全部楼层

电流若是偏大就会直接导致器件烧毁
Uriah 发表于 2023-12-29 08:31 | 显示全部楼层

人体具有300PF的等效电容
帛灿灿 发表于 2023-12-29 10:27 | 显示全部楼层

从而达到对电子设备进行静电保护
Bblythe 发表于 2023-12-29 11:30 | 显示全部楼层

齐纳二极管的缺点是不如TVS快
周半梅 发表于 2023-12-29 13:26 | 显示全部楼层

就是因为它的作用就是在电子产品设备受到雷击浪涌与ESD静电放电或者其他瞬态电压时
Pulitzer 发表于 2023-12-29 14:29 | 显示全部楼层

这方便一般可以使用底涂的方式来改善
童雨竹 发表于 2023-12-29 16:25 | 显示全部楼层

正常信号一般达不到导通电压
Wordsworth 发表于 2023-12-29 17:28 | 显示全部楼层

在电子电路中电容一端接电阻
Clyde011 发表于 2023-12-29 18:31 | 显示全部楼层

VHumanBody为 8kV
公羊子丹 发表于 2023-12-29 19:24 | 显示全部楼层

明确出电源的性能和稳定性是否符合预期和要求
xdvca 发表于 2024-7-31 23:42 | 显示全部楼层
你需要确保STM32F407和I2C高精度实时时钟模块(如DS3231或其他类似的RTC模块)正确连接。
鹿鼎计 发表于 2024-8-1 14:38 | 显示全部楼层
齐纳二极管的缺点是没有tvs快,
朝生 发表于 2024-8-3 09:49 | 显示全部楼层
STM32F407通过串行接口读写IIC设备中的实时时钟可以通过库函数进行操作,需精准配置时钟源与通信协议。在程序中加入延时以保证高精度读取。此外,中断处理及时,保证实时性。
LinkMe 发表于 2024-8-7 19:38 | 显示全部楼层
这种便利性通常可以通过使用底漆来提高,
天天向善 发表于 2024-8-8 19:01 | 显示全部楼层
在电子电路中,电容器的一端与电阻器相连。
软核硬核 发表于 2024-8-11 21:18 | 显示全部楼层
为了实现电子设备的静电保护,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部