Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
CAN总线
STM32F10XCAN驱动使用的问题
发布于 2016-10-10 12:48:24 浏览:5303
订阅该版
第一次使用RT-Thread系统,研究了几天资料和代码,关于STM32上一些驱动不是很明白,希望有人可以解答我的疑惑 我使用官方教程中的SCONS方式生成了STM32F10x的MDK5工程,在生成的代码里有一个canapp.c文件,里面似乎是CAN驱动使用的demo,但是里面的一些配置方法没有找到哪里有文档,在can.c和bxcan.c里面的代码也没有什么注释。所以想知道,STM32F10x使用官方的CAN驱动应该如何配置?下面是我认为是可能的配置项 1. 在注册CAN驱动时有如下语句 ```rt_hw_can_register(&bxcan1, "bxcan1", &canops, &bxcan1data);``` 其中bxcan1data传入了一些配置项 ```static struct stm_bxcan bxcan1data = { .reg = CAN1, .mfrbase = (void *) &CAN1->sFilterRegister[0], .sndirq = CAN1_TX_IRQn, .rcvirq0 = CAN1_RX0_IRQn, .rcvirq1 = CAN1_RX1_IRQn, .errirq = CAN1_SCE_IRQn, .alocmask = {0, 0}, .filtercnt = BX_CAN2_FMRSTART, .fifo1filteroff = 7, .filtermap = { [0] = { .id32mask_cnt = 0, .id32bit_cnt = 0, .id16mask_cnt = 2, .id16bit_cnt = 24, }, [1] = { .id32mask_cnt = 0, .id32bit_cnt = 0, .id16mask_cnt = 2, .id16bit_cnt = 24, }, }, };``` 这里的参数各表示什么,我如果使用需要修改吗? 之后在CAN的线程里,有这样的初始化语句 ```rt_event_init(&canpara->event, canpara->name, RT_IPC_FLAG_FIFO); rt_device_open(candev, (RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_INT_TX)); rt_device_control(candev, RT_CAN_CMD_SET_FILTER, canpara->filter);``` 在传入的canpara里有一个滤波器struct rt_can_filter_config *filter;,似乎是用于设置STM32 CAN模块的硬件滤波器的 ```struct can_app_struct { const char *name; struct rt_event event; struct rt_can_filter_config *filter; rt_uint8_t eventopt; };``` 具体的值如下 ```struct rt_can_filter_item filter1item[4] = { RT_CAN_FILTER_STD_INIT(1, can1ind, &can_data[0].event), RT_CAN_FILTER_STD_INIT(2, can1ind, &can_data[0].event), RT_CAN_STD_RMT_FILTER_INIT(3, can1ind, &can_data[0].event), RT_CAN_STD_RMT_DATA_FILTER_INIT(4, can1ind, &can_data[0].event), }; struct rt_can_filter_item filter2item[4] = { RT_CAN_FILTER_STD_INIT(1, can2ind, &can_data[1].event), RT_CAN_FILTER_STD_INIT(2, can2ind, &can_data[1].event), RT_CAN_STD_RMT_FILTER_INIT(3, can2ind, &can_data[1].event), RT_CAN_STD_RMT_DATA_FILTER_INIT(4, can2ind, &can_data[1].event), }; struct rt_can_filter_config filter1 = { .count = 4, .actived = 1, .items = filter1item, }; struct rt_can_filter_config filter2 = { .count = 4, .actived = 1, .items = filter2item, };``` 请问这些值分别是什么意思,我知道STM32的CAN硬件滤波可以配置为标识符列表和屏蔽位模式,这里应该如何配置呢?另外,我没有找到关于CAN通信驱动的任何资料和API文档 ,如果有能否提供一下,谢谢!
查看更多
4
个回答
默认排序
按发布时间排序
sxf_zero
2016-12-05
这家伙很懒,什么也没写!
关注,留个脚印,别沉了
sxf_zero
2016-12-08
这家伙很懒,什么也没写!
楼主搞的怎么样了,今天用F103的板子搞这个驱动,怎么也进不了can中断,晚上突然就想起这个了 [color=#FF0000] 1、对于非互联型的片子,如stm32f103, USB_LP_CAN1_RX0_IRQn FIFO0接收邮箱中断 CAN1_RX1_IRQn FIFO1接收邮箱中断 USB_HP_CAN1_TX_IRQn 发送中断 2、对于互联型产品如,105,107,[/color] [color=#FF0000] CAN1 CAN1_RX0_IRQn FIFO0接收邮箱中断 CAN1_RX1_IRQn FIFO1接收邮箱中 CAN1_TX_IRQn 送中断 CAN2 CAN2_RX0_IRQn FIFO0接收邮箱中断 CAN2_RX1_IRQn FIFO1接收邮箱中 CAN2_TX_IRQn 发送中断 [/color] 应该是这个原因,bxcan.c是默认是基于105的互联型片子,103的can1中断函数名和105,107的是有所差别的,明天改下看看。
sxf_zero
2016-12-09
这家伙很懒,什么也没写!
继续留脚印,进不了中断的问题解决了,就是上面的原因,还发现了个小bug,导致波特率设置不正确。 文件:bxcan.c 位置:494行-498行 [code] pcan->BTR = (mode | ((BAUD_DATA(SJW, baud_index)) << 24) | ((BAUD_DATA(BS1, baud_index)) << 16) | ((BAUD_DATA(BS2, baud_index)) << 20) | (BAUD_DATA(RRESCL, baud_index)));[/code] 498行改为 : [code] (BAUD_DATA(RRESCL, baud_index))-1);[/code] 就ok了。
撰写答案
登录
注册新账号
关注者
0
被浏览
5.3k
关于作者
刀刀刀
这家伙很懒,什么也没写!
提问
1
回答
0
被采纳
0
关注TA
发私信
相关问题
1
我也来传一个CANOpen移植,RTT+STM32F107+CanOpenNode
2
谁有STM32裸跑的CANopen程序啊???
3
CAN驱动程序框架
4
CAN驱动接口如何规范一下
5
RTT无法进入线程.Cannot access Memory
6
编译提示arm-none-eabi/bin/ld: cannot find crt0.o: No such file o
7
rtt 2.1.0 正式版 mdk4 bsp/stm32 编译canapp.c错误
8
2.1版本stm32f10x分支bxcan驱动波特率设置的bug
9
rtthread2.1.0下,找不到can1设备
10
关于CAN驱动框架的一些问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
机器人操作系统 (ROS2) 和 RT-Thread 通信
4
五分钟玩转RT-Thread新社区
5
国产MCU移植系列教程汇总,欢迎查看!
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
RyanMqtt 移植指南(三)
2
RyanMqtt QOS质量测试(二)
3
WCH APT 零等待FLASH的思考
4
RyanMqtt使用介绍和示例代码(一)
5
RTT平台 zephyr_polling软件包 Bluenrg2 蓝牙芯片启动流程
热门标签
RT-Thread Studio
串口
Env
LWIP
AT
SPI
Bootloader
FinSH
ART-Pi
CAN总线
Hardfault
USB
文件系统
DMA
RT-Thread
SCons
线程
RT-Thread Nano
MQTT
stm32
ESP8266
rt-smart
WIZnet_W5500
RTC
flash
ota
UART
FAL
packages_软件包
I2C
freemodbus
cubemx
潘多拉开发板_Pandora
定时器
PWM
BSP
ADC
socket
AB32VG1
SDIO
keil_MDK
中断
消息队列_msg_queue
编译报错
Debug
C++_cpp
msh
QEMU
SFUD
MicroPython
本月问答贡献
出出啊
1463
个答案
324
次被采纳
小小李sunny
1379
个答案
274
次被采纳
张世争
700
个答案
155
次被采纳
crystal266
518
个答案
152
次被采纳
whj467467222
1215
个答案
146
次被采纳
本月文章贡献
出出啊
1
篇文章
11
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
4
篇文章
6
次点赞
crystal266
2
篇文章
5
次点赞
whj467467222
2
篇文章
4
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部