我造轮子,你造车,创客一起造起来!塔克创新资讯【塔克社区 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通信的更多相关文章

  1. 玩转X-CTR100 l STM32F4 l ADC 模拟数字转换

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器 AD转换接 ...

  2. 玩转X-CTR100 l STM32F4 l MPU6050加速度陀螺仪传感器

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器 板载加速度 ...

  3. 玩转X-CTR100 l STM32F4 l X-CTR100与树莓派搭建机器人平台

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器与树莓派Linux系统 ...

  4. 玩转X-CTR100 l STM32F4 l 舵机控制

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器的舵机控制,X-CTR ...

  5. 玩转X-CTR100 l STM32F4 l DRV8825 A4988 步进电机控制

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器控制步进电机 ...

  6. 玩转X-CTR100 l STM32F4 l 基础例程printf、LED、蜂鸣器、拨码开关、位带操作

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器基础板载资源 ...

  7. 玩转X-CTR100 l STM32F4 l PS2无线手柄

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] SONY的PS2无线手柄是索尼游戏机的遥控手柄,控制 ...

  8. 玩转X-CTR100 l STM32F4 l DSP指令集性能测试

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器 DSP库的 ...

  9. 玩转X-CTR100 l STM32F4 l FPU单精度浮点性能测试

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      本文介绍X-CTR100控制器如何开启ST ...

  10. 玩转X-CTR100 l STM32F4 l RNG硬件随机数发生器

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器 STM32F4硬件随 ...

随机推荐

  1. BZOJ4887: [Tjoi2017]可乐 矩阵快速幂

    Description 加里敦星球的人们特别喜欢喝可乐.因而,他们的敌对星球研发出了一个可乐机器人,并且 放在了加里敦星球的1号城市上.这个可乐机器人有三种行为:停在原地,去下一个相邻的 城市,自爆. ...

  2. 浅谈java中死锁问题

    知识点:死锁的产生.死锁的实例 一:死锁的产生 我们在解决多线程共享资源的线程同步问题时,会使用synchronized关键字修饰方法或者通过Lock加锁方式修饰方法.代码块,防止多个线程访问统一资源 ...

  3. 处理文字基线 文字对不齐 font-size

    这是我无意中发现的,先记录下 比如你在一个h1标签里面添加文字,或者在其他块级标签添加文字,想让他们间隙少一点,(基线影响)可把行高设置为line-height: 1;就达到消除基线的作用. 建议使用 ...

  4. html5标签 H5标签

    <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"& ...

  5. 如何在Twitter开发者平台上注册自己的应用

    1.打开twitter的官网https://dev.twitter.com,如果还没有注册账号的,需要注册账号,已经注册账号的,请先登录:2.选择其中的My apps,如下图: 3.进去界面,选择Cr ...

  6. caffe深度学习网络(.prototxt)在线可视化工具:Netscope Editor

    http://ethereon.github.io/netscope/#/editor 网址:http://ethereon.github.io/netscope/#/editor 将.prototx ...

  7. UVa 1663 净化器

    https://vjudge.net/problem/UVA-1663 题意: 给m个长度为n的模板串,每个模板串包含字符0,1和最多一个星号"*",其中星号可以匹配0或1.例如, ...

  8. Android广播接收器和Activity间传递数据

    Activity向广播接收器传递数据很简单,只需要在发送广播前将数据put进Intent中就行了. 广播接收器怎么向Activity传送数据?这里要用到接口,通过在广播接收器里定义一个接口,然后让接收 ...

  9. python 压缩tar 包

    import tarfile import os def make_targz(output_filename, source_dir): print("doing!") with ...

  10. Java入门:零碎的知识点

    实例变量经常被称为属性 成员变量和局部变量:前者在类中定义,后者在类的方法中定义且系统不会自动赋初始值 我们创建一个对象的时候实际上执行的是无参的构造方法 静态变量 static String arr ...