Hx711称重模块+STM32+CubeMX

news2024/7/4 5:22:50

文章目录

  • 一、模块和接线
  • 二、CubeMX配置
    • 1.时钟及sys
    • 2.IO口
        • 1)数据线DT设置为Input
        • 2)时钟线SCK设置为Output
    • 3.串口
    • 4.后续配置
  • 三、程序
    • 1.main.c
    • 2.hx711.c
    • 3.hx711.h
    • 4.串口重定向
  • 总结
  • 参考文章


提示:以下是本篇文章正文内容,下面案例可供参考

一、模块和接线

传感器连接hx711,hx711连接STM32,如下图所示

在这里插入图片描述

二、CubeMX配置

1.时钟及sys

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.IO口

1)数据线DT设置为Input

在这里插入图片描述

2)时钟线SCK设置为Output

在这里插入图片描述

3.串口

打开串口并选择中断,其他配置保持不变
在这里插入图片描述

4.后续配置

在这里插入图片描述
在这里插入图片描述

三、程序

1.main.c

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */


extern uint8_t ReceiveBuff[BUFFERSIZE]; 
extern uint8_t recv_end_flag,Rx_len;
extern uint32_t weight_first;
extern uint32_t weight_real;

uint32_t weight_print = 0;//质量打印


/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  MX_USART6_UART_Init();
  /* USER CODE BEGIN 2 */
	
  printf("压力传感器HX711\r\n");
  weight_first = ReadCount();//首次读取重量进行去皮操作
  printf("首次质量weight_first=%d\n",weight_first);
  HAL_Delay(100);
		
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
    		
		weight_print = WeightReal();//实际质量计算
		printf("重量为:%dg\n",weight_print);
		HAL_Delay(100);
		
  }
  /* USER CODE END 3 */
}


2.hx711.c

注:根据官方给出的程序写ReadCount,红色框程序要稍微改一下。将ADSK=1;与ADSK=0;看作一个数据传输周期的开始和结束,if语句中count值仍在变化,等于数据传输还没结束,所以要将结束标志ADSK=0放到if语句后。

在这里插入图片描述

1ADSK=0;//指SCK时钟线电平置低。
2ADSK=1;//指SCK时钟线电平置高。
3while(ADDO);//判断AD转换器是否准备好(DOUT应为低电平),ADDO=0,程序正常进行,否则ADDO=1一直进行while循环。

4 i 的取值范围根据手册中的此处给出,为24-26,分别对应不同的通道和增益。在这里插入图片描述

#include "hx711.h"
#include "stdio.h"
#include "stdint.h"
#include "gpio.h"
 
uint8_t ReceiveBuff[BUFFERSIZE]; //接收缓冲区
uint8_t recv_end_flag = 0,Rx_len;//接收完成中断标志,接收到字符长度

uint32_t weight_first = 0;//首次质量
uint32_t weight_real = 0;//每次读取的实际值

/***********************************************************************************************
*Name : ReadCount
*Function : 读取传感器数值,通道A,增益128
*Parameter :    count 计数值
                i    24位数据计数,改变i的值可选择不同通道和增益24~26
***********************************************************************************************/
uint32_t ReadCount(void)
{
	uint32_t Count = 0;
	uint8_t i = 0;
	HAL_Delay(10);
	HAL_GPIO_WritePin(SCK_GPIO_Port, SCK_Pin, GPIO_PIN_RESET);
	
	while(HAL_GPIO_ReadPin(DT_GPIO_Port, DT_Pin));//判断AD转换器是否准备好(DOUT应为低电平)
	for(i = 0; i <24; i++)//24
	{
	  HAL_GPIO_WritePin(SCK_GPIO_Port, SCK_Pin, GPIO_PIN_SET);
		Count = Count << 1;		
		if(HAL_GPIO_ReadPin(DT_GPIO_Port, DT_Pin))
		{
		    Count ++;
		}
		HAL_GPIO_WritePin(SCK_GPIO_Port, SCK_Pin, GPIO_PIN_RESET);			
	}
	
	HAL_GPIO_WritePin(SCK_GPIO_Port, SCK_Pin, GPIO_PIN_SET);
	Count = Count ^ 0x800000;
	HAL_GPIO_WritePin(SCK_GPIO_Port, SCK_Pin, GPIO_PIN_RESET);
	return Count;
}

/***********************************************************************************************
*Name : ReadWeight
*Function : 读取拉力值
*Parameter :   weight_real          实际拉力值
               weight_first         传感器首次数据
***********************************************************************************************/
uint32_t WeightReal(void)
{
   weight_real = ReadCount();//实际质量计算
		if(weight_first>=weight_real)
		{
			weight_real = weight_first-weight_real;
			weight_real = weight_real/100;
			//printf("重量为:%dg\n",weight_real);
		}
		else
		{
			weight_real = weight_real-weight_first;
			weight_real = weight_real/100;
			//printf("重量为:-%dg\n",weight_real);
		}
		return weight_real;
}

3.hx711.h

#ifndef HX711
#define HX711
#include "stdint.h"

#define BUFFERSIZE 255           //可以接收的最大字符个数       
uint32_t ReadCount(void);
uint32_t ReadWeight(void);

#endif

4.串口重定向

放在usart.c中

int fputc(int ch, FILE *f)
{
  HAL_UART_Transmit(&huart6, (uint8_t *)&ch, 1, 0xffff);
  return ch;
}


总结

提示:本文章学到的一个主要知识点是ReadCount函数中的

通讯逻辑是先将数据线电平拉高,代表数据开始传输,等待接收完数据后,数据线电平置低,数据传输结束。

参考文章

涂鸦模组开发(压力传感器HX711)——2. 压力传感器HX711

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/604404.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【消息中间件】比较Redis,Kafka和RabbitMQ

对微服务使用异步通信时&#xff0c;通常使用消息代理。代理确保不同微服务之间的通信可靠且稳定&#xff0c;消息在系统内得到管理和监控&#xff0c;并且消息不会丢失。您可以从几个消息代理中进行选择&#xff0c;它们的规模和数据功能各不相同。这篇博文将比较三种最受欢迎…

云服务器CPU内存/带宽配置怎么选择?

云服务器配置怎么选择&#xff1f;个人如何选择&#xff1f;企业怎么选择云服务器配置&#xff1f;腾讯云服务器CPU内存、带宽和系统盘怎么选择合适&#xff1f;个人用户可以选择轻量应用服务器&#xff0c;企业用户可以选择云服务器CVM&#xff0c;企业用户可以选择标准型S5云…

5.1 树和二叉树的定义

博主简介&#xff1a;一个爱打游戏的计算机专业学生博主主页&#xff1a; 夏驰和徐策所属专栏&#xff1a;算法设计与分析 5.1.1 树的定义 我的理解&#xff1a; 在计算机科学中&#xff0c;树是一种非线性数据结构&#xff0c;由节点&#xff08;或称为顶点&#xff09;和边…

ChatGPT国内镜像网站大盘点(国内可用免费GPT-3.5或GPT-4镜像站点)

目录 方法1&#xff1a;使用灵动Ai Chat网页版 方法2&#xff1a;使用AI CHATGPT 公益站 方法3&#xff1a;使用Chat8 方法4&#xff1a;使用https://steamship.com 方法5&#xff1a;使用AI文本工具站 方法6&#xff1a;使用AIDuTu 很多网友想要国内可用免费ChatGPT镜像站…

【AI实战】开源且可商用的 40B 大语言模型 Falcon 40B

【AI实战】开源且可商用的 40B 大语言模型 Falcon 40B Falcon 40B 介绍开源地址Falcon 40B 的测评开源协议 Falcon 40B 介绍 官网 https://www.tii.ae/news/uaes-technology-innovation-institute-launches-open-source-falcon-40b-large-language-model Abu Dhabi-UAE: 25 Ma…

spring cloud搭建(hystrix)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

安装指定版本docker [centos]

在安装k8s时&#xff0c;对其docker版本有要求&#xff0c;因为在v1.4后对docker不再支持。在安装v1.36版本时&#xff0c;需要提前安装对应版本的docker&#xff0c;这里安装20.10版本 一 先卸载原来安装的docker yum remove docker-ce docker-ce-cli containerd.io 再删除对…

vivado中的Video timing controller IP核参数计算方法

一、参数的计算 直入正题&#xff0c;已知某一1024*600的LCD屏幕&#xff0c;屏幕参数大致如下&#xff1a; 如何设置IP核配置界面的参数呢&#xff1f; 细调参数几乎用不到&#xff0c;我们主要说一下水平设置和垂直设置的8个参数如何配置。取LCD屏幕的典型值作为参考值&#…

自动驾驶之行泊一体

行泊一体技术是一种集成了自动泊车和无人驾驶技术的新型汽车技术,该技术可以使汽车更加智能化和自动化,提高驾驶的安全性和便捷性。从芯片和BEV技术门槛方面来看,我们可以更好地理解这项技术的优势和挑战。 一、芯片限制 实现行泊一体技术需要依靠一些关键的芯片技术,其…

谷歌浏览器Software Reporter Tool长时间占用CPU解决办法

如下图所示&#xff0c;大家是否在使用谷歌浏览器的过程中发现CPU风扇狂转&#xff0c;打开任务管理器发现一个名为software_reporter_tool.exe的软件占用了一半的CPU资源&#xff01;这简直不能忍&#xff0c;按照下面教程&#xff0c;可以解决这个令人苦恼的问题。 什么是Sof…

【LeetCode】693. 交替位二进制数

693. 交替位二进制数&#xff08;简单&#xff09; 方法一 思路 如果一个数的二进制表示总是 0、1 交替出现&#xff0c;那么这个数字可能有两种表示情况&#xff0c;...101010 或 ...010101 &#xff0c;即对应最低位从 0 或 1 开始的两种情况。 因此&#xff0c;我们先确定…

港科夜闻|香港科大出席一流大学建设系列研讨会-2022暨中国大学校长联谊会...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科大出席一流大学建设系列研讨会—2022暨中国大学校长联谊会。5月25日至26日&#xff0c;香港科技大学副校长汪扬教授出席由中国科学技术大学主办的一流大学建设系列研讨会—2022暨中国大学校长联谊会。参会代表来自…

【SpringCloud】SpringAMQP总结

文章目录 1、AMQP2、基本消息模型队列3、WorkQueue模型4、发布订阅模型5、发布订阅-Fanout Exchange6、发布订阅-DirectExchange7、发布订阅-TopicExchange8、消息转换器 1、AMQP Advanced Message Queuing Protocol&#xff0c;高级消息队列协议。是用于在应用程序之间传递业务…

深入理解设计原则之单一职责原则(SRP)

系列文章目录 C高性能优化编程系列 深入理解设计原则系列 深入理解设计模式系列 高级C并发线程编程 SRP&#xff1a;单一职责原则 系列文章目录1、单一职责原则的定义和解读2、单一职责原则案例解读2.1、违背单一职责原则反面案例2.2、违背单一职责原则反面案例 - 解决方案 3…

《嵌入式存储器架构、电路与应用》----学习记录(三)

第4章 嵌入式内存 4.1 Flash的发展背景 Flash是非易失存储器&#xff0c;具有存储密度高、容错能力强和读写速度相对较慢等特点&#xff0c;传统Flash广泛应用于外部大数据存储。为了满足微控制器芯片(MCU)高速运算的需求&#xff0c;嵌入式Flash(eFlash)往往作为MCU的内部数…

【花雕学AI】ChatGPT的四大语言处理神器:文本生成、问答、创意生成和内容优化的技巧和实例

引言&#xff1a;ChatGPT是一个人工智能聊天机器人&#xff0c;它可以理解和交流多种语言&#xff0c;例如中文、英文、日文、西班牙语、法语、德语等。它是由OpenAI开发的&#xff0c;基于GPT-3.5和GPT-4这两个大型语言模型。它不仅可以与用户进行对话&#xff0c;还可以根据用…

Centos7切换到Alibaba Cloud Linux3

通过控制台自动导入迁移源目前仅支持迁移源的类型为物理机/虚拟机/云服务器和阿里云ECS云服务器&#xff0c;若需要迁移其他类型的迁移源&#xff0c;则可以选择手动导入迁移源。 第一步&#xff0c;登录SMC客户端。 登录网址&#xff1a;阿里云登录 - 欢迎登录阿里云&#x…

MYSQL 8 Too many connections error 还在继续,这对DBA 是不公平的

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

c++11 标准模板(STL)(std::bitset)(二)

定义于头文件 <bitset> template< std::size_t N > class bitset; 类模板 bitset 表示一个 N 位的固定大小序列。可以用标准逻辑运算符操作位集&#xff0c;并将它与字符串和整数相互转换。 bitset 满足可复制构造 (CopyConstructible) 及可复制赋值 (CopyAssig…

qgis二次开发环境搭建(qgis-3.28.6+ubuntu22.04+qt5.15)

背景 一个Ros2项目中用到了qgis&#xff0c;特此整理一下用到的qgis二次开发代码。 linux搭建Debug环境(省事简单apt一把梭) 下载 ubuntu22.04qgis-3.28.6Qt version 5.15.3 编译 参考qgis编译文档 ubuntu22.04 使用上图jammy的安装命令上图中的apt-get安装命令安装的…