AT32双路CAN通信

1.1 案例 CAN通信
1.1.1 简介
CAN是控制器局域网络(Controller Area Network)的简称,是由德国BOSCH公司开发的,并最终成为国际标准,是国际上应用最广泛的现场总线之一。CAN具有高性能和高可靠性,已经被广泛应用于工业自动化、船舶、汽车、工业设备等方面。
AT32F437 CAN主要具有以下特性:
― 支持CAN协议2.0A和2.0B.
― 软件触发或者外部触发转换波特率最高可达1M bit/s
― 支持时间触发通信
― 中断使能和屏蔽
― 自动重传功能可配
发送
― 3个发送邮箱
― 发送优先级可配置
― 支持发送时间戳
接收
― 2个深度为3的FIFO
― 28组过滤器组
― 支持标识符列表模式
― 支持标识符掩码模式
― 支持FIFO溢出管理
― 时间触发通信模式
― 16位定时器
― 发送时间戳

AT32 SUFR板载了两颗CAN芯片,型号为SN65HVD230DR,在测试时需要注意正确设置跳线帽,以及将两颗CAN芯片的H和L信号线分别对接在一起。

1.1.2 资源准备
硬件环境:
对应产品型号的AT-SURF-F437 Board
软件环境:
AT32F435_437_Firmware_Library_V2.x.x\project\at_sufr_f437\examples\can

1.1.3 硬件设计
本案例使用的硬件资源有TFTLCD液晶显示屏、两颗SN65HVD230DR CAN芯片,对应的引脚如下:
在这里插入图片描述

对应的电路原理如下:
在这里插入图片描述

1.1.4 软件设计
1)CAN通讯测试
初始化TFT LCD
初始化CAN1 和 CAN2
CAN1发送数据给CAN2,CAN2发送数据给CAN1
2)代码介绍
main函数代码描述

int main(void)
{
   
  uint32_t cnt = 0;

  /* 初始化系统时钟*/  
  system_clock_config();  

  /* 初始化中断优先级分组*/   
nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);

  /* 初始化延时函数 */
  delay_init();

  /* 初始化LCD */
  lcd_init(LCD_DISPLAY_VERTICAL);

  /* can 1 初始化 */
  can_init(CAN1);

  /* can 2 初始化 */
  can_init(CAN2);

  /* 显示信息*/  
  lcd_string_show(10, 20, 200, 24, 24, (uint8_t*)"CAN Test");

  while(1)
  {
   
    /* can 1 数据初始化 */
    can_data_init(CAN1);

    /* 通过 can 1 发送数据 */
    can_transmit_data(CAN1,can1_tx_message);  

    /* can 2 数据初始化 */
    can_data_init(CAN2);

    /* 通过 can 2 发送数据 */
    can_transmit_data(CAN2, can2_tx_message);

    /* can 1 接收到数据 */
    if(can1_rx_flag != 0)
    {
   
      /* 清除can 1接收数据标志 */
      can1_rx_flag = 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值