#define HX711_DATA PEin(0)
#define HX711_SCK PEout(1)
void HX711_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_SetBits(GPIOE, GPIO_Pin_1);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE, &GPIO_InitStructure);
}
uint8_t HX711_GetValue(uint32_t *value)
{
int retry = 0;
uint32_t ret = 0;
HX711_SCK = 0;
while (retry < 200)
{
delay_us(1);
if (HX711_DATA == 0)
break;
else
retry++;
}
if (retry == 200) return 1;
for (int i = 0; i < 24; i++)
{
HX711_SCK = 1;
delay_us(1);
ret = ret << 1;
HX711_SCK = 0;
ret |= HX711_DATA;
delay_us(1);
}
HX711_SCK = 1;
delay_us(1);
*value = ret ^ 0x800000;
//*value = ret;
HX711_SCK = 0;
delay_us(1);
return 0;
}
int main(void)
{
u16 t;
u16 len;
u16 times = 0;
uint32_t value = 0;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为115200
LED_Init(); //LED端口初始化
KEY_Init(); //初始化与按键连接的硬件接口
HX711_init();
HX711_GetValue(&value);
printf("0x%xrn", value);
delay_ms(500);
HX711_GetValue(&value);
printf("0x%xrn", value);
delay_ms(500);
HX711_GetValue(&value);
printf("0x%xrn", value);
delay_ms(500);
HX711_GetValue(&value);
printf("0x%xrn", value);
delay_ms(500);
HX711_GetValue(&value);
printf("0x%xrn", value);
delay_ms(500);
uint32_t zero = value;
printf("0x%xrn", value);
while (1)
{
if (HX711_GetValue(&value) == 0)
{
printf("0x%xt%drn", value, value - zero);
if (value < zero) value = zero;
uint32_t weight = (value - zero) / 430;
weight = weight / 0.89;
printf("%dtrn", weight);
}
else
{
printf("read errorrn");
}
delay_ms(1000);
}
}
代码中的*value = ret^0x800000;相当于把传感器读到的值加了0x800000,即原来的差分读出来假设是-2.5V ~ +2.5V,现在变成了0V ~ 5V,转换成了无符号数更加好计算。
测量出来的重量uint32_t weight = (value - zero) / 430;,由于应变片工艺问题,可能其值并不等效于,最终通过砝码标定,得出重量:weight = weight / 0.89;
上一篇:LAN8720A移植笔记
下一篇:stm32仿真设置
设计资源 培训 开发板 精华推荐
- LTC3630AEMSE 4V 至 63V 输入至 -12V 输出、正负转换器的典型应用电路
- LT1615 的典型应用 - ThinSOT 中的微功率升压型 DC/DC 转换器
- 使用 LTC4162IUFD-LAD 1-8 节、3.2A 降压型开关电池充电器和 PowerPath 的典型应用
- 使用 Semtech 的 SC1406G 的参考设计
- 黄淮学院立创杯电子科技大赛-王梦珂-1003560A
- 用于电源管理的微处理器电源监控
- LT3663IDCB、1.2V 降压转换器的典型应用
- 【已验证】造价低廉、复刻简单的焊烟风扇
- AD8316-EVAL,AD8316 评估板,0.1GHz 至 2.5GHz,70dB 对数检波器/控制器
- 使用 ON Semiconductor 的 LV5762LF 的参考设计