CH32V103C8T6 与ht7038 SPI通讯

这篇博客详细介绍了如何使用CH32V103C8T6微控制器通过SPI接口与HT7038电能计量芯片进行通讯,包括读取和写入数据的函数实现。内容涵盖SPI通讯的初始化、HT7038的复位和配置,以及读取电压、频率等关键数据的例程。通过对HT7038寄存器的访问,实现了对电能参数的测量和校准,如电压增益设置、相位校正等。

使用CH32V103C8T6的SPI与ht7038通讯。

 

 

 波形

 必须获取rChipID数据才能确信SPI通讯成功。

 

  ht7038.h

/*
 * HT7038.h
 *
 *  Created on: 2022年5月20日
 *      Author: armxu
 */

#ifndef USER_HT7038_H_
#define USER_HT7038_H_
#include "stdint.h"
#include "ch32v10x_spi.h"
#define CS_PIN_PORT  GPIOA
#define CS_PIN       GPIO_Pin_4
#define CS(X)        GPIO_WriteBit(CS_PIN_PORT, CS_PIN, X)
//===================================================
//          定义HT7038的数据寄存器
//===================================================
#define rDeviceID   0x00    //7038 Device ID
#define rPa         0x01    //A相有功功率
#define rPb         0x02    //B相有功功率
#define rPc         0x03    //C相有功功率
#define rPt         0x04    //合相有功功率

#define rQa         0x05    //A相无功功率
#define rQb         0x06    //B相无功功率
#define rQc         0x07    //C相无功功率
#define rQt         0x08    //合相无功功率

#define rSa         0x09    //A相视在功率
#define rSb         0x0A    //B相视在功率
#define rSc         0x0B    //C相视在功率
#define rSt         0x0C    //合相视在功率

#define rUaRms          0x0D    //A相电压有效值
#define rUbRms          0x0E    //B相电压有效值
#define rUcRms          0x0F    //C相电压有效值

#define rIaRms          0x10    //A相电流有效值
#define rIbRms          0x11    //B相电流有效值
#define rIcRms          0x12    //C相电流有效值
#define rItRms          0x13    //ABC相电流矢量和的有效值

#define rPfa        0x14    //A相功率因数
#define rPfb        0x15    //B相功率因数
#define rPfc        0x16    //C相功率因数
#define rPft        0x17    //合相功率因数

#define rPga        0x18    //A相电流与电压相角
#define rPgb        0x19    //B相电流与电压相角功率因数
#define rPgc        0x1a    //C相电流与电压相角

#define rINTFlag    0x1b    //中断标志,读后清零 ☆

#define rFreq       0x1C    //线频率
#define rEFlag      0x1d    //电能寄存器的工作状态,读后清零☆

#define rEpa        0x1e    //A相有功电能
#define rEpb        0x1f    //B相有功电能
#define rEpc        0x20    //C相有功电能
#define rEpt        0x21    //合相有功电能

#define rEqa        0x22    //A相无功电能
#define rEqb        0x23    //B相无功电能
#define rEqc        0x24    //C相无功电能
#define rEqt        0x25    //合相无功电能

#define rYUaUb      0x26    //Ua与Ub的电压夹角            ☆
#define rYUaUc      0x27    //Ua与Uc的电压夹角            ☆
#define rYUbUc      0x28    //Ub与Uc的电压夹角            ☆

#define rTPSD       0x2a    //温度传感器的输出
#define rURmst      0x2b    //ABC电压矢量和的有效值

#define rS_Flag     0x2c    //存放断相、相序、SIG信号的有效值

#define rBackReg      0x2d  //通讯数据备份寄存器☆
#define rComChksum  0x2e    //通讯校验和寄存器☆
#define rSampleIA   0x2f    //A相电流通道ADC采样数据☆
#define rSampleIB   0x30    //B相电流通道ADC采样数据☆
#define rSampleIC   0x31    //C相电流通道ADC采样数据☆

#define rSampleUA   0x32    //A相电压通道ADC采样数据☆
#define rSampleUB   0x33    //B相电压通道ADC采样数据☆
#define rSampleUC   0x34    //C相电压通道ADC采样数据☆

#define rEsa    0x35    //A相视在电能☆
#define rEsb    0x36    //B相视在电能☆
#define rEsc    0x37    //C相视在电能☆
#define rEst    0x38    //合相视在电能☆

#define rFstCntA        0x39    //A相快速脉冲计数☆
#define rFstCntB        0x40    //B相快速脉冲计数☆
#define rFstCntC        0x40    //C相快速脉冲计数☆
#define rFstCntT        0x41    //合相快速脉冲计数☆

#define rPFlag      0x3d    //有功和无功功率方向,正向为0,负向为1

#define rChkSum 0x3e    //校表数据校验寄存器(三相四线模式下是0x01D4CD;三相三线模式下是0x01E0CD;)


#define rVrefgain       0x5c    //Vref自动补偿系数
#define rChipID       0x5d  //芯片版本指示器0X7026E0
#define rChkSum1        0x5e    //新增校表寄存器校验和

//====================================
评论 12
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

armcsdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值