完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
PMS 传感器与 MCU 的电路连接示意图如下:
目前使用仅用到RXD、TXD、VCC、GND 软件包使用 PMS5003ST为增强型传感器,软件包配置需要配置为增强型 1.RT-Thread Setting中添加pmsxx软件包 2.组件配置中使能串口DMA模式 3.修改board.h宏,添加相关串口的宏定义 BSP_USING_UARTx 及修改引脚信息,并开启DMA接收功能 4.修改rtconfig.h宏,修改传感器相关的宏定义 PKG_USING_PMSXX_UART_DMA(开启DMA接收)及PKG_USING_PMSXX_ENHANCED(增强型传感器) 以上软件包配置完成。 打开软件包文件夹可见示例代码: 官方示例程序 #include "my_pmsxx.h" /* * Copyright (c) 2020, RudyLo * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2020-07-04 luhuadong the first version */ #ifndef PKG_USING_PMSXX_SAMPLE_UART #define PMSXX_UART_NAME "uart3" #else #define PMSXX_UART_NAME PKG_USING_PMSXX_SAMPLE_UART #endif static void read_dust_entry(void *args) { rt_device_t sensor = RT_NULL; struct rt_sensor_data sensor_data; sensor = rt_device_find(args); if (!sensor) { rt_kprintf("Can't find PMS device.n"); return; } if (rt_device_open(sensor, RT_DEVICE_FLAG_RDWR)) { rt_kprintf("Open PMS device failed.n"); return; } rt_uint16_t loop = 10; while (loop--) { if (1 != rt_device_read(sensor, 0, &sensor_data, 1)) { rt_kprintf("Read PMS data failed.n"); continue; } rt_kprintf("[%d] PM2.5: %d ug/m3n", sensor_data.timestamp, sensor_data.data.dust); rt_thread_mdelay(3000); } rt_device_close(sensor); } static void dump_dust_entry(void *args) { rt_device_t sensor = RT_NULL; struct rt_sensor_data sensor_data; struct pms_response resp; rt_err_t ret; sensor = rt_device_find(args); if (!sensor) { rt_kprintf("Can't find PMS device.n"); return; } if (rt_device_open(sensor, RT_DEVICE_FLAG_RDWR)) { rt_kprintf("Open PMS device failed.n"); return; } rt_uint16_t loop = 10; while (loop--) { ret = rt_device_control(sensor, RT_SENSOR_CTRL_PMS_DUMP, &resp); if (ret != RT_EOK) rt_kprintf("Dump PMS data failed.n"); else pms_show_response(&resp); rt_thread_mdelay(3000); } rt_device_close(sensor); } static int pms_read_sample(void) { rt_thread_t dust_thread; dust_thread = rt_thread_create("pms_read", read_dust_entry, "dust_pms", 1024, RT_THREAD_PRIORITY_MAX / 2, 20); if (dust_thread) rt_thread_startup(dust_thread); } static int pms_dump_sample(void) { rt_thread_t dust_thread; dust_thread = rt_thread_create("pms_dump", dump_dust_entry, "dust_pms", 1024, RT_THREAD_PRIORITY_MAX / 2, 20); if (dust_thread) rt_thread_startup(dust_thread); } #ifdef FINSH_USING_MSH MSH_CMD_EXPORT(pms_dump_sample, dump pms response data); MSH_CMD_EXPORT(pms_read_sample, read PM2.5 data); #endif static int rt_hw_pms_port(void) { struct rt_sensor_config cfg; cfg.intf.type = RT_SENSOR_INTF_UART; cfg.intf.dev_name = PMSXX_UART_NAME; rt_hw_pms_init("pms", &cfg); return RT_EOK; } INIT_COMPONENT_EXPORT(rt_hw_pms_port); 测试结果 |
|
|
|
只有小组成员才能发言,加入小组>>
3188 浏览 9 评论
2878 浏览 16 评论
3381 浏览 1 评论
8813 浏览 16 评论
3979 浏览 18 评论
9611浏览 3评论
981浏览 3评论
502浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
505浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2227浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-20 16:45 , Processed in 1.124418 second(s), Total 47, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号