这是用STM32 对PCF8563 编程的程序、模拟 IIC,经验证可用~ 移植用到的文件:IIC.h IIC.c PCF8563.h PCF8563.c ,我把它们全都复制到了这个 Word 文档里。 使用要初始化的函数:void PCF8563_Init(void). 就唯一这个。 全局变量: u8 PCF8563_Time[7]; 程序初始的值是给 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); //取回八个字节的数据:秒,分,时,天,星期,月份,年份。 #endif IIC.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_...