Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
【第三期 空气质量分析仪】第1周作业:BSP+LED+KEY+AHT10
发布于 2019-10-12 11:20:16 浏览:1447
订阅该版
因为自己上一个项目接触了一点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
【RT-Thread】【ci】【scons】将ci.attachconfig.yml和scons结合使用
2
Rt-thread中OTA下载后,bootloader不搬程序
3
ulog 日志 LOG_HEX 输出时间改为本地日期时间
4
在RT-Thread Studio中构建前执行python命令
5
研究一了一段时间RTT,直接标准版上手太难,想用nano,但又舍不得组件
热门标签
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
I2C_IIC
ESP8266
UART
WIZnet_W5500
ota在线升级
cubemx
PWM
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
SFUD
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
出出啊
1518
个答案
343
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
813
个答案
177
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
5
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
3
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部