PS:网上关于ds1307的资料最多还是基于51等单片机的,和stm32上还是略有差别,代码是参考了http://www.openedv.com/posts/list/20167.htm 但是他的代码有一定错误,在我的设备上读不了数据,更别谈写数据了。

说明:此程序是控制IO口模拟i2c控制ds1307

关于ds1302的资料这里就不多说了,主要分析下代码。让各位入门的新手参考一下,附上代码的下载链接:http://download.csdn.net/detail/u012062785/8966015   为什么是csdn的下载链接呢?前段时间由于校园网的问题,好像把csdn给墙掉了,不得已搬家到博客园,虽然csdn好用一些,但是还是不准备再搬回去了,麻烦。。。额,废话太多了,下面进入正题

配置:

 #define SDA_IN()  {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=8<<12;}
#define SDA_OUT() {GPIOB->CRH&=0XFFFF0FFF;GPIOB->CRH|=3<<12;} #define IIC_SCL PBout(10) //SCL
#define IIC_SDA PBout(11) //SDA
#define READ_SDA PBin(11) //ÊäÈëSDA

所以SCL线连接到stm32上的PB10,SDA线连接到stm32上的PB11上。注意上拉电阻什么的,这个请看ds1307的数据手册

读ds1307:

 u8 ds1307_Read(u8 ReadAddr)
{
u8 temp,dat;
int k;
IIC_Start();
IIC_Send_Byte(0xd0);
IIC_Send_Byte(ReadAddr);
IIC_Stop(); //这里一定要重启IIC总线,否则会读错误 IIC_Start();
IIC_Send_Byte(0xd1);
if (IIC_Wait_Ack())
return 0xff; temp = IIC_Read_Byte();
IIC_NAck();
IIC_Stop(); return temp;
}

读寄存器:

 u8 IIC_Read_Byte()
{
unsigned char i,receive=;
SDA_IN();
for(i=;i<;i++) //这里修改为7次,不然秒时针会一次递增2个单位
{
IIC_SCL=;
delay_us();
IIC_SCL=;
receive = receive<<;
if(READ_SDA){
receive++;
}
delay_us();
}
return (receive);
}

写ds1307

 void ds1307_Write(u8 WriteAddr,u8 Data)
{
u8 temp; temp=(Data/*)+(Data%); //16进制转BCD IIC_Start();
IIC_Send_Byte(0xd0); //IIC_Wait_Ack();
IIC_Send_Byte(WriteAddr); //IIC_Wait_Ack();
IIC_Send_Byte(temp); //IIC_Wait_Ack();
IIC_Stop();
delay_us(); }
PS:这里理论上是需要加上应答位的,但是我加上就会超时得不到应答,如果不要,反而成功了!!这个问题有大神知道的话,希望您能给我留言,不甚感激

写寄存器:
 u8 IIC_Send_Byte(u8 txd)
{
u8 t;
SDA_OUT();
for(t=;t<;t++)
{
if((txd&0x80)>>)
IIC_SDA=;
else
IIC_SDA=;
txd<<=;
delay_us();
IIC_SCL=;
delay_us();
IIC_SCL=;
} SDA_IN();
delay_us();
IIC_SDA=;
//delay_us(2);
IIC_SCL=;
delay_us();
if (READ_SDA==)
{
IIC_SCL=;
return ;
}
else
{
IIC_SCL=;
return ;
}
}

主要代码就差不多是这些了,如果还不太懂原理,可以下载完整源码参考。有大神觉得哪些写的不对的地方,还希望指导一下,谢谢~

总结:模拟i2c总线控制ds1307总的来说就是要注意ds1307的时序,这个也可以拓展到几乎所有字符设备吧,首先要理解设备的控制协议,然后开始一步一步操控。

STM32上移植ds1307笔记的更多相关文章

  1. 在stm32上移植wpa_supplicant(一)

    wifi芯片为88w8686,已经写好了驱动,用的是SPI方式,接下来准备移植wpa_supplicant.参考的资料为一篇论文----<基于微控制器的WPA技术研究与应用>. wpa_s ...

  2. 在stm32上移植wpa_supplicant(二)

    第一层调用的移植和裁剪. wpa_supplicant_init 照论文的指示,删除wpa_params和wpa_global相关的东西.初始化流程也相当简单,driver初始化,eap_regist ...

  3. ucos实时操作系统学习笔记——操作系统在STM32的移植

    使用ucos实时操作系统是在上学的时候,导师科研项目中.那时候就是网上找到操作系统移植教程以及应用教程依葫芦画瓢,功能实现也就罢了,没有很深入的去研究过这个东西.后来工作了,闲来无聊就研究了一下这个只 ...

  4. LwIP学习笔记——STM32 ENC28J60移植与入门

    0.前言     去年(2013年)的整理了LwIP相关代码,并在STM32上"裸奔"成功.一直没有时间深入整理,在这里借博文整理总结.LwIP的移植过程细节很多,博文也不可能一一 ...

  5. FreeRTOS移植到STM32上的移植过程

    所有的单片机都是顺序执行的,而对于多任务而言就显得力不从心了,虽然在一些小项目中可以通过定时器来实现,但这种实现方式没有实时性,一旦任务需要在规定时间内做出响应,那只能通过实时操作系统来完成了.在很多 ...

  6. 怎样把UCos-ii_在STM32上的移植

    下载代码 stm32 标准外设库是 stm32 全系列芯片的外设驱动,有了它能够大大加速我们 开发 stm32. 首先从 st 公司的站点下载最新的 stm32 标准外设库,写本文时最新的版本号是 V ...

  7. stm32寄存器版学习笔记07 ADC

    STM32F103RCT有3个ADC,12位主逼近型模拟数字转换器,有18个通道,可测量16个外部和2个内部信号源.各通道的A/D转换可以单次.连续.扫描或间断模式执行. 1.通道选择 stm32把A ...

  8. stm32寄存器版学习笔记06 输入捕获(ETR脉冲计数)

    STM32外部脉冲ETR引脚:TIM1-->PA12;TIMER2-->PA0:TIMER3-->PD2;TIMER4-->PE0… 1.TIM2 PA0计数 配置步骤 ①开启 ...

  9. stm32寄存器版学习笔记03 外部中断

    stm32的每个I/O口都可以作为中断输入,要把I/O口设置为外部中断输入,必须将I/O口设置为上拉/下拉输入 或 浮空输入(但浮空的时候外部一定要带上拉或下拉电阻,否则可能导致 中断不停的触发),干 ...

随机推荐

  1. centos 下 安装zookpeer

    tar xvf zookeeper-3.4.6.tar.gz cd /usr/local/zookpeer/ mkdir /var/zookpeer mkdir /var/zookpeer/data ...

  2. Access数据库中Sum函数返回空值(Null)时如何设置为0

    在完成一个Access表中数据统计时,需要统计指定字段的和,使用到了Sum函数,但统计时发现,指定条件查询统计时有可能返回空值(Null),导致对应字段显示为空白,正常应显示为0.基本思路是在获取记录 ...

  3. C#学校班级自动升级实现代码

    代码逻辑如下: //班级自动升级 //获取该学校还没有毕业的班级 List<ClassInfoes> classinfoeslist = classinfoesbll.GetList(Sc ...

  4. svn提交时强制添加注释

    1,找到Repositories 文件夹 2,在Repositories 中找到对应的工程, 3,在工程下找到hooks文件夹 4.在hooks文件夹下添加 :pre-commit.bat文件;文件内 ...

  5. SQL2005中的事务与锁定(九)- 转载

    ------------------------------------------------------------------------ -- Author : HappyFlyStone - ...

  6. Wamp 设置 www 目录

    打开httpd.conf,搜索wwwroot 和 directory 直接改为新目录即可. 对于wamp3是无效的,可以这样解决: “You need to change these values a ...

  7. Java Spring DI之旅

    做过.NET的人很多都用过Microsoft Enterprise Library,里面有一个Dependency injection工具Unity,我们可以使用它来实现依赖注入:什么是依赖注入呢?我 ...

  8. Android APK反编译easy 详解

    在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂亮的动画和精致的布局可能会让你爱不释手,作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用 ...

  9. wex5 教程 之 图文讲解 考题模块框架设计

    前几天帮人设计了一个手机版(做了屏幕适配,电脑使用也正常)的考题框架,供学习交流使用,今天把设计思路与技巧命整理一下. 一 效果演示: 1 登陆后台 题库管理 试卷管理 考生管理 科目管理 2 考生注 ...

  10. C语言中执行到预编译

    在Linux中,执行命令:gcc -o linux.i linux.c -E