此文为参加RT-Thread与国民技术联手推出N32G457 RT-Thread设计大赛期间作品。
由于疫情影响加上其他各种原因,本应在3月25日结束的比赛在今日终于完成了一个比较完整的作品,无论是否可以参赛,还是希望对大家有所帮助。

先放个图。

应用背景

机械键盘在最近几年发展迅猛,功能也逐渐丰富,在开源环境中也存在几个发展迅猛的开源项目,比如QMK。这些项目对STM32之类的芯片虽然有所支持,但是相关资料也会少很多,所以项目之初我是希望可以将QMK作为一个软件包接入RT-Thread,但是由于对其了解不够深入,最后项目变成了完成键盘为主(主要PCB已经画回来了)。
本次作品,是希望借实现一个小键盘接触QMK之类的开源项目,并将其接入RT-Thread,这样对于机械键盘这个行业而言,主控芯片的选择会丰富很多。

实现功能

本项目主要为一个通过USB HID协议对电脑进行通信的机械键盘(30左右键+3个编码器),添加WS2812的灯珠,添加1.14寸OLED显示屏,均完成基础功能编写测试(存在部分不稳定的bug)。通过RT-Thread为每一个设备建立线程,实现了互相通讯,实现了部分互动特效。

开发板和RT-Thread使用情况概述

本次设计对键盘部分设计了PCB以及顶部定位板的PCB,使用40P的FPC排线将所有所需引脚引出,通过杜邦线连接到主控板,使用的主控板为国民技术提供的N32G457开发板,将所有IO引出,考虑之下,作为前期项目,采取了杜邦线的形式。
在设计PCB的时候,考虑到整体键盘一体性,有做额外设计,将主控部分放置于顶层定位板处,床层PCB通过FPC排线进行连接。当然由于时间与资源关系并没有完成该部分,定位板只做定位板使用,是便于调试的选择。
在软件层面该程序使用RT-Thread 4.1.0为主控系统,部分内容通过对软件包的修改完成。

硬件框架

如图:

实装了OLED,WS2812b,和键盘本体,通过FPC排线接到转接板,通过杜邦线连接到开发板。
对于机械键盘部分,原理图如下。

软件框架说明


针对每一个外设都有做线程,USB接收的信息有CapsLock和NumsLock,这类事件通过Event公告。
keyboard线程是10ms扫描一次,先扫描矩阵键盘,再扫描旋转编码器。
当发现有按键需要发送出去,在线程内先打包好,然后通过消息队列发送出去。

软件模块说明
由于N32G45X的BSP并不支持USB设备,在移植尝试进行了一些时间后,由于本身并未研究过USB设备,在仍然希望最终结果相对完整的前提下,选择了另一种方法。根据国民技术提供的N32G457的库函数,内部包含了部分使用USB向电脑发送数据的例程,本次项目将该部分例程魔改,并未初始化USB的device,但对USB设备分配了一个线程,使用RT-Thread的方法进行桥接,发送所需数据到例程中设备向USB主机发送设备的位置,最终实现了成功枚举HID设备并正常进行打字输入。
现阶段软件在打字部分已经比较完善,ws2812b部分存在bug,会出现颜色偏差。
对SPI部分驱动后续有进行小修复,验证通过,后续会提交PR。

作品完整图片

视频演示

演示内容放在了Bilibili:一个不迷你的迷你机械键盘雏形的演示视频

代码地址

Gitee_Mini-Keyboard-Blues

【N32G457】 基于RT-Thread和N32G457的迷你键盘相关推荐

  1. 基于rt thread smart构建EtherCAT主站

    我把源码开源到到了gitee,https://gitee.com/rathon/rt-thread-smart-soem 有兴趣的去可以下载下来跑一下 软件工程推荐用vscode 打开.rt thre ...

  2. 基于GD32F103C8T6添加RT Thread nano设备框架并添加串口设备(以控制台console( uart0 )为例)

    最近没事琢磨了一下使用设备框架的问题.因为将串口注册到设备框架可以应用十分丰富的软件包. 于是就整理了一下手上的工程,重新将工程梳理了一遍. 像这样是十分清爽了,其中RTOS是操作系统源代码 并且学习 ...

  3. 关于RT thread系统节拍时钟的配置

    关于RT thread系统节拍时钟的配置                  -----本文基于rt-thread-3.1.3版本编写 首先,使用RTthread OS时,要配置(或者明白)它的系统节拍 ...

  4. RT Thread根据开发板制作BSP方法

    之前一直不懂怎么使用RT Thread的软件包,感谢网上的大神,看了你们的博客后大概了解一些,在此做下记录.用RT Thread软件包需要RT Thread的系统,但是RT Thread和RT Thr ...

  5. RT Thread利用STM32CUBEMX和RT Thread studio来创建模板工程

    (1)RT Thread利用STM32CUBEMX来创建模板工程 1.参考文档: 基于 CubeMX 移植 RT-Thread Nano:RT-Thread 文档中心 注意:串口2必须使能异步模式(启 ...

  6. xpt 2046的触摸屏 rt thread设备驱动框架

    1 基于rtt 开发触摸屏驱动 准备使用rtt 框架 , 驱动xpt 2046的触摸屏, 翻阅大量资料发现, 大部分文章强调的是时序图, 而且很多代码要么直接操作寄存器, 要么是io 口模拟, 只能用 ...

  7. 基于Boost.Thread 的测试

    基于Boost.Thread 的测试 实现功能 C++实现代码 实现功能 基于Boost.Thread 的测试 C++实现代码 #include <sstream> #include &l ...

  8. rt thread studio使用QBOOT和片外flash实现OTA升级

    我们这里要使用单片机外部flash作为OTA的下载分区,外部flash硬件连接关系 PB3-->SPI3_CLK PB4-->SPI3_MISO PB5-->SPI3_MOSI PE ...

  9. rt thread 使用FAL遇到fal_init() undefined reference

    rt thread FAL 0.5版,之前有没有不知道,遇到一个坑. 在main.cpp里面已经 #include <fal.h> fal_init() 编译报错,说 fal_init() ...

  10. RT Thread Free Modbus移植问题整理

    RT Thread Free Modbus移植问题整理 问题描述: 在读写寄存器中,写数据正常,只能读1个寄存器的值,多个值会异常. 在移植过程中发现串口(或RS485)数据接收长度异常. 一.环境描 ...

最新文章

  1. Java项目:旅游网站管理系统设计和实现(java+springboot+jsp+mysql+spring)
  2. 简评亚洲人工智能发展现状:机遇与挑战并存
  3. MongoDB 之 幽灵操作避免
  4. 《UNIXLinux程序设计教程》一2.1 UNIX 输入输出基本概念
  5. macos安装vscode_VS Code 代码编辑器入门指南:核心组件与概念
  6. 论文浅尝 - ESWA | 知识图谱的自动扩充方法
  7. pythondjango教程_Python 中Django安装和使用教程详解
  8. 操作系统OS进程(一)初识
  9. Python少打字小技巧
  10. SpringCloud_004_SpringCloud服务发现组件原理介绍
  11. python 去除读取txt输出时候的换行号
  12. Symantec 11.0企业版安装与配置简介
  13. 4412 使用小度wifi
  14. python地震数据处理_python 地震数据可视化
  15. 服务器虚拟机uefi,为虚拟机启用或禁用 UEFI 安全引导
  16. ipad一直卡在白苹果_IOS checkm8漏洞越狱 典型应用案例之OTA升级造成白苹果修复案例...
  17. 区域和检索 - 数组不可变(前缀和)
  18. 一种高效快速的高密度椒盐噪声消除算法(吕宗伟等)
  19. css_flex-grow增长系数/可用空间分配_实例
  20. 道教圣地青城山有一副名联:事在人为……

热门文章

  1. 一篇实验记录掌握华为ACL
  2. migrate、debate、motivating、agree with、 skin、leather、cease to do、cease doing
  3. pta6翻了C++超简单做法超简单代码
  4. 火狐浏览器——如何查看浏览器上所有的cookie?
  5. 智能家居(13)——智能家居控制系统
  6. 软件测试常见的经典面试题
  7. 页面表格数据下载到Excel的超实用方法
  8. 中国耳机能否把AirPods拉下铁王座,全看一颗“芯”
  9. Shell常用命令分享
  10. 使用冒泡排序对一组数进行升序排序