使用代码
(1条消息) stm32iic调试ds1307rtc时钟,采用iic接口,驱动软件,可以设置,读取ds1307时钟代码资源-CSDN文库
使用STM32调试ds1307,采用iic接口,由于有个项目需要使用外部RTC功能,所以需要选一个RTC模块,最后选择淘宝上搞个模块过来测试一下
模块长相如下
原理图如下这个模块,从原理图上看,还有一个eeprom,这个也可以通过iic接口来访问,实际项目上暂时未使用,等有空可以调试看看
DS1307
是美国DALLAS公司推出的I2C总线接口实时时钟芯片,它可独立于 CPU工作,不受CPU主晶振及其电容的影响,且计时准确,月累积误差一般小于10秒。芯片还具有主电源掉电情况下的时钟保护电路,DS1307的时钟靠后备电池维持工作,拒绝CPU对其读出和写入访问。同时还具有备用电源自动切换控制电路,因而可在主电源掉电和其它一些恶劣环境场合中保证系统时钟的定时准确性。DS1307具有产生秒、分、时、日、月、年等功能,且具有闰年自动调整功能。同时,DS1307芯片内部还集成有一定容量、具有掉电保护特性的静态RAM,可用于保存一些关键数据。
采用的测试开发板,也是淘宝购买,使用STM32F103RCT6信号,这块MCU也是一款主流MCU使用场景比较多。
原理图连接
如上图所示
PA10/PA9/GND,使用杜邦线连接TTL转USB模块连接电脑,调试串口使用
5V/GND/PB10/PB,使用杜邦线连接到DS1307模块的P1接口
软件编写
stm32cubemx版本号
使用内部时钟,这里都可以,也可以使用外部时钟
配置调试接sw或者jtag,串口1,PB10/PB11输出模式
重定义串口打印函数
/*
* Retargets the C library printf function to the USART.
*/
int fputc(int ch, FILE *f)
{
while((USART1->SR&0x40)==0);//等待上一次发送完毕
USART1->DR=ch;
return ch;
}
主函数钟读取DS1307数据
HAL_Delay(1000);
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_8);
second=Read1307(0x00);
minute=Read1307(0x01);
hour=Read1307(0x02);
week=Read1307(0x03);
day=Read1307(0x04);
month=Read1307(0x05);
year=Read1307(0x06);
printf("Time:%d-%d-%d",year,month,day);
printf(" %d:%d:%d\r\n",hour,minute,second);
打印数据如下
实际调试图片连接线
使用代码
(1条消息) stm32iic调试ds1307rtc时钟,采用iic接口,驱动软件,可以设置,读取ds1307时钟代码资源-CSDN文库