Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
[第3期 空气质量分析仪]第1周作业(重发,增加图片)
发布于 2019-10-18 19:59:54 浏览:708
订阅该版
使用硬件:贝一特开发板(STM32F103ZE) 使用传感器:DHT11 任务一,制作BSP 这个任务大家都说很简单,我却在这里遇到了问题。现在想想这些问题本本不应该发生的,但是由于自己没有认真理解教程导致自己在一些细节浪费了很多的时间。给大家分享下这些问题,希望读者能够引以为鉴。 问题一、更改芯片型号出现的问题 第一次使用CubeMX按照教程一步一步操作之后,没有GENERTAE CODE,只是保存之后就去编译。这导致工程并没有被更改,只是更改了CubeMX_Config.ioc文件,对其他的文件并没有更改。当时自己根据着自己看文档了解的东西直接去更改Sconsript文件、SConstruct文件,更改后编译始终没有更改成功。知道后面看到scons --dist 相关讨论之后,百度发现工程模板的作用。更改工程模板之后成功更改了芯片型号。回顾怎个过程,自己转了一大圈走了不少弯路才解决了更改芯片型号的问题。想想还是自己太粗心,后仔细阅读BSP教程,发现里面有提到过工程模板的作用。遇到问题仔细分析自己的操作很重要!!! 问题二、串口打印的问题 将建立好的BSP编译之后,烧录到开发板上,连接串口看到LED等闪烁(这里忽略BSP制作过程中工程配置的更改),串口没有任何数据打印。遇到这样的问题,当时就是在想是不是程序中没有配置串口,导致串口并没有使用。仔细阅读教程之后感觉应该是串口的问题。毕竟使用的是开发板上的串口转USB芯片,先检测链接是否有问题。核对原理图之后发现没有问题,将板上链接串口的跳帽拔了,使用外接USB转串口接上之后发现串口数据正常打印出来了。数据能够正常打印出来了,也就表示自己完成了任务一。 任务二:完成报警模块 任务三:完成按键模块 这两个任务的本质就是对PIN设备的使用,做这个的时候按照第一周的任务的要求结合RT-Thread文档中心-设备和驱动-PIN设备完成即可。 注意:有两种方式可以获取引脚编号,选择其中一种即可。 ```#define LED0_PIN GET_PIN(D, 13) #define LED1_PIN GET_PIN(G, 14) void led_init(void) { rt_pin_mode(LED0_PIN,PIN_MODE_OUTPUT); //LED0 rt_pin_mode(LED1_PIN,PIN_MODE_OUTPUT); //LED1 rt_pin_write(LED0_PIN, PIN_LOW); rt_pin_write(LED1_PIN, PIN_LOW); rt_kprintf("LED Init!
"); } void led0_on(void) { rt_pin_write(LED0_PIN, PIN_HIGH); rt_kprintf("turn on led0!
"); } void led1_on(void) { rt_pin_write(LED1_PIN, PIN_HIGH); rt_kprintf("turn on led1!
"); } void led0_off(void ) { rt_pin_write(LED0_PIN, PIN_LOW); rt_kprintf("turn off led0!
"); } void led1_off(void ) { rt_pin_write(LED1_PIN, PIN_LOW); rt_kprintf("turn off led1!
"); } void led0_blink(void ) { rt_pin_write(LED0_PIN, PIN_HIGH); rt_thread_mdelay(200); rt_pin_write(LED0_PIN, PIN_LOW); rt_thread_mdelay(200); rt_kprintf("led0 blink!
"); } void led1_blink(void) { rt_pin_write(LED1_PIN, PIN_HIGH); rt_thread_mdelay(200); rt_pin_write(LED1_PIN, PIN_LOW); rt_thread_mdelay(200); rt_kprintf("led1 blink!
"); } ``````#define KEY1_PIN GET_PIN(E, 0) #define KEY2_PIN GET_PIN(C, 13) void key1_pin_cb(void) { if(rt_pin_read(KEY1_PIN)) { led0_off(); } else { led0_on(); } } void key2_pin_cb(void) { // static rt_uint8_t delay_on_time = 0; // static rt_uint8_t delay_off_time = 0; if(rt_pin_read(KEY2_PIN)) { led1_off(); } else { led1_on(); } } void key_init(void) { rt_pin_mode(KEY1_PIN, PIN_MODE_INPUT_PULLUP); rt_pin_attach_irq(KEY1_PIN, PIN_IRQ_MODE_RISING_FALLING, (void(*))key1_pin_cb, RT_NULL); rt_pin_irq_enable(KEY1_PIN, PIN_IRQ_ENABLE); rt_pin_mode(KEY2_PIN, PIN_MODE_INPUT_PULLUP); rt_pin_attach_irq(KEY2_PIN, PIN_IRQ_MODE_RISING_FALLING, (void(*))key2_pin_cb, RT_NULL); rt_pin_irq_enable(KEY2_PIN, PIN_IRQ_ENABLE); } ``````#define DHT11_DATA_PIN GET_PIN(B, 12) rt_device_t dev = RT_NULL; struct rt_sensor_data temp_dht11_data; rt_size_t res; rt_uint8_t get_data_freq = 1; /* 1Hz */ rt_uint8_t dht11_hw_init(void) { dev = rt_device_find("temp_dht11"); if (dev == RT_NULL) { return RT_ERROR; } if (rt_device_open(dev, RT_DEVICE_FLAG_RDWR) != RT_EOK) { rt_kprintf("open device failed!
"); return RT_ERROR; } rt_device_control(dev, RT_SENSOR_CTRL_SET_ODR, (void *)(&get_data_freq)); return RT_EOK; } rt_uint8_t dht11_read_temp(void) { uint8_t temp = 0; res = rt_device_read(dev, 0, &temp_dht11_data, 1); if (res != 1) { rt_kprintf("read data failed! result is %d
", res); rt_device_close(dev); return RT_NULL; } else { if (temp_dht11_data.data.temp >= 0) { temp = (temp_dht11_data.data.temp & 0xffff) >> 0; // get temp rt_kprintf("temp:%d ", temp); } } return temp; } rt_uint8_t dht11_read_humi(void) { uint8_t humi = 0; res = rt_device_read(dev, 0, &temp_dht11_data, 1); if (res != 1) { rt_kprintf("read data failed! result is %d
", res); rt_device_close(dev); return RT_NULL; } else { if (temp_dht11_data.data.temp >= 0) { humi = (temp_dht11_data.data.temp & 0xffff0000) >> 16; // get humi rt_kprintf("humi:%d
" ,humi); } } return humi; }``` ```int main(void) { int count = 1; // /* set LED0 pin mode to output */ // rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT); // /* set LED1 pin mode to output */ // rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT); led_init(); key_init(); dht11_hw_init(); led0_on(); led1_on(); rt_thread_mdelay(500); led0_off(); led1_off(); while (count++) { led0_blink(); rt_pin_write(LED0_PIN, PIN_HIGH); rt_thread_mdelay(500); rt_pin_write(LED0_PIN, PIN_LOW); rt_thread_mdelay(500); dht11_read_temp(); dht11_read_humi(); // rt_thread_mdelay(500); } return RT_EOK; }``` 任务四、完成温湿度传感器的驱动 使用的温湿度传感器为dht11,这个传感器在网上能够找到很多的资料。使用Evn中menuconfig配置工程能够找到相应的软件包,安转软件包之后编译,打开工程,编写驱动文件。刚开始还不知道应该如何编写却动文件,后面看了文档中心-设备和驱动-SENSOR才明白过来。按照之前写裸机程序的经验编写驱动,驱动写好后需要在main 函数中调用才能够正常运行哦!第一次测试时,我竟然都没有在main函数中调用就烧录到板上,接上传感器之后没有现象。纳闷了会才发现自己都没有调用。真是的,调用后终于在看到了打印出来的温湿度数据。 数据打印出来了,任务基本上就完成了。看着打印出来的数据,发现每次重启之后打印出来的前两个数据都为0,这两个数据明显是无效的。那么就应该将这两个数据舍弃,增加一个延时就能够将这两个数据舍弃掉,至于延时都长时间,读者们若是遇到同样的问题可以试试。 总结第一周学习过程:通过这一周的学习,掌握了Env常用功能的使用,BSP的建立、PIN设备的使用、传感器设备的使用,对RT-Thread的了解更深入了。之前只是停留在阅读层面,现在开始实践,发现之前看懂了的还有很多的不懂地方,自己的C语言还有很大的提升空间。 最后感谢学习营的朋友们的帮助,希望大家能够一起坚持学习下去! 实验现象: ![123.png](/uploads/201910/18/195605phkzh9kvvhn03kpu.png) LED开启时串口打印数据,通过串口打印即可看出现象。
查看更多
0
个回答
默认排序
按发布时间排序
暂无答案,快来添加答案吧
撰写答案
登录
注册新账号
关注者
0
被浏览
708
关于作者
CWXV_4192
这家伙很懒,什么也没写!
提问
8
回答
4
被采纳
0
关注TA
发私信
相关问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
7
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
3
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部