国民技术N32WB031驱动HS3003采集温湿度

目的驱动hs3003温湿度计
步骤在原来墨水屏的工程基础上添加hs3003的驱动。新建hs3003.c/hs3003.h,并打hs3003.c加入工程。
我偿试用硬件驱动i2c,但scl即使使用了上位电阻,也不起振,用逻辑分析仪检测如下图:
周转了半天,还得改回来用软件i2c来驱动。hs3003.c驱动程序如下:#include hs3003.h#include software_i2c.h#include log.h#define i2ct_flag_timeout ((uint32_t)0x1000)#define i2ct_long_timeout ((uint32_t)(20 * i2ct_flag_timeout))#define si2c_sda_gpiox gpiob#define si2c_scl_gpiox gpiob#define si2c_sda_pin gpio_pin_8#define si2c_scl_pin gpio_pin_9static si2c_handle si2c_handle;void i2c_master_init(){log_info(\\n this is a software i2c master demo\\r\\n);if(si2c_init(&si2c_handle,si2c_sda_gpiox, si2c_scl_gpiox, si2c_sda_pin, si2c_scl_pin, 5) == false){log_info(software i2c init fail \\r\\n);while(1);}}uint32_t humiture_hs3003_readdata_raw(void ){uint8_t rx_buf[4] = {0};uint16_t humi, temp;float tmp_f = 0.0;float humi_f,temp_f;si2c_masterwrite(&si2c_handle,i2c_slave_addr, null, 0);//8bit->1.2ms//10bit->2.72ms//12bit->9.10ms//14bit->33.90msdelay_ms(40);__retry: si2c_masterread(&si2c_handle, i2c_slave_addr, rx_buf, 4);// log_info(%x,%x,%x,%x\\n, rx_buf[0], rx_buf[1], rx_buf[2], rx_buf[3]);// log_info(state:%x\\n, rx_buf[0] & rm_hs300x_mask_status_0xc0);if ((rx_buf[0] & rm_hs300x_mask_status_0xc0) != rm_hs300x_data_status_valid){delay_ms(100);goto __retry;}humi = (rx_buf[0] & rm_hs300x_mask_humidity_upper_0x3f) << 8 | rx_buf[1];temp = (rx_buf[2] <> 2;humi_f = (float)humi;
humi_f = (humi_f * rm_hs300x_calc_humd_value_100) / rm_hs300x_calc_static_value;
temp_f = (float)temp;temp_f = ((temp_f * rm_hs300x_calc_temp_c_value_165) / rm_hs300x_calc_static_value) - rm_hs300x_calc_temp_c_value_40;log_info(temp:%d.%d ,(int)temp_f,(int)(temp_f*100)%100);log_info(humi:%d.%d\\r\\n,(int)humi_f,(int)(humi_f*100)%100);return 1;
}bool humiture_hs3003_init(void){i2c_master_init();}hs3003.h:#ifndef __hs3003_h__#define __hs3003_h__#include n32wb03x.h#define i2c_master_addr 0x30#define i2c_slave_addr 0x44<<1#define hs300x_humd_multy 0.00006163516#define hs300x_temp_multy 0.00006163516/* definitions of mask data for a/d data */#define rm_hs300x_mask_humidity_upper_0x3f (0x3f)#define rm_hs300x_mask_temperature_lower_0xfc (0xfc)#define rm_hs300x_mask_status_0xc0 (0xc0)/* definitions for status bits of a/d data */#define rm_hs300x_data_status_valid (0x00) // status-bit: valid data/* definitions for calculation */#define rm_hs300x_calc_static_value (16383.0f)#define rm_hs300x_calc_humd_value_100 (100.0f)#define rm_hs300x_calc_temp_c_value_165 (165.0f)#define rm_hs300x_calc_temp_c_value_40 (40.0f)#define rm_hs300x_calc_decimal_value_100 (100.0f)bool humiture_hs3003_init(void);uint32_t humiture_hs3003_readdata_raw(void );#endif7、在主程序中调用一下:
#include main.h#include led.h#include key.h#include log.h#include hs3003.hunsigned char blackimage[4736];//define canvas spaceint main(void){unsigned char fen_l,fen_h,miao_l,miao_h;log_init();humiture_hs3003_init();
humiture_hs3003_readdata_raw();
while (1)
{
humiture_hs3003_readdata_raw();
delay_ms(1000);
}
}实验效果
总结不知道是不是硬件i2c的驱动是不是有问题,反正我的浪费了半天的时间,各种工具用上,最后还是得用软件才搞定。


Windows IIS搭建webdav服务实现公网文件共享内网穿透
阿里巴巴、浙江大学、中国盲文图书馆发起“读光计划”,为视障人群创造数字生存环境
迪士尼打造出玩伴机器人!
如何利用人工智能(AI)保护其数字资产的研究
自研数字底座 保障金融科技自主创新发展
国民技术N32WB031驱动HS3003采集温湿度
Cepton将激光雷达应用于车辆照明系统中
在仓库中如何利用物联网等智能技术
AI拉动PCB,迎来技术能力与需求的同步提升
领略2018年智能家居产业生态 展望2019智能家居大趋势
深度解析工业交换机与工业自动化的紧密关系
小米自主处理器松果会像海思麒麟一样成功吗?
魅族Note5和魅族Note3对比,拍照方面两者都欠佳
新型触摸屏控制器为便携式显示器提供强大的传感功能
Banana Pi BPI-Leaf-S3创客教育板采用乐鑫ESP32-S3方案设计,支持Arduino
中国车联网技术生态平台——智信通集团带来2019行业最新发展趋势
蓝思科技:考虑并购国内外核心技术领先企业
亚马逊云科技:遵循传统还是引领趋势?瑞康医药的上云故事
威兆半导体:预计今年业绩实现翻番
英飞凌首个CoolMOS家族芯片现已开始面向全球发货