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

WSL2使用USB转CAN(canable),2023-05 在windows下用串口调试电机,但是想用ROS写程序然后用CAN发出来,遂搞一下WSL下面的CAN通讯。WSL2本质上也是虚拟机,当时觉得能装NVIDIA显卡驱动才用的它(并舍弃了Virtualbox),结果显卡驱动还是一堆坑注意:这个教程只适用于WSL2,不适用于WSL1。 阅读详情

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

介绍

一个简洁方便的的usb2can调试器,可用于can总线数据调试和一般的can总线故障排查。在基于RT-Thread和N32G457的软硬件平台的基础上,使用SLCAN协议配合USB CDC类通信可以实现将can数据转发到PC或者上位机上,供上位机软件进行分析。

主要功能
  • 可以实现接收can总线数据收发功能,从can总线发送到usb上位机或者从usb上位机发送到can总线。
  • 可以设置can波特率,支持扩展帧和远程帧。
  • slcan通用协议,ascii字符可以直接通过串口查看数据,linux工具can-utils中的slcan_attach、slcand、slcanpty可以直接驱动此协议转换成linux下的socketcan。
  • usb cdc免驱可以实现win10、linux即插即用。
  • 同时还有 python-can 、cantact-app等多种工具实现can数据采集分析。

硬件和软件框架

硬件上使用 国民技术提供的N32G45XVL-STB v1.1开发版加上一个TJA1050的can收发器。

硬件描述
芯片型号N32G457VEL7
CPUARM Cortex M4
主频144M 180DMIPS
片内SRAM144K
片内FLASH512K
串口7路 (UART4路 USART3路)
USB全速USB 2.0接口
CAN2路 CAN 2.0A/B总线接口
从硬件到软件

硬件上主要使用USB和CAN功能。

  • USB作为USB device设备,实现一个全速的usb cdc功能,再通过rtthread的device框架注册成为一个字符设备 vcom 。上层应用可以通过vcom设备直接与PC上位机通信。
  • CAN接口,原本N32G457应该有两路can接口,但是由于使用了usb device,can1和usb是公用fifo和中断号的所以没法同时使用。所以只使用了can2,同样can2也是注册到rtthread的device框架上的。可以直接通过rtdevice的api进行读写配置波特率等操作,这也方便后面的slcan进行配置can参数。同时slcan的核心代码可移植性更高。
从软件到硬件

硬件部分实现好后,软件部分通过rtthread的api就可以完成大部分操作了。主要驱动代码和应用层代码,逻辑处理代码。

USB CDC驱动代码,主要是usb cdc的vcom驱动,因为暂时还没有N32G457的usb device驱动能注册到rtdevice去,所以直接用N32G457的SDK提供的例程做出来的USB CDC,然后在此基础上注册一个字符设备vcom到rtdevice框架上,提供对cdc的读写接口。

can驱动,还有就是can驱动。在做这个东西的时候发现没有can驱动,于是参考sdk的例程写了一个驱动注册到rtdevice框架上。

slcan代码,接下来就是最重要的slcan应用层代码了。

应用层代码主要通过一个rt_slcan_t结构体记录slcan的配置和上下文状态。然后通过启动一个线程用来监听vcom和can的数据,接收到数据立马处理。

如果是来自vcom端的数据,是以\r结尾ascii字符串,需要做一个帧完整性判断用来判断是不是接收到完整的一帧ascii字符数据包。接收完整性判断通过后再判断发送的哪些命令,然后根据具体的命令需要发送CAN数据包到CAN控制器的发送到can设备去,需要执行命令的执行命令然后返回ack。

主要的ascii命令格式是

第一个字节格式描述
t 发送11bit ID的数据帧
r 发送11bit ID的远程帧
T 发送29bit ID的数据帧
R 发送29bit ID的远程帧
O打开can
C关闭can
V显示版本号
N显示串口号
F读取can状态
s设置can波特率 0 - 8
Z设置ascii数据是否带时间

命令, 1个字节

can的id,标准帧3个字节,扩展帧8个字节,hex表示

can的dlc数据长度,1个字节,hex表示

数据,根据dlc长度从0字节到16字节变化,hex表示

常见slcan命令示例:

ascii命令描述
t123166标准canid 0x123, 长度1, 数据 0x66
T123456783112233扩展canid 0x12345678, 长度3, 数据 0x11 0x22 0x33
r1260标准canid 0x126, 长度 0, 远程请求帧
T12345679扩展canid 0x12345679, 长度0, 远程请求帧

如果是来自can设备端的数据,就直接打包成ascii通过vcom发送出去就可以了。

软硬件架构图

rtt-n32-slcan.jpg

slcan逻辑图

rt-n32-slcan-loop.jpg

演示图片

使用串口工具直接打开串口,就可以看到can总线发送的数据,并且已经十六进制ascii格式,很方便阅读。发送数据到can总线也只需要按格式发送即可,每个命令结尾必须是0x0d。
QQ20220317224933.jpg

python程序采集can数据。

通过python-can库可以很方便打开slcan协议的设备获取数据,还可以将采集到的数据保存到日志文件中。脚本放在git仓库的test目录,安装号库就可以使用了。

import can
import threading
import time
import random

def print_message(msg):
    print(msg)

if __name__ == "__main__":
    # RX part
    #bus_rx = can.interface.Bus('virtual_ch', bustype='virtual')
    canbus = can.interface.Bus('COM32', bustype='slcan')
    
    logger = can.Logger("logfile.asc")  # save log to asc file
    listeners = [
        print_message,  # Callback function, print the received messages
        logger,  # save received messages to asc file
    ]
    notifier = can.Notifier(canbus, listeners)

    running = True
    while running:
        input()
        running = False

    # It's important to stop the notifier in order to finish the writting of asc file
    notifier.stop()
    # stops the bus
    canbus.shutdown()

QQ20220317225728.jpg

演示视频

https://www.bilibili.com/video/BV1iT4y1U7wJ/

代码地址

gitee仓库地址 https://gitee.com/cazure/n32g457vel7-usb2can

基于RT-Thread与N32G457的USB HID可编程迷你键盘开发实战 USB HID(人机接口设备)协议是计算机与键盘、鼠标等输入设备通信的通用标准,其核心在于定义了一套标准化的报告描述符和数据传输格式。该协议基于中断传输机制,确保输入事件的低延迟响应。在嵌入式领域,实现自定义HID设备具有重要技术价值,它允许开发者根据特定场景(如工业控制、智能家居、创客项目)打造高度定制化的输入解决方案,提升交互效率与灵活性。本文以ARM Cortex-M4 MCU和实时操作系统为平台,深入解析了键盘矩阵扫描、消抖算法与RT-Thread驱动框架的整合实践,并详细阐述了如何配置USB设备描 阅读详情

相关推荐

N32 MCU上RT-Thread移植ESP8266 AT指令实践

AT指令作为嵌入式设备与通信模块交互的标准协议,在物联网开发中扮演着关键角色。其工作原理基于串口通信的问答机制,通过预定义指令集实现网络连接、数据传输等功能。在RT-Thread实时操作系统中,AT组件通过虚拟文件系统抽象通信接口,大幅降低开发复杂度。针对国民技术N32系列MCU,需要特别注意时钟配置和DMA控制器的差异,这是确保Wi-Fi模块稳定通信的基础。通过优化AT指令解析器和实现双缓冲机制,可显著提升ESP8266在工业物联网等场景下的通信可靠性。

weixin_30500473的博客 454

slcan 协议 脚本 测试

slcan slcand socketcan python-can

weifengdq的专栏 8201

ardupilot开发 --- CAN BUS、DroneCAN 、UAVCAN 篇

ardupilot开发 --- CAN BUS、DroneCAN 、UAVCAN 篇

记录老板的每次pua,分享领导每天的毒鸡汤... 7118

SLCAN 串口转CAN

 一、SLCAN协议      slcan 即serial line CAN interface driver (using tty line discipline)     通用标准协议参考:http://www.mirrorservice.org/sites/downloads.sourceforge.net/s/so/socketcan.berlios/SLCAN-API.pdf

一路成长 6564

【信息科学与工程学】【产品体系】第三十三篇 DPU/smartinic芯片中的学科知识03

需求实现DMA 与流边界检测优化​分级超时状态机(短/中/长)+ 积压计数 + 批量触发DMA 控制器优化​描述符预取(深度 4)+ 中断合并(阈值 8)Fence 语义正确性验证​RTL 断言 + C 语言序列号检测 + 性能对比 + 硬件计数器所有代码均为可综合 Verilog,已在仿真器中通过基本功能测试。在 FPGA 原型上运行上述 RTL,配合 ChipScope 观察 fence 时序在 BlueField-3 上运行 DOCA DPA 测试程序,对比加/不加 fence 的结果。

weixin_49199313的博客 269

【信息科学与工程学】计算机科学与自动化——第三十五篇 调度理论和调度算法01——资源调度算法

算法逻辑

weixin_49199313的博客 681

RT-Thread N32G457QEL-STB 板级支持包(BSP)使用指南:硬件资源、外设驱动与快速上手

本篇技术指南以 RT-Thread 仓库中 [N32G457QEL-STB BSP 说明文档](https://link.gitcode.com/i/725672046ef42541c56f1b5e7a563cdf) 为主体,结合该板级包目录下的板级初始化代码、应用示例与内核配置,系统讲解国民技术 N32G457QEL-STB 评估板的硬件资源、RT-Thread 外设驱动支持矩阵、引脚映射关系,

gitblog_00324的博客 140

Windows免驱使使用slcan,使用方法以使用cangaroo中文版为例

Windows免驱使使用slcan,使用方法以使用cangaroo中文版为例 使用教程 https://ahphong.blog.youkuaiyun.com/article/details/149169035?spm=1001.2014.3001.5502

RT-Thread N32H760ZIL7-STB 开发板 BSP 使用指南:快速上手与外设驱动配置

本指南以 RT-Thread 仓库内 [N32H760ZIL7-STB BSP 说明](https://link.gitcode.com/i/7e6932afd26562b0d245d1d03353044f) 为主线,系统介绍这颗基于 ARM Cortex-M7 内核、主频高达 600MHz 的国民技术 N32H760 开发板的板载资源、外设支持矩阵、MDK5/GCC 编译下载流程,以及借助 EN

gitblog_00472的博客 462

雷达信号处理——恒虚警检测(CFAR)

上图展示的是同时在距离维和多普勒维进行恒虚警检测的原理,如果只是在距离维或多普勒维做CFAR,检测单元的左右两侧均有设定好数量的保护单元和参考单元。不同的CFAR检测器适用于不同的场景,CA-CFAR算法适用于均匀环境中的单目标或彼此相距较远的多目标环境,在邻近多目标环境会发生目标的遮蔽效应,在杂波边缘会发生杂波边缘效应。从图中也可以看到,根据阈值的选择不同,有不同的检测器,其中CA-CFAR是取的参考单元的均值,SO-CFAR取的是参考单元的最小值,而GO-CFAR是取的参考单元的最大值。

诚朴勇毅 3万+

STM32F103C8T6键盘DIY全攻略:从电路设计到固件烧录(附避坑指南)

本文详细介绍了基于STM32F103C8T6微控制器的DIY键盘制作全流程,涵盖硬件电路设计、按键矩阵实现、USB HID通信及固件烧录等关键步骤。特别针对常见问题提供避坑指南,帮助开发者高效完成从电路设计到功能实现的完整过程,打造个性化瀚文键盘。

soda5的博客 770

RT-Thread 在国民技术 N32L40XCL_STB 评估板上的 BSP 移植与实践指南

N32L40XCL_STB 是国民技术(Nations)推出的 N32L406 系列评估板,本文以 [bsp/n32/n32gxx_lxx/n32l40xcl-stb/README.md](https://link.gitcode.com/i/7138e678cafdf125b31e3c9c8e1b36cb) 为核心骨架,系统讲解该 BSP 的硬件资源、外设驱动支持、IO 映射、工程构建(MDK5

gitblog_00132的博客 1123

STM32_USB复合设备开发实战:基于CubeMX插件简化HID与CDC集成

本文详细介绍了如何使用STM32CubeMX插件简化USB复合设备开发,特别是HID与CDC的集成。通过自动处理多设备描述符融合和端点资源分配,该插件显著降低了开发复杂度,帮助工程师快速实现键盘、鼠标和虚拟串口等复合功能,提升STM32 USB开发效率。

palm99的专栏 748

【名单公布】国民技术MCU RT-Thread设计大赛获奖名单出炉~

亲爱的开发者们: RT-Thread与国民技术联手推出的 国民技术MCU RT-Thread设计大赛到今天终于圆满落幕。本次大赛共吸引了近300位开发者报名,历经三个多月赛程,从报名到审核通过,再到开发设计,最后成功完成自己的作品。各位小伙伴在这过程中遇到过很多困难,也花费了很多心血精力,现在废话不多说,一起来看本次大赛获奖名单吧! ###一等奖(1名) 【N32G457】从0到1打造一个私有化部署的家用式智能告警系统 作者:recan ###二等奖(2名) 【N32G457】基于RT-Thread和N32

rtthreadiotos的博客 2988

(MATLAB)一维信号峰值检测findpeaks

一维信号波峰波谷检测,峰值、峰宽、到达时间计算。MATLAB自带的findpeaks函数能完成这一任务,在这里分享其基本用法与特殊用法。

HPC_ZY 2万+

从补码原理到实践:RISC-V中addi指令的符号扩展机制详解

本文深入解析了RISC-V架构中addi指令的符号扩展机制。从补码的数学原理出发,详细阐述了12位立即数在指令编码中如何通过符号位进行扩展,并结合lui指令,揭示了加载任意32位立即数的正确方法与实践陷阱,帮助开发者编写高效可靠的底层代码。

weixin_29161719的博客 139

[IoT技术交流] 基于RT_Thread 的NuMaker--PFM--M487 应用开发

先前曾参与一次新唐M471开发板的测评,后来便得到了一次优惠购置NuMaker--PFM--M487的机会,该开发板的外观如图1所示。图1 开发板外观在往常,对新唐产品的开发多轻车熟路地使用MDK来进行,随着几次参赛发现主办方多在要求使用RT_Thread来开发,于是也打算以RT_Thread来开发NuMaker--PFM--M487。起初试了几次并不成功,几乎要放弃这种开发方式,后来还是逐渐入了门。有人也许会问就必须赶这个风潮吗?其实还真不完全是,主要是采用RT_Thread开发有其相对的优势,主要体现在

ic2121的博客 523

PD详解—第一章—Type-C连接

Type-C连接 今天大师匈下班比较早,再给大家侃一侃PD,希望大家支持。 PD和Type-c的关系 首先讲一下PD快充的实现步骤,本文主要是Source端(电源),Sink端的差不多也一样,只是策略不同而已。 TypeC连接-->广播电源能力Source capbility(数据交互)->打电压电流->等待其他指令。 所以typec连接是第一步,很多人会从字面意思理解typec连接,这不就是把线给插上去就好了吗? 不知道有没有优秀的同学想到正确答案; 正确答案:typec连接的本质是为

大师匈的博客 1万+

完成一个设计大赛,需要按照什么步骤?

转载于:https://blog.youkuaiyun.com/rtthreadiotos/article/details/124094524?spm=1001.2014.3001.5502 亲爱的开发者们: RT-Thread与国民技术联手推出的 国民技术MCU RT-Thread设计大赛到今天终于圆满落幕。本次大赛共吸引了近300位开发者报名,历经三个多月赛程,从报名到审核通过,再到开发设计,最后成功完成自己的作品。各位小伙伴在这过程中遇到过很多困难,也花费了很多心血精力,现在废话不多说,一起来看本次大赛获奖名单吧

qq_41854911的博客 343

上线之前多一道闸:业务审核系统的接入定义、双轨状态机与可靠生效闭环

运营后台“保存即生效”,让价格、库存、人群等配置每次修改都相当于一次无评审的上线。本文以至尊会员降价活动为例,系统拆解业务审核系统:用带业务语义的操作编码、规则化审核人与候选人快照、完整的生效回调契约做好接入定义;把业务改造为提交待生效,以不可变快照、字段级差异和唯一约束加幂等号防误配防重复;用审批轨与执行轨双轨状态机、链路式重新提交和以事件为准的审核链路理清状态;最后以发件箱、幂等键、超时先查后试、乐观锁与对账闭合生效环节,并结合两个可运行的Java程序,给出五种生效策略的事故率实测对比。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 6万+

软考高级信息系统项目管理师系列论文之:百篇软考高级信息系统项目管理师论文范文

软考高级信息系统项目管理师系列论文之:百篇软考高级信息系统项目管理师论文范文

zhengzaifeidelushang的博客 3578

2024年Go最全完成一个设计大赛,需要按照什么步骤?_设计竞赛步骤(1),美团Golang研发岗二面

也欢迎各位在RT-Thread论坛来发表一下获奖感言及参赛体验,让大伙们围观看看比赛过程中的心路历程😆。没有获奖的小伙伴们也别灰心,不久,RT-Thread还将举办更多大赛活动,一起期待吧~ps:更多作品文章,请戳这里:https://club.rt-thread.org/ask/tag/3442.html?又到了人间“四月天”,春暖花开,正是人间最美光景,愿疫情早日散去,一切皆安!###本次大赛完成作品用户(98名)作者:Blues_Jiang。作者:chengjili。

2401_84925335的博客 453

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

STM32F407VET6涨价应对:国产替代与跨平台迁移实战指南

在嵌入式系统开发中,微控制器(MCU)的选型与供应链管理是保障项目成功的关键。其核心在于平衡性能、成本与供货稳定性。当市场出现波动,如特定型号价格飙升时,工程师需掌握科学的评估与迁移方法。本文以热门的Cortex-M4内核MCU为例,深入剖析其硬件资源、软件生态与替代逻辑。面对供应链风险,国产替代方案如GD32F407凭借高度兼容的引脚与软件生态,成为降低迁移成本的有效选择。通过建立涵盖性能、外设、生态、成本、供货五维度的评估框架,并结合具体的代码迁移示例与问题排查清单,为工程师提供从评估、硬件修改到软件适

weixin_34129696的博客 410

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

国产MCU替代STM32:选型评估与迁移实战指南

微控制器是嵌入式系统的核心,选型需综合内核、主频、外设与生态。随着供应链安全需求上升,国产MCU凭借兼容设计与性能提升,成为替代STM32等进口芯片的重要选择。本文剖析GD32、国民技术N32等主流厂商的技术实力,从时钟树配置、DMA映射、烧录工具链等工程细节,揭示“Pin to Pin”兼容背后的真实差异,并给出从选型评估到软件迁移的实操方法。无论是工业控制、物联网终端,还是电机驱动场景,掌握这些要点能让国产替代稳步落地。

weixin_33937499的博客 191

Windows免驱使用slcan,使用方法以使用cangaroo为例

SLCAN (Serial Line CAN Interface)是一种将串口转换为CAN接口的协议,允许通过串口设备发送和接收CAN报文 。 ‌我们需要使用cangaroo上位机进行CAN报文收发。

ahphong的博客 3067

Linux免驱使用slcan,使用方法以Ubuntu为例

本文介绍了在Ubuntu系统中使用slcan工具将串行设备转换为CAN接口的步骤。首先通过安装canutils工具包获取相关功能;然后查询并确认slcan设备号;接着使用slcand命令将串口映射到CAN模式,设置波特率和接口名称;最后激活CAN接口进行报文收发测试。整个过程涵盖了设备识别、参数配置、接口激活以及基本的CAN通信测试,为串行设备接入CAN网络提供了完整解决方案。

ahphong的博客 1582
上一篇: 【N32G457】基于RT-Thread和【N32G457 】的智能字符识别系统
下一篇: 【N32G457】基于RT-Thread和N32G457的可控电流源
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值