【N32G457】基于RT-Thread和N32G457的高阶魔方

国民技术N32G457移植usart设备 前言 接着上篇《国民技术N32G457移植pin设备》的RT-Thread工程移植usart设备驱动。 一、添加文件到工程中 1、添加dev_usart.c到工程中 二、修改源文件 1、修改rtconfig.c文件 2、修改所需要包含的文件 3、修改预编译代码 4、修改串口结构体 5、将这些标号改成从1开始的序号,因为N32G457芯片串口是从1开始,USART1,USART2,USART3,UART4,UART5。 6、这个结构体的串口编号也是要更改,这个适用于初始化串口结构体的。 7、修 阅读详情

在这里插入图片描述本文是RT-Thread用户@tobot原创发布,是用于参加RT-Thread与国民技术联手推出N32G457 RT-Thread设计大赛,原文:https://club.rt-thread.org/ask/article/3543.html

【N32G457】基于RT-Thread和N32G457的高阶魔方
一、应用背景
魔方,又叫鲁比克方块(Rubik’s Cube),是匈牙利布达佩斯建筑学院厄尔诺·鲁比克教授发明的机械益智玩具,由若干个积木块组成,积木块之间通过卡榫契合,能做到“组”的相对位置改变,从而构成各种形状的花纹,基本的玩法就是通过旋转,打散各面色块后用最快速度还原。魔方的设计初衷是用来认识空间组成和结构的教具,后来成为风靡全球的玩具,形状从原始的正方体发展出球型、钻石型、粽子型等异形,阶数从最早的三阶扩充到三十阶以上。
图片1.png
图一、形态各异的魔方
魔方竞赛也成为国际比赛项目,通过世界魔方协会比赛的认证成绩甚至可以记载入世界纪录当中。
图片2.png
图二、世界魔方协会(WCA)
传统魔方采用物理结构契合,高阶魔方使用时旋转次数多,要求速度快、精度高,很容易磨损导致性能下降无法使用(我自己就有一天玩坏一个高阶魔方的经历)。基于此,试图将魔方功能“电子”化,减少机械磨损。
二、实现功能
本设计分为两个部分:电子魔方和GUI。
电子魔方基于RT-Thread开发,使用N32G457驱动WS2812板,通过点亮WS2812灯珠,实现魔方转动效果。本次开发所用WS2812板为8*8的板卡,共用了5块,搭成正方体形状(留出底面),共计320颗灯珠,用于模拟一个8阶魔方。
图片3.png
图三、机械版8阶魔方和电子版8阶魔方
GUI为纯软件开发,在电脑上运行,可以通过鼠标或键盘操作,实现魔方的转动。为配合电子魔方,设计了界面,8阶魔方共有24个方向可转动(反向可以通过旋转3次实现),设计24个按钮,由于高阶魔方还原难度较高,因此还预留了“一键还原”功能。
图片4.png
图四、GUI

三、开发板和RT-Thread使用情况概述
使用N32G45XVL-STB开发板,该开发板MCU芯片型号为国民技术的N32G457VEL7,LQFP100管脚封装,板卡把所有GPIO都引出连接到J1,J2和J12插针上,非常便于开发和调试,但在本项目中,仅使用了PA7(SPI0的MOSI接口)。
图片5.png
图五、N32G45XVL-STB开发板
安装的RT-Thread Studio,版本: 2.1.5(构建ID: 202201191915),其上已经自带了RT-Thread模块,直接从SDK中拖取了Nations的n32g45xvl-stb板,并使能了其SPI功能,所用SPI为SPI0。
用于呈现的WS2812,采用购买的88模块成品,自己拼装成立方体,考虑到底面没有人会去看,因此直接空出来。
WS2812的实现原理比较简单,就是通过输入特定长度的高低电平,驱动若干颗灯珠,每个颜色比特传输数据需要1.25us,可以略微超频(甚至有的datasheet中表示可以超频600ns,实测做不到的),在本项目中,采用的是SPI驱动,将其设置为1.2us/颜色比特使用,分别通过SPI传输ffc0、f000作为其0、1码表示。
图片6.png
图六、WS2812的datasheet
四、硬件框架
其硬件结构非常简单,采用5块8
8的WS2812灯板串接作为输出,将其搭建成立体形状,串接各面的板和板之间串接顺序为顶、前、右、后、左,在平面展开图中,每块灯板上的灯珠的顺序为从左到右,从上到下依次递增,共320颗,在最初设计和调试时,使用了外部供电,后省略,直接由板上的5V从USB接口取电。大致框架如下:
图片7.png
图七、硬件框架示意图
五、软件框架
由于上位机和下位机分别开发,上位机所用语言为python,基于windows环境运行(理论上移植linux也很简单),下位机使用c开发,在N32开发板上运行,其操作/执行流程如下:
图片8.png
图八、软件业务流程
六、软件模块说明
1、定义
由于本项目使用pin资源较少,因此没有修改drv_gpio.c文件中的定义
#define N32F10X_PIN_NUMBERS 64
而是直接在代码中定义了所用的pin脚和相关资源
#define SPI1_BUS_NAME “spi1”
#define SPI1__DEVICE_NAME “spi10”
#define SPI1_NCS_PIN 29 //PA4
如之前所述,魔方最重要的就是色块的变化,各个时期和地方的版本虽然有所区别,但主流采用红、黄、蓝、绿、白、橙六种颜色,目前主要有两种配色:世界版(WCA大赛所用配色)和日版(Rubik教授最初研发时的配色)。
图片9.png
图九、颜色要求
对于每个面具体的颜色,采用的是原色大辞典中标准色号:
图片10.png
图十、标准色表
定义为:
Yellow:#ffff00
Green:#008000
Orange:#ffa500
Blue:#0000ff
Red:#ff0000
White:#ffffff
WS2812点灯采用24位色,与标准RGB不同,为GRB,因此初始六个颜色如下:
const uint32_t rgbclr[]={0xffff00,0x800000,0xa5ff00,0x0000ff,0x00ff00,0xffffff};
对于点灯采用的六个面(底面虽然不用点灯,但仍然需要存储颜色),共计384块,使用uint32_t格式储存,每个数只使用其中24位,高8位空闲。
static uint32_t face[384]={0};
在本项目的硬件结构中,只需要输出320块(没有底)颜色,共计15360,考虑到WS2812信号必须间隔低电平间隔,预留200个0,每次输出的buff:
static uint8_t buff[15560]={0};
2、点灯实现函数
点灯功能实现主要包括:
1)初始化SPI接口函数int rt_hw_spi_config(void),并使用INIT_DEVICE_EXPORT(rt_hw_spi_config);将其加入板卡初始化中。在这个函数中,将SPI0速率初始为13.333MHz。
2)修改单个node的buff函数void reflush_one_node(uint16_t node),该函数的功能就是在旋转时,修改对应的buff值,每次修改48个uint8_t,使其输出与WS2812的单颗灯珠相符合。
3)通过SPI写WS2812灯函数void draw_face2(void),实际上是调用spi.c中的rt_spi_send(spi,buff,sizeof(buff));写入15560个uint8_t。
3、MSH交互功能
加入预留命令
MSH_CMD_EXPORT(init_face, init_face);
MSH_CMD_EXPORT(rotate_x_try, rotate_x_try <0-7>);
MSH_CMD_EXPORT(rotate_y_try, rotate_y_try <0-7>);
MSH_CMD_EXPORT(rotate_z_try, rotate_z_try <0-7>);
分别用于调用初始化方块函数void init_face(void)、旋转x轴函数static void rotate_x_try(int argc, charargv)、旋转y轴函数static void rotate_y_try(int argc, charargv)、旋转z轴static void rotate_z_try(int argc, char**argv)。

七、其它
作品图片
图片11.png
图片12.png

视频效果
https://v.youku.com/v_show/id_XNTg1MzE3NDQxMg==.html?spm=a2hcb.profile.app.55!255!35!255~A
代码地址
https://gitee.com/tobottest/rubiks-cube

N32G457芯片RT-Thread下SPI驱动ST7735液晶屏实战 SPI(串行外设接口)是嵌入式系统中常用的同步串行通信协议,通过主从架构实现全双工通信。其工作原理基于时钟极性(CPOL)相位(CPHA)的四种模式组合,通过MOSI/MISO线路实现数据交换。在RT-Thread实时操作系统中,SPI驱动需要适配设备框架,涉及引脚配置、时钟管理DMA优化等关键技术。以国民技术N32G457芯片驱动ST7735 TFT屏为例,展示了如何通过寄存器配置、双缓冲技术局部刷新策略提升显示性能。这类SPI显示驱动方案广泛应用于智能家居面板、工业HMI等场景,特别适合需要低功耗 阅读详情

相关推荐

基于RT-Thread与N32G457的SPI Flash烧写器设计与实现

嵌入式系统开发中,SPI Flash作为一种常见的非易失性存储介质,广泛用于存储固件代码、配置参数等数据。其通过串行外设接口(SPI)与主控MCU通信,具有引脚少、封装小、成本低的优点。为满足批量生产中对设备固件高效、可靠烧录的需求,开发者常需设计专用的烧写工具。本文以国民技术N32G457系列MCU为硬件平台,结合RT-Thread实时操作系统,构建了一个低成本、高可靠的SPI Flash烧写器解决方案。项目充分利用了RT-Thread的设备驱动框架与SFUD(Serial Flash Universa

weixin_30512089的博客 620

N32G457VEL7通过RT-thread studio配置pwm实现呼吸灯 基于N32G45XVL-STB开发

RT-thread 配置N32G45XVL-STB开发板pwm,实现呼吸灯

weixin_47205405的博客 1210

【N32G457】基于N32G457RT-Thread全新打造的私有化定制家用式智能告警系统(2022年国民技术MCU&RT-Thread设计大赛第一名作品)

【N32G457】基于N32G457RT-Thread全新打造的私有化定制家用式智能告警系统。

一个专注于嵌入式IoT领域的架构师,深耕IoT领域多年,深度掌握IoT领域的相关技术栈,包括但不限于RTOS内核的实现及其移植、硬件驱动移植开发、网络通讯协议开发、编译构建原理及其实现、底层汇编及编译原理、编译优化及代码重构、嵌入式IoT系统的架构设计等。 2万+

【N32G457 】基于RT-ThreadN32G457的CAN网关_n32g435 can采样

在复杂网络系统中,常常设计高、低速两种速率不同的CAN通讯网络,甚至3种不同功能相互独立的CAN子网。确保特定信息网络传输的安全性。但在不改变传统工业总线的前提下,实现不同网络之间的转换,有着迫切的需求。由于CAN总线的优异性能,且低成本、高可靠性、实时性、灵活性、抗干扰能力强等特点,广泛应用于各种自动化控制场景中,尤其在汽车电子、自动控制、电力系统等领域。其中LED灯用来指示网关数据输入状态以及运行状态,红灯500MS闪烁表示网关运行正常,蓝灯闪烁表示高速CAN有数据输入,绿灯闪烁表示网口有数据输入。

2401_84264915的博客 1093

国民技术N32G457REL7-UART的使用

国民技术的串口配置与STM32的串口配置几乎相同,配置流程如下:1.开启串口的时钟2.选择串口使用的引脚3.配置对应的引脚功能4.初始化串口的基本参数5.根据需求使能对应的串口中断6.使能串口7.编写中断服务函数若要提高串口的传输速率,可采用串口的DMA进行数据传输,这个功能的实现,在博主的历史文章中有相关的详解,若有不理解指出,欢迎与博主一起探讨,博主企鹅号是:2896238724。

wxy888888的博客 1138

【N32G457】基于RT-ThreadN32G457的可控电流源

本文是RT-Thread用户@wlof原创发布,是用于参加RT-Thread与国民技术联手推出N32G457 RT-Thread设计大赛,原文:https://club.rt-thread.org/ask/article/3475.html 【N32G457】基于RT-ThreadN32G457的可控电流源 1、应用背景 工业控制领域,由于传统4-20mA电流传输方案,依旧占领着统治地位,因此各种仪表上基本都会配置标准的4-20mA电流输出接口。其中,电流输出中最主要的就是恒流源制作,对于刚接触工业仪表的

rtthreadiotos的博客 1327

【N32G457】基于N32G457RT-Thread全新打造的私有化定制家用式智能告警系统(2024年国民技术MCU&amp;RT-Thread设计大赛第一名作品)_国民技术 智能烟感(1)

整个系统的核心架构图如下所示:从上面这个核心架构图中,我们可以看到整个IoT系统组成,包括智能设备终端侧、WEB配置前端侧、智能IoT系统平台后端侧,同时还有手机移动端。下面就整个系统的几大重要组件,我会一一进行简要讲解。

2401_84931310的博客 483

【N32G457】基于RT-ThreadN32G457的墨水屏日历

本文是RT-Thread用户@xusiwei1236 原创发布,是用于参加RT-Thread与国民技术联手推出N32G457 RT-Thread设计大赛,原文:https://club.rt-thread.org/ask/article/3649.html 基于RT-ThreadN32G457的墨水屏日历 项目概述 本项目硬件部分包含N32G457开发板、ESP8266 Wi-Fi模组、W25Q128闪存模组、4.2寸三色墨水屏墨水屏驱动板,硬件功能上使用了N32G457芯片的SPI、UART、GPIO

rtthreadiotos的博客 2137

【N32G457 】基于RT-ThreadN32G457的USB2CAN调试器

本文是RT-Thread用户@文武兵兵原创发布,是用于参加RT-Thread与国民技术联手推出N32G457 RT-Thread设计大赛,原文:https://club.rt-thread.org/ask/article/3471.html 介绍 一个简洁方便的的usb2can调试器,可用于can总线数据调试一般的can总线故障排查。在基于RT-ThreadN32G457的软硬件平台的基础上,使用SLCAN协议配合USB CDC类通信可以实现将can数据转发到PC或者上位机上,供上位机软件进行分析。 主

rtthreadiotos的博客 3960

国民技术N32G457移植RT-Thread

文章目录前言一、替换文件二、添加文件到工程三、修改源码总结 前言 移植RT-Thread到国民技术N32G457芯片中,此次移植只是一个最简的移植,不包括移植控制台所需的串口设备,pin设备。 一、替换文件 1、在bsp中复制一个gd32e103的工程做移植,将文件夹重命名为N32G45x。 2、删除N32G45x\Libraries下的所有文件,将官方下载的资料包中通用MCU资料\N32G457xx\N32G457xx\6-软件开发套件(Software Development Kit)\Nati

小破孩的博客 5284

【N32G457 】基于RT-ThreadN32G457的CAN网关

N32G457活动 基于RT-ThreadN32G457的CAN网关 应用背景 由于CAN总线的优异性能,且低成本、高可靠性、实时性、灵活性、抗干扰能力强等特点,广泛应用于各种自动化控制场景中,尤其在汽车电子、自动控制、电力系统等领域。 在复杂网络系统中,常常设计高、低速两种速率不同的CAN通讯网络,甚至3种不同功能相互独立的CAN子网。实现隔离与智能化处理。确保特定信息网络传输的安全性。并且随着时代的发展,工业领域逐渐引入以太网,其高数据吞吐量是CAN总线无法比拟的。但在不改变传统工业总线的前提下,实现

qq_41854911的博客 1325

[N32G457] 基于RT-ThreadN32G457的简易便捷式可调电压源

本文是RT-Thread用户@chengjili 原创发布,是用于参加RT-Thread与国民技术联手推出N32G457 RT-Thread设计大赛,原文:https://club.rt-thread.org/ask/article/3423.html 本设计是用来参加《创新“芯”引擎 | 国民技术N32G457 RT-Thread设计大赛》的作品。初衷是由于做军品要求国产化,所以最近也一直在测试国内不同厂家的32芯片的性能以及开发便捷性最重要的稳定性等问题。之前也一直在用RTT做开发。浏览官网的时候.

rtthreadiotos的博客 1064

RT Thread 在N32G457下can驱动分析

核心文件。

Car12 306

【N32G457】 基于RT-ThreadN32G457的迷你键盘

此文为参加RT-Thread与国民技术联手推出N32G457 RT-Thread设计大赛期间作品。 由于疫情影响加上其他各种原因,本应在3月25日结束的比赛在今日终于完成了一个比较完整的作品,无论是否可以参赛,还是希望对大家有所帮助。 先放个图。 应用背景 机械键盘在最近几年发展迅猛,功能也逐渐丰富,在开源环境中也存在几个发展迅猛的开源项目,比如QMK。这些项目对STM32之类的芯片虽然有所支持,但是相关资料也会少很多,所以项目之初我是希望可以将QMK作为一个软件包接入RT-Thread,但是由于对其了解

qq_41854911的博客 1199

【N32G457 】基于W5500的Webserver数据展示

本文是RT-Thread用户@yukelab 原创发布,是用于参加RT-Thread与国民技术联手推出N32G457 RT-Thread设计大赛,原文:https://club.rt-thread.org/ask/article/3448.html 本来要做的的基于 SDI-12 的传感数据记录器,拿到板子后,发现并不合适;恰好手头有个 W5500 模块,就做了个用于展示传感器数据的 webserver; 基于W5500Mongoose开发的webserver;硬件部分由W5500模块,N32G457主控

rtthreadiotos的博客 1918

【N32G457 】基于RT-ThreadN32G457的电子墨水屏电子钟

本文是RT-Thread用户@wakojosin 原创发布,是用于参加RT-Thread与国民技术联手推出N32G457 RT-Thread设计大赛,原文:https://club.rt-thread.org/ask/article/3401.html 本方案可以用于桌摆时钟及定时器,用于倒计时提醒,查看时间等场景。定时器功能同时显示了倒计时时长已经定时到达时间,方便设置预期的提醒时间。硬件上由于手上没有蜂鸣器等音频输出模块,所以使用led替代作为倒计时结束的输出信号。 硬件合照 墨水屏是自己按开发板.

rtthreadiotos的博客 1073

【N32G457 】基于RT-ThreadN32G457的传送带物品计数器

本文是RT-Thread用户@Bin 原创发布,是用于参加RT-Thread与国民技术联手推出N32G457 RT-Thread设计大赛,原文:https://club.rt-thread.org/ask/article/3437.html 很感谢 RT-Thread 、国民技术 提供的此次国民技术 N32G457设计大赛参赛机会,很荣幸能申请到开发板,这个芯片还是蛮功能强大的。 此项目主要是实现利用光电传感器开关检测传送带上的物品并进行计数,利用温湿度传感器检测车间温湿度环境,然后将数据信息通过HMI显

rtthreadiotos的博客 2081
上一篇: 【N32G457】基于RT-Thread和N32G457的可控电流源
下一篇: 【RT-Thread原创征文】我是开发者,我要来分享
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值