Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
CAN总线
MCU
stm32F4
星火1号:CAN通信初步
发布于 2024-09-03 10:06:50 浏览:314
订阅该版
[toc] # Spark-1 星火一号 CAN 学习笔记 ## 一. 例子说明 **使用的是 spark-1\sdk-bsp-stm32f407-spark\projects\03_driver_can下的工程** ## 二. 实物连接 **二块星火一号开发板的CAN_L与CAN_L相连,CAN_H与CAN_H相连,如下图所示:** ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240903/c8ced284a212f23ab22f2eaa876fd481.png.webp) ## 三. 实验现象 一个开发板在shell中调输入 can_sample_send 开启发送线程 ```c can_sample_send ``` 一个开发板在shell中输入 can_sample_receive 开启接收线程 ```c can_sample_receive ``` 可以看到开启接收线程那块开发板的串口一直打印接收到的数据,如下图,符合预期。 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240903/e169a4e6bfe525e07ab0c6951990dfe5.png) ## 四. can 报文一些关键位 标识 | 说明 -------- | ----- ID: | 标准ID :11位,扩展ID : 28 位 RTR: | 0 : 数据帧,1:遥控帧 IDE : | 0: 标准帧,1:扩展帧 DLC: | 表示数据长度 (0~8字节) ## 五. can 波特率 位时序: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240903/27c6247c3ef83eb7633dc261a907bd85.png) 波特率 = APB1时钟频率 / 分频系数 / (1*tq + tbs1 + tbs2) ## 六. can 通信流程 ### 6.1 can 发送数据----底层原理 1. 配置主控制寄存器(CAN_MCR):can 工作模式 和 位时序寄存器(CAN_BTR) : 位时序及波特率 2. 配置发送邮箱: 寄存器 | 内容 -------- | ----- 标识符寄存器(CAN_TIxR) | 存储发送的报文ID、拓展ID、IDE位、RTR位 数据长度控制寄存器(CAN_TDTxR) | DLC段 低位数据寄存器(CAN_TDLxR) | 存储发送的报文数据段的Data0-Data3 四字节内容 高位数据寄存器 (CAN_TDHxR) | 存储发送的Data4-Data7 四字节内容 3. can控制器将数据传入can收发器→数字信号转为为物理信号→发送 ### 6.2 can 发送数据----rt-thread中发送流程 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240903/37d202b816dda6b2f590f448c3f029e8.png) ### 6.2 can 接收数据----底层原理 1. can收发器将收到物理信号转为数字信号→can控制器 2. 筛选器进行过滤 → FIFO邮箱 FIFO邮箱: 寄存器 | 内容 -------- | ----- 标识符寄存器(CAN_RIxR) | 存储收到的报文ID、拓展ID、IDE位、RTR位 数据长度控制寄存器(CAN_RDTxR) | DLC段 低位数据寄存器(CAN_RDLxR) | 存储收到的的报文数据段的Data0-Data3 四字节内容 高位数据寄存器 (CAN_RDHxR) | 存储收到的的Data4-Data7 四字节内容 3. 筛选器: ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240903/65af1a3b29f0c3916f2fcd33dc670c28.png.webp) 模式 | 说明 -------- | ----- 32位掩码模式 | CAN_FxR1存储ID,CAN_FxR2存储哪个位必须与CAN_FxR1中ID一致,2个寄存器表示一组掩码 32位标识符模式 | CAN_FxR1和CAN_FxR2各存储一个ID,2个寄存器表示2个筛选的ID 16位掩码模式 | CAN_FxR1高16位存储ID,低16位存储的哪个位必须要与高16位的ID一致;CAN_FxR2高16位存储ID,低16位存储哪个位必须要与高16位ID一致;2个寄存器表示2组掩码 16位标识符模式 | CAN_FxR1和CAN_FxR2各存储2个ID,2个寄存器表示4个筛选的ID 4. 读取数据: app读取FIFO邮箱对应寄存器,获取数据 ### 6.2 can接收数据----rt-thread中接收流程 ![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20240903/7d948e81771409a957ebb8790762bea7.png.webp)
1
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
rtt_dmx
这家伙很懒,什么也没写!
文章
2
回答
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
STM32F10XCAN驱动使用的问题
9
2.1版本stm32f10x分支bxcan驱动波特率设置的bug
10
rtthread2.1.0下,找不到can1设备
推荐文章
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
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
张世争
8
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
KunYi
6
个答案
1
次被采纳
本月文章贡献
程序员阿伟
6
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部