STM32对时钟芯片PCF8563的编程.doc_第1页
STM32对时钟芯片PCF8563的编程.doc_第2页
STM32对时钟芯片PCF8563的编程.doc_第3页
STM32对时钟芯片PCF8563的编程.doc_第4页
STM32对时钟芯片PCF8563的编程.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

这是用STM32对PCF8563编程的程序、模拟IIC,经验证可用移植用到的文件:IIC.h IIC.c PCF8563.h PCF8563.c ,我把它们全都复制到了这个Word文档里。使用要初始化的函数:void PCF8563_Init(void). 就唯一这个。全局变量: u8 PCF8563_Time7; 程序初始的值是给PCF8563设置的时间,程序中读取返回的值是PCF8563当时的时间。我这里使用的IIC的 SCL,SDA的引脚分别为PA.0 PA.1, 具体看IIC.h 和 IIC.C。 只要修改好两个引脚的初始化配套你手上的板子这,就能成功移植Delay_nus(20):这是一个延迟20us的函数。IIC.h:#ifndef _IIC_H_#define _IIC_H_#include stm32f10x.h/* Private typedef -*/* Private define -*/*#define I2C_Speed 100000#define I2C1_SLAVE_ADDRESS7 0xA0#define I2C_PageSize 256 */SCL PA0/SDA PA1#define SCL_H()GPIO_SetBits(GPIOA, GPIO_Pin_0)#define SCL_L() GPIO_ResetBits(GPIOA, GPIO_Pin_0)#define SDA_H()GPIO_SetBits(GPIOA, GPIO_Pin_1)#define SDA_L() GPIO_ResetBits(GPIOA, GPIO_Pin_1)/返回0,和1#define Read_SDA() GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)u8 IIC_ReadByte(void);void IIC_WriteByte(u8 byte);void IIC_WaitAck(void);void IIC_Stop(void);void IIC_Start(void);void IIC_Init(void);void I2C_Ack(void);void I2C_NoAck(void);/取回八个字节的数据:秒,分,时,天,星期,月份,年份。#endifIIC.c:#include IIC.h#include delay.h/*/void IIC_Init(void) GPIO_InitTypeDef GPIO_InitStructure; /* Configure I2C1 pins: SCL and SDA */ RCC_APB2PeriphClockCmd (RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; /开漏输出,可以在不用改变成输入的情况下读取IO的电平 GPIO_Init(GPIOA, &GPIO_InitStructure); SCL_H();/拉高 SDA_H();void IIC_Start(void)/*SDA_H();SCL_H();delay_nus(20);SDA_L();delay_nus(20);*/ SDA_H(); SCL_H(); delay_nus(20); SDA_L(); delay_nus(20); SDA_L(); delay_nus(20); void IIC_Stop(void) SCL_L();/1 delay_nus(20);/ 2 SDA_L();/ 3. 1,2,3这三行不可缺少 delay_nus(20); SCL_H(); delay_nus(20); SDA_H(); delay_nus(20);void IIC_WaitAck(void)u16 k;SCL_L();SDA_H();delay_nus(20);SCL_H();k = 0;while(Read_SDA()!= 0) & (k 60000)k+;delay_nus(20);SCL_L();delay_nus(20);void IIC_WriteByte(u8 byte)u8 i = 0;for(i = 0; i 8; i+) SCL_L(); delay_nus(20); if(byte & 0x80) SDA_H(); else SDA_L(); delay_nus(20); SCL_H(); delay_nus(20); byte=1; SCL_L(); delay_nus(20);u8 IIC_ReadByte(void)u8 i,ReadByte;SDA_H();for(i = 0; i 8; i+)ReadByte = 1;SCL_L();delay_nus(20);SCL_H();delay_nus(20);if(Read_SDA()ReadByte |= 0x01;elseReadByte &= (0x01);return ReadByte;void I2C_Ack(void) SCL_L(); delay_nus(20); SDA_L(); delay_nus(20); SCL_H(); delay_nus(20); SCL_L(); delay_nus(20);void I2C_NoAck(void) SCL_L(); delay_nus(20); SDA_H(); delay_nus(20); SCL_H(); delay_nus(20); SCL_L(); delay_nus(20);PCF8563.h: #ifndef _PCF8563_H_#define _PCF8563_H_#include IIC.h#define ReadCode 0xa3#define WriteCode 0xa2void PCF8563_Init(void);u8 PCF8563_ReaDAdress(u8 Adress);void PCF8563_WriteAdress(u8 Adress, u8 DataTX);/取回7个字节的数据:秒,分,时,天,星期,月份,年份。/全局变量extern u8 PCF8563_Time7;void PCF8563_ReadTimes(void);/在CLKOUT上定时1S输出一个下降沿脉冲void PCF8563_CLKOUT_1s(void);#endifPCF8563.c:#include PCF8563.h/全局变量,程序初始的值就是要初始化的时间,/用途:1:初始化时间。2:读取返回时间 / 秒,分,时,天,星期,月份,年份。u8 PCF8563_Time7 = 50, 59, 23, 31, 6, 12, 12;void PCF8563_Init(void)IIC_Init();/十进制码转换成BCD码PCF8563_Time0 = (PCF8563_Time0/10) 4) | (PCF8563_Time0%10);PCF8563_Time1 = (PCF8563_Time1/10) 4) | (PCF8563_Time1%10);PCF8563_Time2 = (PCF8563_Time2/10) 4) | (PCF8563_Time2%10);PCF8563_Time3 = (PCF8563_Time3/10) 4) | (PCF8563_Time3%10);/PCF8563_Time4 = (PCF8563_Time4/10 4) | (PCF8563_Time4%10); /星期不用转换PCF8563_Time5 = (PCF8563_Time5/10 4) | (PCF8563_Time5%10);PCF8563_Time6 = (PCF8563_Time6/10 4)*10 + (PCF8563_Time0&0x0f);PCF8563_Time1 = (PCF8563_Time1&0xf0)4)*10 + (PCF8563_Time1&0x0f);PCF8563_Time2 = (PCF8563_Time2&0xf0)4)*10 + (PCF8563_Time2&0x0f);PCF8563_Time3 = (PCF8563_Time3&0xf0)4)*10 + (PCF8563_Time3&0x0f);PCF8563_Time4 = (PCF8563_Time4&0xf0)4)*10 + (PCF8563_Time4&0x0f);PCF8563_Time5 = (PCF8563_Time5&0xf0)4)*10 + (PCF8563_Time5&0x0f);PCF8563_Time6 = (PCF8563_Time6&0xf0)4)*10 + (PCF8563_Time6&0x0f);/在CLKOUT上定时1S输出一个下降沿脉冲,经过验证,可以设置STM32的GPIO上拉输入,设置

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论