采用核心板控制传感器,实现串口打印数据。
1>stm32f103zet6核心板
2>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
借鉴涂鸦文章,操作差不多,我只是换了引脚,大家可以根据它的来说,非常完整非常详细。
(不太好用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压力传感器