首页 > 其他分享 >stm32 基于HAL工程硬件I2C读取PCF8563

stm32 基于HAL工程硬件I2C读取PCF8563

时间:2023-06-24 21:33:35浏览次数:46  
标签:HAL dateTimeBuffer uint8 stm32 hi2c I2C PCF8563

参考链接:https://download.csdn.net/download/xqw19891201/11267260

 

 

#include "stm32xxxx.h"
#include "stm32xxxx_hal.h"

#define PCF8563_ADDRESS 0xA2 // PCF8563的I2C地址

I2C_HandleTypeDef hi2c; // I2C句柄

// 从PCF8563读取一个字节
uint8_t PCF8563_ReadByte(uint8_t reg)
{
uint8_t data;
HAL_I2C_Mem_Read(&hi2c, PCF8563_ADDRESS, reg, I2C_MEMADD_SIZE_8BIT, &data, 1, HAL_MAX_DELAY);
return data;
}

// 从PCF8563读取时间和日期
void PCF8563_ReadDateTime(uint8_t *buffer)
{
HAL_I2C_Mem_Read(&hi2c, PCF8563_ADDRESS, 2, I2C_MEMADD_SIZE_8BIT, buffer, 7, HAL_MAX_DELAY);
}

int main(void)
{
// 初始化硬件I2C外设
HAL_Init();
// 初始化时钟和GPIO引脚
// ...

// 配置I2C参数
hi2c.Instance = I2C1;
hi2c.Init.ClockSpeed = 400000;
hi2c.Init.DutyCycle = I2C_DUTYCYCLE_2;
hi2c.Init.OwnAddress1 = 0;
hi2c.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hi2c.Init.OwnAddress2 = 0;
hi2c.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hi2c.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;

// 初始化I2C外设
HAL_I2C_Init(&hi2c);

uint8_t dateTimeBuffer[7];

// 读取PCF8563的时间和日期
PCF8563_ReadDateTime(dateTimeBuffer);

// 处理读取的时间和日期数据
// ...

while (1)
{
// 主循环
// ...
}
}

 

 

// 读取PCF8563的时间
void PCF8563_ReadDateTime(uint8_t *buffer)
{
HAL_I2C_Mem_Read(&hi2c, PCF8563_ADDRESS, 2, I2C_MEMADD_SIZE_8BIT, buffer, 7, HAL_MAX_DELAY);
}

int main(void)
{
// ...

uint8_t dateTimeBuffer[7];

// 读取PCF8563的时间和日期
PCF8563_ReadDateTime(dateTimeBuffer);

// 处理读取的时间和日期数据
// ...

while (1)
{
// 主循环
// ...
}
}

 

// BCD转换为Buffer
void BCDtoBuffer(uint8_t *bcd, uint8_t *buffer, uint8_t size)
{
for (uint8_t i = 0; i < size; i++)
{
buffer[i] = ((bcd[i] >> 4) & 0x0F) * 10 + (bcd[i] & 0x0F);
}
}

// Buffer转换为BCD
void BuffertoBCD(uint8_t *buffer, uint8_t *bcd, uint8_t size)
{
for (uint8_t i = 0; i < size; i++)
{
bcd[i] = ((buffer[i] / 10) << 4) | (buffer[i] % 10);
}
}

// 设置PCF8563的时间
void PCF8563_SetDateTime(uint8_t *buffer)
{
uint8_t bcd[7];
BuffertoBCD(buffer, bcd, 7); // 将Buffer转换为BCD

bcd[0] &= 0x7F; // 清除时钟暂停位
HAL_I2C_Mem_Write(&hi2c, PCF8563_ADDRESS, 2, I2C_MEMADD_SIZE_8BIT, bcd, 7, HAL_MAX_DELAY);
}

// 读取PCF8563的时间
void PCF8563_ReadDateTime(uint8_t *buffer)
{
uint8_t bcd[7];
HAL_I2C_Mem_Read(&hi2c, PCF8563_ADDRESS, 2, I2C_MEMADD_SIZE_8BIT, bcd, 7, HAL_MAX_DELAY);
BCDtoBuffer(bcd, buffer, 7); // 将BCD转换为Buffer
}

int main(void)
{
// ...

uint8_t dateTimeBuffer[7];

// 设置PCF8563的时间为2023年6月1日 12:34:56
dateTimeBuffer[0] = 56; // 秒(BCD格式)
dateTimeBuffer[1] = 34; // 分钟(BCD格式)
dateTimeBuffer[2] = 12; // 小时(BCD格式)
dateTimeBuffer[3] = 1; // 日(BCD格式)
dateTimeBuffer[4] = 6; // 月(BCD格式)
dateTimeBuffer[5] = 23; // 年(BCD格式)
dateTimeBuffer[6] = 0; // 星期几(BCD格式)

// 设置PCF8563的时间
PCF8563_SetDateTime(dateTimeBuffer);

// 读取PCF8563的时间和日期
PCF8563_ReadDateTime(dateTimeBuffer);

// 处理读取的

标签:HAL,dateTimeBuffer,uint8,stm32,hi2c,I2C,PCF8563
From: https://www.cnblogs.com/hzijone/p/17501718.html

相关文章

  • 《零死角玩转 STM32》pdf版电子书免费下载
    《零死角玩转STM32》系列教程由初级篇、中级篇、高级篇、系统篇、四个部分组成,根据野火STM32开发板旧版教程升级而来,且经过重新深入编写,重新排版,更适合初学者,步步为营,从入门到精通,从裸奔到系统,让您零死角玩转STM32。适合stm32入门,简单易懂,层层递进,亲测效果良好,适合新手学习,......
  • STM32-mp157-A核Linux
    A核开发环境网卡连接1.NAT虚拟网卡连接互联网2.桥接(真实)网卡连接开发板ubuntu新建NAT网卡;设置桥接模式;搜索vmnet以管理员身份打开;设置桥接网卡为目标usb网卡;打开虚拟机linux网络设置;设置静态IPv4同一网段;ifconfig命令查看;打开windows网络设置;设置静态IPv4同一网段;打开终......
  • STM32-mp157d-M核裸机
    M核1.时钟配置2.延时函数HAL_delay(unsignedintMS);//实际延时时间:MS+1ms3.IO配置HAL库方法使用mp157时,stm32cubeMX不能生成GPIO初始化代码,需要根据具体分配情况自己完成GPIO初始化。初始化//配置PA5引脚__HAL_RCC_GPIOA_CLK_ENABLE();//使能Z组GPIO时钟GPIO......
  • BLDC无刷直流驱动控制板资料,可驱动300W电机,已量产(STM32 CAN总线)输入电压:15~36V
    BLDC无刷直流驱动控制板资料,可驱动300W电机,已量产(STM32CAN总线)输入电压:15~36V驱动功率:300W~500W,20A电流检测,CAN通信总线功能介绍KEY1:运行KEY2:停止VR1:转速调节带霍尔传感器提供工程原理图和源码,AD9工程内有提供电机型号ID:1759609955138630......
  • 量产HLW8032串口通讯芯片的三相电参数采集系统项目资料 1主芯片采用STM32F407
    量产HLW8032串口通讯芯片的三相电参数采集系统项目资料1主芯片采用STM32F4072嵌入式软件使用UCOS2操作系统3通过3个独立串口实时采集三路三相电参数数据(通过HLW8032)4具备TFT液晶显示接口,实时显示三相电参数数据5为了采集电参数更加精确,系统具备红外解码芯片(HS0038),可在线标定电压......
  • STM32 IAP/OTA升级/BootLoader 升级方案 协议:ymode 1k
    STM32IAP/OTA升级/BootLoader升级方案协议:ymode1k包含上位机源码(VS2019/NET4.5)下位机源码Keil5.25验证芯片:STM32F103C8T6优点:可移植其他芯片ID:3360609508368547......
  • STM32 w5500 bootloader 源代码 STM32 w5500 bootloader 原代源码,上位机C#,下位机c
    STM32w5500bootloader源代码STM32w5500bootloader原代源码,上位机C#,下位机c。简单修改可以支持stm32全系列芯片。支持网口升级该版本为优化过的版本,1.支持代码段保护;2.支持烧写失败重置;3.已经在正式产品批量使用,同步更新。YID:4330607520269271......
  • 【whale-starry-stl】01天 list学习笔记
    一、知识点1.std::bidirectional_iterator_tagstd::bidirectional_iterator_tag是C++标准库中定义的一个迭代器类型标签,用于标识支持双向遍历的迭代器类型。在C++中,迭代器是一种泛型指针,用于遍历容器中的元素。迭代器类型标签用于标识迭代器的特性,从而在算法中选择合适的......
  • halcon九点标定/手眼标定本源码用labview调用halcon九点标定算法以及labview我们自己
    halcon九点标定/手眼标定本源码用labview调用halcon九点标定算法以及labview我们自己总结halcon算法,写出的不用调用halcon的算法,结果一致。1.调用halcon实现九点标定2.labview自己算法写出的九点标定默认2选1这段话涉及到的知识点和领域范围包括:halcon九点标定算法、l......
  • STM32F407 兼容FX3U PLC方案 STM32F407兼容三菱FX3U的
    STM32F407兼容FX3UPLC方案STM32F407兼容三菱FX3U的方案。STM32F407是一种微控制器,它可以与三菱FX3UPLC兼容,提供了一种解决方案。知识点和领域范围:1.微控制器:STM32F407是一种32位微控制器,它集成了处理器核心、存储器、外设和接口电路等组件,用于控制和管理各种电子设备。2.PLC......