基于STM32F103ZET6核心板控制HX711(称重传感器带屏蔽)

目的:

使用核心板控制传感器,实现串口打印数据。

硬件要求:

1>stm32f103zet6核心板

 

2>HX711(带屏蔽)

HX711有好几款板子,我这里使用的是带屏蔽的板子,只要知道引脚的功能什么板子都是一样的。

HX711原理图:

管脚描述
VCC 电源正极(2.6V~5.5V稳压电路)
GND 接地
DO/RX

数字输出,串口数据输出

(个人理解RX应该是核心板上的脚为RX接收脚)

CK/TX 数字输入 断电控制(高电平有效)和串口时钟输入
A+ 模拟输入 通道 A 正输入端
A- 模拟输入 通道 A 负输入端
B+ 模拟输入 通道 B 正输入端
B- 模拟输入 通道 B 负输入端
out+

模拟电源: 2.6 ~ 5.5V

注:以上为个人理解,根据海芯的对应的,如有错误,敬请指正。(还是个大菜鸟)

硬件连接:

HX711引脚 核心板引脚
VCC 5V
DO/RX PB1
CK/TX PB2
GND GND

软件: 

1>STM32CubMX

2>keil5

软件配置:

借鉴涂鸦的文章,操作大似相同,我只是换了引脚,大家可以根据它的来,很全很详细。

 

keil5配置(还不太会使用csdn的代码段,我把加的代码移了一点位置表示了,代码也采用了涂鸦博主的,只有引脚处做了稍微的修改)

main.c文件中加

/* USER CODE BEGIN Includes */
              #include "stdio.h"
/* USER CODE END Includes */
              uint32_t ReadCount(void);

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE BEGIN PV */
            #define BUFFERSIZE 255           //可以接收的最大字符个数       
            uint8_t ReceiveBuff[BUFFERSIZE]; //接收缓冲区
            uint8_t recv_end_flag = 0,Rx_len;//接收完成中断标志,接收到字符长度

/* USER CODE END PV */
            uint32_t weight_qupi=0;
            uint32_t weight_shiji=0;
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */
            #ifdef __GNUC__						//串口重定向,因为要使用print函数
            #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
            #else
            #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
            #endif 
            PUTCHAR_PROTOTYPE
            {
                    HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);
                    return ch;
            }
/* USER CODE END PFP */
                  printf("压力传感器HX711\r\n");
                  weight_qupi=ReadCount();//首次读取重量进行去皮操作
                  printf("首次去皮weight_qupi=%d\n",weight_qupi);
	               HAL_Delay(100);
  /* USER CODE END 2 */

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

    /* USER CODE BEGIN 3 */
		        weight_shiji=ReadCount();
		        if(weight_qupi>=weight_shiji)
		        {
			        weight_shiji=weight_qupi-weight_shiji;
			        weight_shiji=weight_shiji/100;
			        printf("重量为:%dg\r\n",weight_shiji);
		        }
		        else
		        {
			        weight_shiji=weight_shiji-weight_qupi;
			        weight_shiji=weight_shiji/100;
			        printf("重量为:-%dg\r\n",weight_shiji);
		        }	
		        HAL_Delay(1000);

  }

 

/* USER CODE BEGIN 4 */
uint32_t ReadCount(void)
{
	uint32_t Count=0;
	uint8_t i;
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,GPIO_PIN_RESET);
	while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1));               //AD转换未结束则等待,否则开始读取
	for (i=0;i<24;i++)
	{
		 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,GPIO_PIN_SET);
		 Count=Count<<1;                                      //下降沿来时变量Count左移一位,右侧补零
		 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,GPIO_PIN_RESET);
		 if(HAL_GPIO_ReadPin(DO_GPIO_Port,DO_Pin)) Count++;
	}
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,GPIO_PIN_SET);
 Count=Count^0x800000;                                    //第25个脉冲下降沿来时,转换数据
 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,GPIO_PIN_RESET);
 return(Count);
}

/* USER CODE END 4 */

结果图:

 

 借鉴文章链接:

涂鸦模组开发(压力传感器HX711)——2. 压力传感器HX711_记帖的博客-CSDN博客_hx711压力传感器

 

物联沃分享整理
物联沃-IOTWORD物联网 » 基于STM32F103ZET6核心板控制HX711(称重传感器带屏蔽)

发表评论