完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
|
相关推荐
1个回答
|
|
#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; |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1561 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1501 浏览 1 评论
933 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
665 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1555 浏览 2 评论
1847浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
609浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
503浏览 3评论
507浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
488浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 14:55 , Processed in 0.616108 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号