芯片解密STM32与HX711作200KG电子秤源码
芯片解密STM32单片机源程序如下:
- 芯片解密//传感器用的是8Kg 2.0mV/V的如果其它规格,更改转换公式即可。
- 芯片解密//检测参数通过串口发送的电脑。
- 芯片解密//可以做程序在电脑上直接显示。
- //串口选用USART1
- //PB11接HX711数据口浮空输入
- //PB12接HX711CLK
- //PA11为测试程序时用过的。可删除
- //HX711输入电子称电压调称为22K 10K 调压为4V输出
- //输出结果最后一位为0.1g
- //我们的传感器50kg,灵敏度1mv/v
- //HX711模块R1=20k欧,R2=8.2k欧,所以HX711给传感器供电电压为(20+8.2)/8.2*1.25=4.3V,注意万用表测得会比这个值低,模块为了降低功耗只在采样时会用到4.3输出电压
- /*Include---------------------------*/
- #include <stm32f10x.h> //包含所有的头文件
- #include <stdio.h>
- #include "sys.h"
- #include "usart.h"
- #include "lcd.h"
- //#include "adc.h"
- //#include "led.h"
- //#include "delay.h"
- //----------------函数声明--------------------
- void Delay_MS(u16 dly);
- void delay_us(u16 dly1);
- void RCC_Configuration(void);
- void GPIO_Configuration(void);
- unsigned long Read_HX711(void);
- void USART_Configuration(void);
- int fputc(int ch,FILE *f);
- int GetKey (void);
- long double filter(void);
- USART_InitTypeDef USART_InitStructure;
- ErrorStatus HSEStartUpStatus;
- //void u32tostr(unsigned long dat,char *str) ;
- /*******************************************************************************
- * Function Name : main
- * Description : Main program.
- * Input : None
- * Output : None
- * Return : None
- *******************************************************************************/
- int main(void)
- {
- u32 adcx;
- float weight;
-
- #ifdef DEBUG
- debug();
- #endif //执行主函数之前的调试函数,不影响最终的release版
- //------------初始化------------下面三个初始化
- delay_init();
- LCD_Init();
- RCC_Configuration();//RCC指时钟控制预分频器
- GPIO_Configuration();//初始化GPIO口状态
- USART_Configuration( ); //初始化串口配置
-
- //uart_init(9600); //串口初始化为9600
-
- POINT_COLOR=RED;//设置字体为红色
- LCD_ShowString(60,50,200,16,16,"Mini STM32");
- LCD_ShowString(60,70,200,16,16,"WEIGHT SCALE");
- LCD_ShowString(60,90,200,16,16,"ZHILV@EIGER");
- LCD_ShowString(60,110,200,16,16,"2017/11/25");
- POINT_COLOR=BLUE;//设置字体为蓝色
- LCD_ShowString(60,130,200,16,16,"ADC_CH1_VAL:");
- LCD_ShowString(60,150,200,16,16,"ADC_CH1_WEI:000.000kg");
-
- while(1) //恒运行下面的程序
- {
- Delay_MS(1000);//延时1s,可能是为了等读数稳定(这个延时是为了稳定,也可以留时间滤波)
-
- adcx=filter();//adcx值由这个子函数读出,这个数需要由下面两句转kg值
- adcx=8388608-adcx;
- LCD_ShowxNum(156,130,adcx,8,16,0);//显示ADC转换后的24位二进制数转十进制数值
-
- adcx=adcx/100;//为节省运算量,将AD值固定缩小100倍
- weight=(float)adcx/429.496+0.005; //实际用的时候需要调试,429.496由于传感器差异这个系数一般在400到500之间,加0.005是为了四舍五入
- adcx=weight;
- LCD_ShowxNum(156,150,adcx,3,16,0);//显示重量值整数部分
-
- weight-=adcx;
- weight*=1000;
- LCD_ShowxNum(188,150,weight,3,16,0X80);//显示重量值小数部分
-
-
- //GPIO_SetBits(GPIOA,GPIO_Pin_11); //没看懂,大概是对PA11进行设置,但不清楚作什么设置 从后面推敲应该set置1,reset置0
- //printf("%d\n",weight); //打印weight值,串口调试用的
- }
- }

芯片解密