Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
[第3期 空气质量分析仪]第1周作业。
发布于 2019-10-17 20:58:31 浏览:897
订阅该版
硬件:贝一特开发板,板载2个LED、两个按键;使用传感器DHT11; 任务一,制作BSP 这个任务大家都说很简单,我却在这里遇到了问题。现在想想这些问题本本不应该发生的,但是由于自己没有认真理解教程导致自己在一些细节浪费了很多的时间。给大家分享下这些问题,希望读者能够引以为鉴。 问题一、更改芯片型号出现的问题 第一次使用CubeMX按照教程一步一步操作之后,没有GENERTAE CODE,只是保存之后就去编译。这导致工程并没有被更改,只是更改了CubeMX_Config.ioc文件,对其他的文件并没有更改。当时自己根据着自己看文档了解的东西直接去更改Sconsript文件、SConstruct文件,更改后编译始终没有更改成功。知道后面看到scons --dist 相关讨论之后,百度发现工程模板的作用。更改工程模板之后成功更改了芯片型号。回顾怎个过程,自己转了一大圈走了不少弯路才解决了更改芯片型号的问题。想想还是自己太粗心,后仔细阅读BSP教程,发现里面有提到过工程模板的作用。遇到问题仔细分析自己的操作很重要!!! 问题二、串口打印的问题 将建立好的BSP编译之后,烧录到开发板上,连接串口看到LED等闪烁(这里忽略BSP制作过程中工程配置的更改),串口没有任何数据打印。遇到这样的问题,当时就是在想是不是程序中没有配置串口,导致串口并没有使用。仔细阅读教程之后感觉应该是串口的问题。毕竟使用的是开发板上的串口转USB芯片,先检测链接是否有问题。核对原理图之后发现没有问题,将板上链接串口的跳帽拔了,使用外接USB转串口接上之后发现串口数据正常打印出来了。数据能够正常打印出来了,也就表示自己完成了任务一。 任务二:完成报警模块 任务三:完成按键模块 这两个任务的本质就是对PIN设备的使用,做这个的时候按照第一周的任务的要求结合RT-Thread文档中心-设备和驱动-PIN设备完成即可。 注意:有两种方式可以获取引脚编号,选择其中一种即可。 ```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); } ``````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/17/201506qmzivo0o4voovuib.png)
查看更多
3
个回答
默认排序
按发布时间排序
CWXV_4192
2019-10-17
这家伙很懒,什么也没写!
\ | / - RT - Thread Operating System / | \ 4.0.1 build Oct 16 2019 2006 - 2019 Copyright by rt-thread team [I/sensor] rt_sensor init success LED Init! turn on led0! turn on led1! open device failed! msh >turn off led0! turn off led1! led0 blink! temp:27 humi:57 led0 blink! temp:27 humi:57 led0 blink! temp:27 humi:57 led0 blink!
CWXV_4192
2019-10-17
这家伙很懒,什么也没写!
>\ | / >- RT - Thread Operating System > / | \ 4.0.1 build Oct 16 2019 --- 由于图片上传不了,只能将串口打印的数据复制出来了。 :P
撰写答案
登录
注册新账号
关注者
0
被浏览
897
关于作者
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
freemodbus主机在freertos的适配,参考rtthread例程
2
开源共生 商业共赢 | RT-Thread 2024开发者大会议程正式发布!
3
【24嵌入式设计大赛】基于RT-Thread星火一号的智慧家居系统
4
RT-Thread EtherKit开源以太网硬件正式发布
5
还在担心bsp不好维护吗?快使用yml管理主线bsp
热门标签
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
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
a1012112796
20
个答案
3
次被采纳
张世争
12
个答案
3
次被采纳
踩姑娘的小蘑菇
7
个答案
3
次被采纳
用户名由3_15位
13
个答案
2
次被采纳
rv666
9
个答案
2
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
RTT_逍遥
1
篇文章
7
次点赞
大龄码农
1
篇文章
5
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部