计量芯片HT7036读取数据

项目场景:

我也是第一次使用这个芯片,厂家也没有提供技术支持。从网上查找资料以及旁边大神的指点。花了一个多月终于是读出电压,并且加校准。

问题描述

刚开始接触到这个芯片的时候。你先把这个芯片的数据手册大概过一遍。我旁边这个大神也是这样教我的。养成习惯。你就会知道这个芯片大概是怎么工作的。 我看第一遍的时候知道了。哦.0.这个芯片是通过spi方式和mcu通讯的。然后就跟着写spi的读写程序。跟着时序图,屁颠屁颠的把时序写好。

在这里插入图片描述

读不到数据原因分析:

写完读的函数我读一下默认地址。哎。怎么是0。在看一遍手册。噢噢噢噢。复位脚拉低了。

在这里插入图片描述
解决问题。读取默认地址成功。
在这里插入图片描述
成功读取到数据 7122A0。 这不是有手就行。

读取不到电压解决方案:

我迫不及待换个寄存器读个电压试试。 一度电压又是000.整个人都蒙了 这里卡的时间最长 一两个星期吧。我期初怀疑是不是时序不对。但是能读取到默认地址呀。哦哦哦,后面发现晶振没有装。装上还是没有反应。后面我请教旁边的大佬。他自己写了就可以读取到电压值。我就纳闷了。程序是抄他的。怎么他可以我的不行。后面我看他的多了这么一段初始化程序。

在这里插入图片描述
??? 哦哦哦 原来是没有看明白数据手册导致。人家都说了写入D3命令后,7036芯片才开始正式工作。我终于也是读取到数据了

问题又来了 我明明是220的电压 怎么读出来是一长串数据呀。再看手册。
在这里插入图片描述
原来还要除以2的13次方。读出来怎么是168。也不对呀。原来读取到的电压校准。也就是校表。
我以为这个简单呀 只要对于寄存器写入参数不就OK了。
在这里插入图片描述
当我再0x18的这个位置写入000 和别的数据的时候 怎么不会变呀数据。还是168. 再看数据手册。原来要发命令c9,数据0005A,才能使能校表写操作。

在这里插入图片描述
在这里插入图片描述
写数据函数
在这里插入图片描述

在这里插入图片描述电压校准过程。0x17是a相电压的校准的地址。18是B相 19是c相电压。
我这里以建准b相为例。开始先让0x18的地址写入000的数据 然后用串口打印出来看看数据是多少。
在这里插入图片描述
那我在0x18的地址写入0x9890应该能读取到220 了吧。然而并没有。读取到10 纳尼。 再看手册。原来我还没有adc增益设置。
在这里插入图片描述
带我设置个2倍增益看看。再在0x18的位置写0000读取数据。成功的读取到数据193
在这里插入图片描述
在这里插入图片描述
一段操作

在这里插入图片描述
终于看到了心目中的电压 完结 撒花
在这里插入图片描述
真的是大佬说的话 自己要走的路,一步也不会少。只有自己渡劫成功。才会成长!

  • 10
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
计量芯片HT7036与STM32的通讯可以使用串口通讯(UART)。 首先,需要连接HT7036的TXD引脚和STM32的RX引脚,以及HT7036的RXD引脚和STM32的TX引脚。 然后,需要在STM32的代码中使用串口通讯相关的库函数来进行数据传输。以下是一个简单的示例代码: ```c #include "stm32f10x.h" #include "stm32f10x_usart.h" int main(void) { /* 初始化串口 */ USART_InitTypeDef usart_init; USART_StructInit(&usart_init); usart_init.USART_BaudRate = 9600; usart_init.USART_WordLength = USART_WordLength_8b; usart_init.USART_StopBits = USART_StopBits_1; usart_init.USART_Parity = USART_Parity_No; usart_init.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1, &usart_init); USART_Cmd(USART1, ENABLE); /* 发送数据 */ uint8_t data_to_send[] = {0x01, 0x02, 0x03}; USART_SendData(USART1, data_to_send[0]); while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); USART_SendData(USART1, data_to_send[1]); while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); USART_SendData(USART1, data_to_send[2]); while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); /* 接收数据 */ uint8_t data_received[3]; while(1) { while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET); data_received[0] = USART_ReceiveData(USART1); while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET); data_received[1] = USART_ReceiveData(USART1); while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET); data_received[2] = USART_ReceiveData(USART1); break; } } ``` 在以上代码中,首先通过USART_Init函数初始化了串口,然后通过USART_SendData函数发送了数据,最后通过USART_ReceiveData函数接收了数据。需要注意的是,在发送数据之前需要调用USART_GetFlagStatus函数来判断USART_FLAG_TXE标志位是否为RESET,以确保之前的数据已经发送完成。在接收数据之前也需要调用USART_GetFlagStatus函数来判断USART_FLAG_RXNE标志位是否为RESET,以确保已经收到了数据。 至于HT7036芯片的具体通讯协议和数据格式,需要参考其数据手册进行配置和编程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值