Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
内核学习营
【内核学习营】+青春+使用RTC做的简单设定时间和定时实验
发布于 2018-09-11 20:45:31 浏览:2355
订阅该版
[tocm] ## 实验要求 使用野火或正点原子M3、M4或M7开发板rtc。 硬件上:至少有一路 GPIO 能够用来输出控制 蜂鸣器; 至少有一路 GPIO 作为按键输入检测端口; 有一路串口用来做 msh shell 终端; 软件上:串口驱动; PIN 驱动; RTC驱动。 ## 准备工作 根据硬件连接情况配置与BEEP和KEY1连接的PIN号。 - 硬件准备:正点原子stm32f407探索者开发板; - 软件准备:rtt3.0.3、stm32f4xx-HAL BSP、env0.7.1。 ## 实例代码 ### 一、测试代码: ```c #include
#include
#define BEEP 20 //蜂鸣器引脚 #define KEY1 34 //定义按键输入引脚号 #define BEEP_ON(x) rt_pin_write(x ,1) #define BEEP_OFF(x) rt_pin_write(x ,0) #define ALARM_NUM_MAX 10 struct rt_alarm *ALARM[ALARM_NUM_MAX]; void alarm_callback_entry(rt_alarm_t alarm, time_t timestamp) { /* 打开蜂鸣器 */ BEEP_ON(BEEP); rt_kprintf("Time out!
"); } void alarm_test_entry(void* parameter) { while(1) { if(rt_pin_read(KEY1)==1) { BEEP_OFF(BEEP); } rt_thread_delay(20); } } int alarm_init(void) { rt_thread_t tid; /* 初始化按键输入 */ rt_pin_mode(KEY1, PIN_MODE_INPUT); /* 将蜂鸣器控制脚设置为输出模式 */ rt_pin_mode(BEEP, PIN_MODE_OUTPUT); /* 蜂鸣器默认不响 */ BEEP_OFF(BEEP); rt_memset(&ALARM, NULL, sizeof(ALARM)); tid = rt_thread_create("alarm_test", alarm_test_entry, RT_NULL, 512, RT_THREAD_PRIORITY_MAX/3, 20); if (tid != RT_NULL) rt_thread_startup(tid); /* 初始化闹钟服务 */ rt_alarm_system_init(); return 0; } //INIT_APP_EXPORT(alarm_init); void alarm_add(int argc, char **argv) { struct rt_alarm_setup _alarm; if(argc > 1) { _alarm.flag = RT_ALARM_ONESHOT; /* 单次定时 */ rt_memset(&_alarm.wktime, RT_ALARM_TM_NOW, sizeof(struct tm)); _alarm.wktime.tm_hour = atol(argv[1]); if(argc > 2) { _alarm.wktime.tm_min = atol(argv[2]); _alarm.wktime.tm_sec = 0; } if(ALARM[0] == NULL) { ALARM[0] = rt_alarm_create(alarm_callback_entry, &_alarm); } else { rt_alarm_control(ALARM[0], RT_ALARM_CTRL_MODIFY, &_alarm); } rt_alarm_start(ALARM[0]); } } MSH_CMD_EXPORT(alarm_add, e.g: alarm_add 12 15); /* 定时时间为12:15 */ ``` ### 二、主函数代码 ```c #include
#include
extern rt_err_t set_date(rt_uint32_t year, rt_uint32_t month, rt_uint32_t day); extern rt_err_t set_time(rt_uint32_t hour, rt_uint32_t minute, rt_uint32_t second); extern int alarm_init(void); int main(void) { /* user app entry */ /* 设置当前时间 */ set_date(2018,9,11); set_time(16,26,00); alarm_init(); return 0; } ``` ## 实验步骤 使用ENV配置串口和PIN驱动,拷贝drv_rtc驱动,添加alarm.c文件。然后添加rtc_alarm.c文件到工程,在主函数中设置时间并且运行闹钟初始化函数,根据自己的板子修改相应代码编译无错后下载到开发板。 ## 结果 通过向控制台发送alarm_add 16 28设置闹钟时间,闹钟时间到,蜂鸣器响,串口打印如下信息。按下KEY1键关闭蜂鸣器。 ![DFTRRT0EKPUB8IR84GCH.png](https://oss-club.rt-thread.org/uploads/201809/11/205139rez2cpw2y7tpc2tp.png) ## 遇到的问题 程序下载后,发送命令后,等设定时间到,蜂鸣器不响。 ## 解决方法 没有设置初始时间,在主函数中设定当前时间后,再操作即可。 下载附件 [drv_rtc.h](https://oss-club.rt-thread.org/uploads/201809/11/205934ludgsgig4uj4e4oy.attach) [drv_rtc.c](https://oss-club.rt-thread.org/uploads/201809/11/205934qcyciokz5yih9tiw.attach) [alarm.c](https://oss-club.rt-thread.org/uploads/201809/11/210042tif6lc0wihc05l5l.attach)
查看更多
1
个回答
默认排序
按发布时间排序
SayHello
2023-08-10
这家伙很懒,什么也没写!
没有网易企业邮箱,有别的下载链接吗
撰写答案
登录
注册新账号
关注者
0
被浏览
2.4k
关于作者
青春JY
这家伙很懒,什么也没写!
提问
8
回答
0
被采纳
0
关注TA
发私信
相关问题
1
【内核学习】rtthread内核移植记录-STM32F103ZET6-HAL库
2
《内核学习营》+水一方+自用STM32F103VC 板RT-Thread内核移植分享
3
《内核学习营》+水一方+项目中创建标准的 RT-Thread工程
4
内核学习营+坦然+探索者stm32f407板子RT-thread循环点亮led灯
5
<内核学习营>+坦然+探索者stm32f407板子RT-thread串口字符点灯
6
<内核学习营>+坦然+探索者stm32f407板子RT-thread的pwm点灯实验
7
<内核学习营>+坦然+探索者stm32f407板子RT-thread串口实验
8
<内核学习营>+坦然+野火stm32f103板子RT-thread读写SD卡实验
9
<内核学习营>+坦然+探索者stm32f407板子RT-thread的RTC闹钟实验
10
【内核学习营】+王秀峰+led_rgb
推荐文章
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
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部