Lele was written in 2021
STM对时钟芯片PCF的编程精编
这是用STM32对PCF8563编程的程序、模拟IIC,经验证可用~
移植用到的文件: ,我把它们全都复制到了这个Word文档里。
使用要初始化的函数:void PCF8563_Init(void). 就唯一这个。
全局变量: u8 PCF8563_Time[7]; 程序初始的值是给PCF8563设置的时间,程序中读取返回的值是PCF8563当时的时间。
我这里使用的IIC的 SCL,SDA的引脚分别为 , 具体看 和 。 只要修改好两个引脚的初始化配套你手上的板子这,就能成功移植~
Delay_nus(20):这是一个延迟20us的函数。
:
#ifndef _IIC_H_
#define _IIC_H_
#include "32f"
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/*#define I2C_Speed 100000
#define I2C1_SLAVE_ADDRESS7 0xA0
#define I2C_PageSize 256 */
2C2C2C1,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;
}
else
{
ReadByte &= ~(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);
}
:
STM对时钟芯片PCF的编程精编 来自淘豆网www.taodocs.com转载请标明出处.