玩转X-CTR100 l STM32F4 l CAN通信

我造轮子,你造车,创客一起造起来!塔克创新资讯【塔克社区 www.xtark.cn 】【塔克博客 www.cnblogs.com/xtark/ 】

X-CTR100控制器STM32F4处理器内置CAN控制器,实现CAN通信功能,需要外扩CAN接口模块,本例程使用NXP的JTA1050模块。
原理
CAN 是Controller Area Network 的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。在汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。为适应"减少线束的数量"、"通过多个LAN,进行大量数据的高速通信"的需要,1986 年德国电气商博世公司开发出面向汽车的CAN 通信协议。此后,CAN 通过ISO11898 及ISO11519 进行了标准化,在欧洲已是汽车网络的标准协议。
CAN 的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。现场总线是当今自动化领域技术发展的热点之一,被誉为自动化领域的计算机局域网。它的出现为分布式控制系统实现各节点之间实时、可靠的数据通信提供了强有力的技术支持。关于CAN协议详细介绍,请参考资料文件夹相关文档。
X-CTR100控制器STM32F4处理器内置CAN控制器,支持 CAN 协议 2.0A 和 2.0B,特性如下。
- 支持 CAN 协议 2.0A 和 2.0B 主动模式
- 波特率 最高达 1Mbps 1Mbps
- 支持时间触发通信
- 具有 3个发送邮箱 个发送邮箱
- 具有 3级深度的 级深度的 2个接收 个接收 FIFO
- 可变的过滤器组( 28 个)
STM42F4内部CAN框图。

使用CAN功能,需要增加CAN通信接口芯片,本文使用TJA1050,该芯片兼容PCA82C250。
例程
使用CAN接口模块TJA1050进行CAN通信操作,实现了数据循环发送和数据接收显示功能,可通过2块X-CTR100控制器通信,或者使用1块X-CTR100和CAN分析仪通信,本例程以2套X-CTR100通信为例进行说明。
硬件说明
硬件资源:
- 串口UART1
- LED灯
- CAN扩展接口(LH)
- CAN接口模块TJA1050(需自备)
连接关系如图所示

连接实物图

软件生态
X-SOFT软件生态,X-API扩展文件如下。
ax_can.c—— CAN通信源文件
ax_can.h——CAN通信接口头文件
接口函数
|
void AX_CAN1_Init(uint8_t tsjw,uint8_t tbs2,uint8_t tbs1,uint16_t brp,uint8_t mode); //CAN1初始化 uint8_t AX_CAN1_SendMsg(uint8_t* msg,uint8_t num); //CAN1发送数据 uint8_t AX_CAN1_ReceiveMsg(uint8_t *msg); //CAN1接收数据 |
特殊说明,1.8固件 PLL_N 默认为360,通信时频率错误,之前固件版本为336,改为336后,通信正常。
修改位置为,system_stm32f4xx.c,400行位置。
|
#if defined (STM32F40_41xxx) #define PLL_N 336 //360 /* SYSCLK = PLL_VCO / PLL_P */ #define PLL_P 2 #endif /* STM32F40_41xxx */ |
例程代码主要包括两部分,主程序负责数据定时发送,CAN接收中断负责数据接收和显示。
CAN1接收中断程序代码如下。
|
//中断服务函数 void CAN1_RX0_IRQHandler(void) { CanRxMsg RxMessage; uint8_t i=0;
CAN_Receive(CAN1, 0, &RxMessage);
printf("RX:");
for(i=0;i<8;i++) printf("%d ",RxMessage.Data[i]);
printf("\r\n");
} |
软件说明
主程序代码如下。
|
int main(void) { u8 i=0; u8 canbuf[8]; u8 res;
//XRT1初始化 AX_Init(115200); printf("***X-CTR100 CAN通信例程***\r\n\r\n");
//CAN初始化,正常模式,波特率500Kbps AX_CAN1_Init(CAN_SJW_1tq,CAN_BS2_6tq,CAN_BS1_7tq,6,CAN_Mode_Normal);
//设置CAN接收中断 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2 NVIC_Config();
//初始化发送数据 for(i=0;i<8;i++) { canbuf[i] = 0; //填充发送缓冲区 }
while (1) { canbuf[0]++;
个字节
AX_Delayms(100); AX_LEDG_Toggle(); } } |
为了显示每帧数据差异,发送的第一个字节进行加1操作。
实现效果
两个X-CTR100控制器互相发送接收,打开串口助手即可查看接收的数据。

玩转X-CTR100 l STM32F4 l CAN通信的更多相关文章
- 玩转X-CTR100 l STM32F4 l ADC 模拟数字转换
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 AD转换接 ...
- 玩转X-CTR100 l STM32F4 l MPU6050加速度陀螺仪传感器
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 板载加速度 ...
- 玩转X-CTR100 l STM32F4 l X-CTR100与树莓派搭建机器人平台
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器与树莓派Linux系统 ...
- 玩转X-CTR100 l STM32F4 l 舵机控制
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器的舵机控制,X-CTR ...
- 玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器控制步进电机 ...
- 玩转X-CTR100 l STM32F4 l 基础例程printf、LED、蜂鸣器、拨码开关、位带操作
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器基础板载资源 ...
- 玩转X-CTR100 l STM32F4 l PS2无线手柄
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] SONY的PS2无线手柄是索尼游戏机的遥控手柄,控制 ...
- 玩转X-CTR100 l STM32F4 l DSP指令集性能测试
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 DSP库的 ...
- 玩转X-CTR100 l STM32F4 l FPU单精度浮点性能测试
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器如何开启ST ...
- 玩转X-CTR100 l STM32F4 l RNG硬件随机数发生器
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 STM32F4硬件随 ...
随机推荐
- Unity3D学习笔记(二十二):ScrollView和事件接口
昨天问题 InputField光标被遮挡问题:背景图片输入层级高于光标的层级,把光标弄成子物体,子物体层级高 自制的滑动框,选项怎么对齐,把Template的Pivot.y改为1 分辨率的区别:16: ...
- 解决Ubuntu14.04 下 E: Encountered a section with no Package: header 问题
参考: ubuntu-E:Encountered a section with no Package: header的解决办法 解决Ubuntu14.04 下 E: Encountered a sec ...
- HDU 5834 Magic boy Bi Luo with his excited tree(树形dp)
http://acm.hdu.edu.cn/showproblem.php?pid=5834 题意: 一棵树上每个节点有一个价值$Vi$,每个节点只能获得一次,每走一次一条边要花费$Ci$,问从各个节 ...
- LA 3486 Cells(判祖先+栈模拟dfs)
https://vjudge.net/problem/UVALive-3486 题意: 判断u是否是v的祖先. 思路: 很简单,dfs遍历,记录每个节点第一次访问时的时间戳 in[i] 和第二次访问时 ...
- UVa 11235 频繁出现的数值
https://vjudge.net/problem/UVA-11235 题意: 给出一个非降序排列的整数数组a1,a2,...,an,你的任务是对于一系列询问(i,j),回答ai,ai+1,...a ...
- C# 集合-并发处理-锁OR线程 (转载)
每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客!当然,希望将来的一天,某位老板看到此博客,给你的程序员职工加点薪资吧!因为程序员的世界除了苦逼就是沉默.我眼中的程序员大多都不 ...
- Java 集合、Iterator迭代器、泛型等
01集合使用的回顾 A:集合使用的回顾 a.ArrayList集合存储5个int类型元素 public static void main(String[] args) { ArrayList<I ...
- django查询集API
本节将详细介绍查询集的API,它建立在下面的模型基础上,与上一节的模型相同: from django.db import models class Blog(models.Model): name = ...
- STL_函数对象01
1.自定义函数对象 1.1.简单例子: //函数对象 struct StuFunctor { bool operator() (const CStudent &stu1, const CStu ...
- 原始的生成对抗网络GAN
论文地址:https://arxiv.org/pdf/1406.2661.pdf 1.简介: GAN的两个模型 判别模型:就是图中右半部分的网络,直观来看就是一个简单的神经网络结构,输入就是一副图像, ...