STM32对时钟芯片PCF8563的编程.doc

上传人:可****阿 文档编号:69715995 上传时间:2023-01-07 格式:DOC 页数:8 大小:36.04KB
返回 下载 相关 举报
STM32对时钟芯片PCF8563的编程.doc_第1页
第1页 / 共8页
STM32对时钟芯片PCF8563的编程.doc_第2页
第2页 / 共8页
点击查看更多>>
资源描述

《STM32对时钟芯片PCF8563的编程.doc》由会员分享,可在线阅读,更多相关《STM32对时钟芯片PCF8563的编程.doc(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、STM32对时钟芯片PCF8563的编程这是用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。 只要修改好两个引脚的初始化配套你手上的板子这,就

2、能成功移植Delay_nus(20):这是一个延迟20us的函数。IIC.h:ifndef _IIC_H_define _IIC_H_#include stm32f10x.h/ Private typedef -/* Private define -/define I2C_Speed 100000define I2C1_SLAVE_ADDRESS7 0xA0define I2C_PageSize 256 /SCL PA0/SDA PA1define SCL_H()GPIO_SetBits(GPIOA, GPIO_Pin_0)#define SCL_L() GPIO_ResetBits(GPIO

3、A, 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_Ini

4、t(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

5、= 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(); S

6、CL_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

7、) (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+

8、)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

9、_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个字节的数据:秒,分,时,天,星期,月份,年份./全局变量ex

10、tern 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_T

11、ime0 = ((PCF8563_Time0/10) 4) | (PCF8563_Time010);PCF8563_Time1 = ((PCF8563_Time1/10) 4) | (PCF8563_Time110);PCF8563_Time2 = ((PCF8563_Time2/10) 4) (PCF8563_Time2%10);PCF8563_Time3 = ((PCF8563_Time3/10) 4) (PCF8563_Time310);/PCF8563_Time4 = ((PCF8563_Time4/10 4)10 + (PCF8563_Time0&0x0f);PCF8563_Time

12、1 = ((PCF8563_Time1&0xf0)4)*10 + (PCF8563_Time10x0f);PCF8563_Time2 = ((PCF8563_Time20xf0)4)10 + (PCF8563_Time20x0f);PCF8563_Time3 = (PCF8563_Time30xf0)4)10 + (PCF8563_Time3&0x0f);PCF8563_Time4 = ((PCF8563_Time4&0xf0)4)10 + (PCF8563_Time4&0x0f);PCF8563_Time5 = ((PCF8563_Time50xf0)4)10 + (PCF8563_Time

13、5&0x0f);PCF8563_Time6 = (PCF8563_Time6&0xf0)4)10 + (PCF8563_Time60x0f);/在CLKOUT上定时1S输出一个下降沿脉冲,经过验证,可以设置STM32的GPIO上拉输入,设置成下降沿中断,单片机每过1S产生一次中断void PCF8563_CLKOUT_1s(void)PCF8563_WriteAdress(0x01, 0);/禁止定时器输出,闹铃输出PCF8563_WriteAdress(0x0e, 0);/关闭定时器等等/PCF8563_WriteAdress(0x0e, 0);/写入1 PCF8563_WriteAdress(0x0d, 0x83); /打开输出脉冲

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 初中资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁