Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
drv_can.c_CAN设备驱动
ART-Pi
rtthread设备驱动学习笔记与做artpi2的can设备驱动修改
发布于 2025-05-19 16:38:10 浏览:209
订阅该版
[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) **注意!!!!!上面下载的代码下面有地方需要更改,不然can发送会出问题!!** ```c // 第一个 static int rt_hw_can_init(void) // 这个函数里面这行改成下面这样 config.sndboxnumber = 1; // 第二个 void HAL_FDCAN_TxBufferCompleteCallback(FDCAN_HandleTypeDef *hfdcan, uint32_t BufferIndexes) //这个函数里面这行改成下面这样 rt_hw_can_isr(&st_DrvCan1.device, RT_CAN_EVENT_TX_DONE | (((0) << 8))); ``` ### 验证文件 [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群和安富莱群的老哥的帮助。
3
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
WenShan
这家伙很懒,什么也没写!
文章
2
回答
1
被采纳
0
关注TA
发私信
相关文章
1
STUDIO找不到drv_can.c
2
请教如何注册can设备?
3
tm4c129x can驱动程序
4
因为can 的原因,差点让我放弃了RT-Thread 这是一个问题.
5
如何使用开启CAN驱动?
6
RTthread 使用CAN通讯硬件端口怎么配置的?
7
基于F107RC芯片CAN驱动
8
GD32 能否通过设备驱动的方式操作CAN,有没有drv_can.c
9
rtthread是否有GD32F303对应的drv_can驱动
10
执行can_sample后程序卡在_can_sendmsg中
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
6
五分钟玩转RT-Thread新社区
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
Bootloader
AT
Hardfault
CAN总线
ART-Pi
FinSH
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
FAL
RTC
rt-smart
I2C_IIC
UART
cubemx
ESP8266
BSP
ota在线升级
WIZnet_W5500
PWM
packages_软件包
flash
freemodbus
潘多拉开发板_Pandora
GD32
ADC
keil_MDK
定时器
flashDB
编译报错
ulog
socket
rt_mq_消息队列_msg_queue
msh
中断
Debug
SFUD
C++_cpp
at_device
本月问答贡献
出出啊
1524
个答案
343
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
821
个答案
179
次被采纳
crystal266
555
个答案
162
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
1
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
1
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部