Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
【第三期 空气质量分析仪】第1周作业:BSP+LED+KEY+AHT10
发布于 2019-10-12 11:20:16 浏览:1428
订阅该版
因为自己上一个项目接触了一点freeRTOS,对比了几个常用的RTOS,决定先学一下国产的RT-Thread。主要是二个方面考虑:一是所有文档都是中文的,看起来不吃力;二是代码风格是传承于linux,小写字母加下划线,平时自己工作中都是这种风格,大爱。 第一周的任务主要有四个:1:BSP 跑起来 2:实现按键模块 3:实现报警模块 4:实现温湿度传感器驱动 由于自己使用的是潘多拉开发板,MCU是STM32L475,所有以上四个任务实现起来可以说是非常简单。下面是具体的过程: 第一个任务:BSP直接在 t-thread\bsp\stm32\stm32l475-atk-pandora目录下是现成的,在当前目录下进入ENV,执行scons --target=mdk5,生成MDK工程文件后,可以选择用scons命令编译,也可以直接打开生成的工程文件,在MDK中编译。编译完成后,就可以下载到潘多拉开发板上,会看到红色的LED闪烁。至此第一个任务完成。官方BSP的代码如图: ![BSP.jpg](/uploads/201910/12/111308i0b2c6pjn5bqvqq7.jpg) 第二个任务:完成报警模块,就是控制LED的亮灭和闪烁。盘多拉开发板上有一颗三色LED,RGB分别对应PE7,PE8,PE9。根据任用四个接口实现4个功能,初始化,亮,灭,闪烁。代码如下: ```void led_init(void) { rt_pin_mode(LED_RED_PIN, PIN_MODE_OUTPUT); rt_pin_mode(LED_GREEN_PIN,PIN_MODE_OUTPUT); rt_pin_mode(LED_BLUE_PIN, PIN_MODE_OUTPUT); rt_pin_write(LED_RED_PIN, PIN_HIGH); rt_pin_write(LED_GREEN_PIN, PIN_HIGH); rt_pin_write(LED_BLUE_PIN, PIN_HIGH); } void led_on(char colour) { switch(colour) { case RED: rt_pin_write(LED_RED_PIN, PIN_LOW); break; case GREEN: rt_pin_write(LED_GREEN_PIN, PIN_LOW); break; case BLUE: rt_pin_write(LED_BLUE_PIN, PIN_LOW); break; default: break; } } void led_off(char colour) { switch(colour) { case RED: rt_pin_write(LED_RED_PIN, PIN_HIGH); break; case GREEN: rt_pin_write(LED_GREEN_PIN, PIN_HIGH); break; case BLUE: rt_pin_write(LED_BLUE_PIN, PIN_HIGH); break; default: break; } } void led_blink(char colour) { switch(colour) { case RED: rt_pin_write(LED_RED_PIN, PIN_HIGH); rt_thread_mdelay(200); rt_pin_write(LED_RED_PIN, PIN_LOW); rt_thread_mdelay(200); break; case GREEN: rt_pin_write(LED_GREEN_PIN, PIN_HIGH); rt_thread_mdelay(200); rt_pin_write(LED_GREEN_PIN, PIN_LOW); rt_thread_mdelay(200); break; case BLUE: rt_pin_write(LED_BLUE_PIN, PIN_HIGH); rt_thread_mdelay(200); rt_pin_write(LED_BLUE_PIN, PIN_LOW); rt_thread_mdelay(200); break; default: break; } } ```第三个任务:完成按键模块,就是要按键控制LED的亮和灭,按键使用外部中断模式,按下去灯亮,松开灯灭。盘多拉开发板上有三个普通按键,KE0,KEY1,KEY2,对应是PD10,PD9,PD8。根据任务,需要用中断的方式实现。配置三个IO为边沿触发,使用内部上拉可以有效防抖。在回调函数实现三个按键分别控制三个灯。代码如下: ```void key_pin_0_cb(void) { if(rt_pin_read(KEY_PIN_0)) { led_off(RED); } else { led_on(RED); } } void key_pin_1_cb(void) { if(rt_pin_read(KEY_PIN_1)) { led_off(GREEN); } else { led_on(GREEN); } } void key_pin_2_cb(void) { if(rt_pin_read(KEY_PIN_2)) { led_off(BLUE); } else { led_on(BLUE); } } void key_init(void) { rt_pin_mode(KEY_PIN_0, PIN_MODE_INPUT_PULLUP); rt_pin_attach_irq(KEY_PIN_0, PIN_IRQ_MODE_RISING_FALLING, (void(*))key_pin_0_cb, RT_NULL); rt_pin_irq_enable(KEY_PIN_0, PIN_IRQ_ENABLE); rt_pin_mode(KEY_PIN_1, PIN_MODE_INPUT_PULLUP); rt_pin_attach_irq(KEY_PIN_1, PIN_IRQ_MODE_RISING_FALLING, (void(*))key_pin_1_cb, RT_NULL); rt_pin_irq_enable(KEY_PIN_1, PIN_IRQ_ENABLE); rt_pin_mode(KEY_PIN_2, PIN_MODE_INPUT_PULLUP); rt_pin_attach_irq(KEY_PIN_2, PIN_IRQ_MODE_RISING_FALLING, (void(*))key_pin_2_cb, RT_NULL); rt_pin_irq_enable(KEY_PIN_2, PIN_IRQ_ENABLE);```第四个任务:完成温湿度传感器的驱动,把温湿度值通过串口打印。潘多拉开发板上使用的是AHT10传感器,在RTT的官方软件包中已经有这个芯片驱动,所有直接下载对应的包就可以了。软件包的使用方法在ENV的用户手册中有。AHT10的驱动包的目录是:menuconfig-->RT-Thread online packages-->peripheral libraries and drivers-->sensors drivers 下选中保存退出后,要执行pkgs --update命令,软件包才会下载到本地。直接调用初始化接口后,就可以读取到温湿度了: ![AHT10.jpg](/uploads/201910/12/111402a33q2c3w44c4na32.jpg) 至此第一周的任务也算完成了,不过由于BSP和温度驱动都是现成的,所以基本什么都没做,距离下一周任务派发还有5天,因此打算自己重新制作一个BSP,如有空再重新写AHT10驱动。 友情提醒:如果你在下载完AHT10软件包后,编译提示没有找sensor.h文件,根据第二期学员建议是,重新生产工程文件即可,命令是scons --target=mdk5。
查看更多
1
个回答
默认排序
按发布时间排序
撰写答案
登录
注册新账号
关注者
0
被浏览
1.4k
关于作者
xuchengzhu
这家伙很懒,什么也没写!
提问
3
回答
5
被采纳
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
【24嵌入式设计大赛】基于RT-Thread星火一号的智慧家居系统
2
RT-Thread EtherKit开源以太网硬件正式发布
3
如何在master上的BSP中添加配置yml文件
4
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
5
RT-Thread 发布 EtherKit开源以太网硬件!
热门标签
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
MicroPython
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
16
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
5
次点赞
RTT_逍遥
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部