Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
ART-Pi
drv_can.c_CAN设备驱动
设备驱动
rtthread设备驱动学习笔记与做artpi2的can设备驱动修改
发布于 2025-05-19 16:38:10 浏览:30
订阅该版
[tocm] # 简介 ——最近在学习rtthread的使用,想要在stm32h7r的开发板上使用can功能,然后发现artpi2的can设备驱动没法直接使用,因为初学也想找个东西实际动手做一下,就开干了。 ——然后我发现rtt的can库没有比1m波特率更高的设置了,但是使用canfd的话 ——小白第一次修改设备驱动文件,可能好多地方改的不太完善,如果有问题希望大佬们能指出来,谢谢了。 (补充:hdr相关的配置还没看太明白,稍微改了一下,应该还不能用,后面有空了我再改改看) # 使用 ## 替换文件 ——下面是我验证可以初步使用的驱动文件,替换原本的drv-fdcan文件 [drv_fdcan.c](https://club.rt-thread.org/file_download/36c5a83ccfa93986) [drv_fdcan.h](https://club.rt-thread.org/file_download/9d936df8fa13c5d5) ### 验证文件 [ceshi.c](https://club.rt-thread.org/file_download/d30ca094a3c43820) ——验证文件是可选的,主要也是复制的文档的测试代码,在msh里面用can_sample可以测试 ## 修改配置文件 ——如果是使用artpi2的工程的话 ### kconfig ——文件路径是项目/libraries/kconfig。进去翻到BSP_USING_FDCAN那块,替换成 ``` menuconfig BSP_USING_FDCAN bool "Enable FDCAN" default n select RT_USING_CAN if BSP_USING_FDCAN config BSP_USING_FDCAN1 bool "Using FDCAN1" default n choice prompt "Choice FDCAN1 Frame Format" default BSP_FDCAN1_FRAME_CLASSIC config BSP_FDCAN1_FRAME_CLASSIC bool "Classic mode" config BSP_FDCAN1_FRAME_FD bool "FD mode without BitRate Switching" config BSP_FDCAN1_FRAME_FD_BRS bool "FD mode with BitRate Switching" endchoice config BSP_USING_FDCAN2 bool "Using FDCAN2" default n choice prompt "Choice FDCAN2 Frame Format" default BSP_FDCAN2_FRAME_CLASSIC config BSP_FDCAN2_FRAME_CLASSIC bool "Classic mode" config BSP_FDCAN2_FRAME_FD bool "FD mode without BitRate Switching" config BSP_FDCAN2_FRAME_FD_BRS bool "FD mode with BitRate Switching" endchoice endif ``` ### sconscript ——文件位置在项目/libraries/stm32h7rsxx_hal_driver/sconscript。然后进去大概在53行,有两行被注释掉的代码,修改成 ```python if GetDepend(['RT_USING_CAN']): src += ['Src/stm32h7rsxx_hal_fdcan.c'] ``` ## 修改cubemx ——这里就不多赘述了,用cubemx配置fdcan的引脚,需要注意的是fdcan的输入时钟我选择是600mhz,然后进去会有个6分频再给fdcan的。正点原子手册写最高工作频率是125mhz。 ## 效果 经典can帧,500k  ——简单测试可以正常使用 (补充:canfd,双波特率,500k,2m测试也可以正常使用) # 修改思路 ——stm32h7r的fdcan外设使用和h7比有些差别,消息ram被砍了很多,两个外设总共就最大2*212字的内存空间,所以过滤器什么的都顶着格设置了。can的速率默认最大只有1m,我在bsp里面添加了2-5m的,如果有其他需求可以自己修改。补充了一个设置data段波特率的命令。 ——另外还有一个不确定的东西,希望各位大佬能回答一下,我发现stm32初始化fdcan的时候直接初始化成可变波特率的fdcan模式,可以自由收发经典can,fdcan-不可变波特率,fdcan-可变波特率三种消息,不知道可不可以无脑初始化为可变波特率的fdcan模式。 ## 头文件添加 ```c #define BSP_FDCAN_FRAMEFORMAT_CLASSIC (0) #define BSP_FDCAN_FRAMEFORMAT_FD_NO_BRS (1) #define BSP_FDCAN_FRAMEFORMAT_FD_BRS (2) enum _BSP_FDCAN_DATA_BAUD{ BSP_FDCAN_BAUD_DATA_2M=(2*1000*1000), BSP_FDCAN_BAUD_DATA_2M5=(2500*1000), BSP_FDCAN_BAUD_DATA_4M=(4*1000*1000), BSP_FDCAN_BAUD_DATA_5M=(5*1000*1000) }; #define BSP_CAN_CMD_SET_BRS_BAUD (0x30) ``` ## 源文件修改 ### 初始化函数 ——rt_hw_can_init里面修改了can初始化的配置参数can_configure,添加了可变波特率的设置,调整了一下宏定义,其他部分没做过多修改。 ### ops结构体里面的四个 #### config ——根据不同的can初始化模式设置了对应的初始化参数,正点说如果用FDCAN_FRAME_CLASSIC再使能重传会用不了,另外两种使能了重传。 ——配置速率时候检测了一下,仲裁段或经典can速度超1m会报错;数据段因为我timing结构体设置的问题,所以限制了速率不能低于1m,因为要求tseg1小于32,tseg2小于16。如果改timing配置的话可以调整一下这块。 ——然后就是过滤器就全都接收,放到fifo0。 #### control ——主要是添加对修改可变波特率数据段速度的指令BSP_CAN_CMD_SET_BRS_BAUD。 #### send ——FDCAN_DLC_BYTES_xx的计算和之前不一样了,所以改了一下这块。然后就是支持设置fdformat和brs,发送使用fifo。 #### recv ——FDCAN_DLC_BYTES_xx的计算和之前不一样了,所以改了一下这块。然后修改了一下报错的地方。 #### 其他 ——修改报错代码,做hdr宏定义控制。 # 笔记 ——这个是我学习rtt的can驱动时候做的一些笔记 [can设备驱动分析.md](https://club.rt-thread.org/file_download/8141ca56b91b813f) # 结语 ——小白初次学习,可能很多地方做的还不完善,如果有问题欢迎各位大佬留言指正。很高兴第一次有了一点点内容产出而不只是互联网上的索取者,希望之后环境可以变得越来越好。 最后感谢artpi群和安富莱群的老哥的帮助。
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
WenShan
这家伙很懒,什么也没写!
文章
1
回答
1
被采纳
0
关注TA
发私信
相关文章
1
让成员函数能作为rt_device中的回调函数
2
关于设备配置时延时的处理
3
rt_device_set_rx_indicate设置的回调如何传递参数?
4
关于 输入捕获 驱动的
5
关于设备驱动的迷茫与疑惑
6
关于rtthread中各种驱动的问题
7
drv_hwtimer 和hwtimer关系是啥?
8
RTT有没有接口文档,可以用于写一些自己创建的设备的这些文档?
9
i2c设备驱动为什么没有速率设置
10
UART设备中断接收及轮询发送
推荐文章
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
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
FAL
RTC
rt-smart
I2C_IIC
cubemx
UART
ESP8266
WIZnet_W5500
BSP
ota在线升级
PWM
flash
packages_软件包
freemodbus
潘多拉开发板_Pandora
ADC
GD32
定时器
编译报错
flashDB
keil_MDK
socket
中断
rt_mq_消息队列_msg_queue
Debug
ulog
SFUD
msh
C++_cpp
at_device
本月问答贡献
出出啊
1524
个答案
343
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
821
个答案
179
次被采纳
crystal266
555
个答案
162
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
Pai同学
6
篇文章
10
次点赞
RTT_逍遥
1
篇文章
6
次点赞
加缪
1
篇文章
1
次点赞
WenShan
1
篇文章
1
次点赞
Rick98
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部