Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread Studio
RT-Thread活动
瑞萨_RA6M4
基于RT-Thread+RA6M4的时钟(利用RTT+FSP,一小时就可完成)
发布于 2022-07-31 18:34:09 浏览:887
订阅该版
1. 背景 日本瑞萨的芯片在汽车行业是赫赫有名的存在,不过就像他们的手机的一样,日本厂家就是喜欢搞加拉帕戈斯,像RX,RH850,RL78等都是自己的内核。后面得知瑞萨推出了ARM内核的RA系列,还成为RTT的金牌会员,感觉他们也算开窍了,不过在国产化替代的大环境之下,他们是不是已经错过了机会,就看后面的了。 另一方面,本人现在的办公室上下班都没有时间的提醒,很多时候过了下班时间也不察觉,所以这次就利用FSP+RTT的强大资源来开发一款网络闹钟,在下班时间17:30准时提醒,拒绝996,从准时下班开始! 如标题所示(并非标题党),使用FSP+RTT的强大资源,软件方面只要一个小时就能完成!!! 1. 需要准备的东西 硬件: RA6M4开发板 IIC的OLED屏,驱动ssd1306,0.96寸, ESP-8266 WIFI模块,启明云端S5(立创送的) WCH340,USB转TTL ULN2003,MOTOR输出 软件: FSP 3.5 RT-THREAD STDUIO 1. 硬件框架 ![硬件框架](https://oss-club.rt-thread.org/uploads/20220731/de2c28a65dc4c07bb4462211469b8606.png.webp "硬件框架") 1. 软件开发 当我们利用FSP+RTT开发时,是按照如图的一种开发思路来进行开发的。 我们先要设定使用哪个PIN口,该PIN口要用到的功能,然后设定底层的驱动函数。然后在RTT设定操作系统层面的与底层对接的驱动框架函数,最后才需要写自己需要实现功能的代码。 ![软件开发思路.png](https://oss-club.rt-thread.org/uploads/20220731/88d06f2db8de88a1abcd0a03511def42.png.webp "软件开发思路.png") - (1)调整debug串口到UART3 为什么要把UART改为3呢,官方默认的是UART7,其实对于这个项目来说,改不改都一样,进行这样的更改的原因是:通过这样的操作,了解使用FSP+RTT的资源进行开发的步骤。 步骤: 1.打开FSP V3.5,如图按步骤撤销UART7 pin设置 ![撤销UART7.png](https://oss-club.rt-thread.org/uploads/20220731/7f2b21c063dfa4386f32f70c8d7a8731.png.webp "撤销UART7.png") 2.如图设置UART3的PIN ![设置UART3.png](https://oss-club.rt-thread.org/uploads/20220731/f2ce8810894a59cda25a4fc6ed87df53.png "设置UART3.png") 3.如图设置UART3的底层驱动 ![改前.png](https://oss-club.rt-thread.org/uploads/20220731/b6e29eebb28d3b04da6608815db68658.png "改前.png") ![改后.png](https://oss-club.rt-thread.org/uploads/20220731/e78d9889da50c1691430fcb088232d67.png "改后.png") 然后点击一个生成代码,FSP的操作就完成了 4.设置RTT的驱动框架函数 这方面的教程,网上已经有非常多,这里也按照图片简单的设定一下就好。 ![RTT SETTING.png](https://oss-club.rt-thread.org/uploads/20220731/68591f4b28155ff896f127ffad73e8ee.png.webp "RTT SETTING.png") 5.按照思路来说,这下一步就是写自己的应用代码了,但是,我们debug是使用RTT的FINSH所以,也不需要写应用层的代码,只需要把FINSH的接口调为UART3就行。 ![FINSH UART CHANGE.png](https://oss-club.rt-thread.org/uploads/20220731/43a22cadd7cc1cf814c105809012bd25.png.webp "FINSH UART CHANGE.png") 理论上,已经完成了第一步了。 但是当我们点击编译,会发现RTT的驱动框架函数有个小小的BUG ![屏幕截图.png](https://oss-club.rt-thread.org/uploads/20220731/3e57d78ead7bd4f26f6e1fdd2d3fd4eb.png "屏幕截图.png") 修改后,编译通过。 - (2)搭建ESP-8266的WIFI功能 1.如(1)所示,为ESP-8266设置UART1的底层和操作系统框架层的函数 2.设置RTT的AT框架,来与ESP-8266通信。 这里首先,我的8266是启明云端已经默认烧录了AT固件,所以可以直接使用,大家要确认手上的8266的情况。然后RTT的设定,论坛已经有一篇详细的教程,我就不献丑再狗尾续貂了 [【开发板评测】Renesas RA6M4开发板之ESP8266_AT](https://club.rt-thread.org/ask/article/edc56fabc1418cff.html "【开发板评测】Renesas RA6M4开发板之ESP8266_AT") 至此,开发板已经成功联网。 - (3)RTC时钟设定 1.FSP的设置 ![RTC FSP.png](https://oss-club.rt-thread.org/uploads/20220731/52e4fc16082cfddde4e0b007331b00bf.png.webp "RTC FSP.png") ![RTC FSP2.png](https://oss-club.rt-thread.org/uploads/20220731/7ca49857aa0653b7f583cc5ebb0da493.png.webp "RTC FSP2.png") 其中Name那里设置为g_rtc,去掉0的原因是因为RTT的默认驱动框架函数设计是没有0的,然后回调函数也是基于RTT的框架来定,当然你可以写自己喜欢的函数名,但是RTT的框架也要同步修正。然后,由于我们目标是要闹钟功能的,所以也要开启闹钟的中断优先级。 2.RTT的设置 ![RTT-RTC.png](https://oss-club.rt-thread.org/uploads/20220731/10bed08c22a4b579a7b53af391347e19.png "RTT-RTC.png") ![RTT-NTP.png](https://oss-club.rt-thread.org/uploads/20220731/02221b1ff837d345a8324d2d0cc6e8c8.png "RTT-NTP.png") 至此,一个会连接WIFI自动对时的网络时钟已经是完成了,在进行下一步前,我们可以使用FINSH来进行一些调试来确认现阶段是否有问题 - (4)oled显示 下一步就是怎样把时间显示在oled上。 首先我们是使用软件模拟的IIC,所以FSP方面只需要设定一下,pin为输出就可以。然后在论坛的 帖子[【Renesas RA6M4开发板之I2C驱动ssd1306 OLED屏幕】](https://club.rt-thread.org/ask/article/d90fcf63dc1f5d38.html "【Renesas RA6M4开发板之I2C驱动ssd1306 OLED屏幕】")详细说明了怎样设定oled的驱动。这里就只是补充一下PIN number的设定方法,如下图:在bsp_io.h的头文件里面有写明IO对应的十六进制的number,比起算来说,应该是更加直观吧。 ![io.png](https://oss-club.rt-thread.org/uploads/20220731/f9f211de003f3a5c3f0b5524ae5100dd.png "io.png") 其他显示的应用代码,请参考项目的oled.c。 - (5)闹钟功能 ```c void rtc_callback(rtc_callback_args_t *p_args) { if (RTC_EVENT_ALARM_IRQ == p_args->event) { //当RTC的中断事件是“闹钟”时,就打印一段文字,并把PIN口输出高电平,让电机启动 rt_kprintf("user alarm callback function.\n"); rt_pin_write(PIN_POWEROUT, PIN_HIGH); } } void ra_alarm_set() { //rt_pin_mode(PIN_POWEROUT, PIN_MODE_OUTPUT_OD); rtc_alarm_time_t set_alarm_time= { .time.tm_sec = 1, /* 秒,范围从 0 到 59 */ .time.tm_min = 35, /* 分,范围从 0 到 59 */ .time.tm_hour = 17, /* 小时,范围从 0 到 23*/ //.time.tm_mday = 1, /* 一月中的第几天,范围从 1 到 31*/ //.time.tm_mon = 7, /* 月份,范围从 0 到 11*/ //.time.tm_year = 122, /* 自 1900 起的年数,2021为121*/ //.time.tm_wday = 4, /* 一周中的第几天,范围从 0 到 6*/ //只有秒和分match,意思就是闹钟只是关注分和秒,就是每个小时到了设定的分秒就引用闹钟中断 .sec_match = RT_TRUE, .min_match = RT_TRUE, .hour_match = RT_FALSE, .mday_match = RT_FALSE, .mon_match = RT_FALSE, .year_match = RT_FALSE, .dayofweek_match = RT_FALSE, //只是match秒,就是每分钟都响 }; R_RTC_PeriodicIrqRateSet(&g_rtc_ctrl , RTC_PERIODIC_IRQ_SELECT_1_SECOND ); R_RTC_CalendarAlarmSet(&g_rtc_ctrl, &set_alarm_time); rtc_alarm_time_t get_time; uint8_t rtc_second= 0; //秒 uint8_t rtc_minute =0; //分 uint8_t rtc_hour =0; //时 R_RTC_CalendarAlarmGet(&g_rtc_ctrl, &get_time);//获取RTC计数时间 rtc_second=get_time.time.tm_sec;//秒 rtc_minute=get_time.time.tm_min;//分 rtc_hour=get_time.time.tm_hour;//时 rt_kprintf("%d h %d m %d s\n",rtc_hour,rtc_minute,rtc_second); } ``` 闹钟的功能使用了两个简单的函数实现,这次就仅仅设计成烧录时已经定好闹钟时间,也没有用RTT的alarm框架,单片机当由RTC引发中断时就会自动调用回调函数rtc_callback(); 回调函数里面就只是简单的打印一段文字和启动电机。然后另外在按键的中断回调函数里面关闭电机。 - 总结 就像题目说的那样,只需一小时就能完成。实际上我写这篇帖子的时间远大于项目的时间。这种图形化的软件配置,我觉得可以说是逐渐成为主流,比如FSP+RTT 或者cubeMX+RTT。相比之下,国内的芯片厂家有些还停留在库函数的层面上,甚至只是寄存器层面,我觉得要急起直追了。不过,也有很多在读的学生反而问我,像这种连代码也不用写几句的开发模式,真的没有问题吗。但我觉得,未来来说比起底层的一个个寄存器去了解,更加去把精力放在应用层面的算法研究更加重要吧。而RTT就能很好地应对这些。 代码地址:[代码地址](https://gitee.com/yang-gsb/ra6m4_clock "代码地址") [视频](https://www.bilibili.com/video/BV1UY4y1P7Tv/ "视频")
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
Gisuber_YANG
这家伙很懒,什么也没写!
文章
1
回答
1
被采纳
0
关注TA
发私信
相关文章
1
(苏州站)RT-Thread物联网开发者沙龙【已结束】
2
(成都站)RT-Thread物联网开发者沙龙
3
(深圳站)RT-Thread物联网开发者沙龙
4
(西安站)RT-Thread物联网开发者沙龙
5
成都站2018 RT-Thread开发者沙龙回顾及PPT下载
6
2018 RT-Thread物联网开发者沙龙(北京站)
7
2018 RT-Thread物联网开发者沙龙(南京站)
8
第十三届研电赛RT-Thread企业专项奖发布通知
9
RT-Thread应用作品征集大赛开始啦!
10
你的投票将决定RT-Thread官网应该优先准备的文档是哪些
推荐文章
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组件
热门标签
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
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
10
个答案
1
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
YZRD
2
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部