STM32F107之CAN配置

2023-05-16

STM32F107属于STMF10x系列的互联型产品,所以配有2个CAN模块即CAN1和CAN2。CAN模块正常工作模式和测试模式,且测试模式又分为环回模式、静默模式和环回静默模式,但一般都使用正常工作模式,所以在此仅介绍正常工作模式相关配置。

一、来说说CAN模块的配置步骤:

1、初始化CAN相关GPIO口;

2、初始化CAN控制器;

3、初始化CAN过滤器;

4、初始化CAN中断;

5、添加CAN中断接收函数;

二、CAN1部分具体代码如下(库函数版本为V3.50):

1、初始化CAN1相关GPIO口:

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能PORTA时钟                 
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);//使能CAN1时钟    

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;    //复用推挽
    GPIO_Init(GPIOA, &GPIO_InitStructure);            //初始化IO

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;    //上拉输入
    GPIO_Init(GPIOA, &GPIO_InitStructure);  

 

2、初始化CAN1控制器:   

    CAN_DeInit(CAN1); //默认初始化配置
    CAN_StructInit(&CAN_InitStructure);//CAN初始化结构图初始化

    CAN_InitStructure.CAN_TTCM=DISABLE;            //非时间触发通信模式  
    CAN_InitStructure.CAN_ABOM=DISABLE;            //软件自动离线管理     
    CAN_InitStructure.CAN_AWUM=DISABLE;      //睡眠模式通过软件唤醒(清除CAN->MCR的SLEEP位)
    CAN_InitStructure.CAN_NART=DISABLE;            //禁止报文自动传送 
    CAN_InitStructure.CAN_RFLM=DISABLE;             //报文不锁定,新的覆盖旧的  
    CAN_InitStructure.CAN_TXFP=DISABLE;            //优先级由报文标识符决定 
    CAN_InitStructure.CAN_Mode= CAN_Mode_Normal;            //模式设置: 普通模式; 
    //设置波特率
    CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;                //SJW = 1tq
    CAN_InitStructure.CAN_BS1=CAN_BS1_3tq;             //Tbs1 = 3tq
    CAN_InitStructure.CAN_BS2=CAN_BS2_5tq;                //Tbs2 = 5tq
    CAN_InitStructure.CAN_Prescaler=8; //分频系数8,即波特率为36M/((1+3+5)*8)= 500k,其中36M为PCLK1    
    CAN_Init(CAN1, &CAN_InitStructure);            //初始化CAN1 

3、初始化CAN1过滤器:   

    CAN_FilterInitStructure.CAN_FilterNumber=0;    //过滤器0,选择范围0 - 13
    CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;     //屏蔽位模式
    CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;     //32位宽 
    CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;    //32位ID
    CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
    CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;//32位MASK
    CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
    CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;//过滤器0关联到FIFO0
    CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;//激活过滤器0    

    CAN_FilterInit(&CAN_FilterInitStructure);            //滤波器初始化

4、初始化CAN1中断:   

    CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);                //FIFO0消息挂号中断允许.         

    NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;     // 主优先级为1
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;            // 从优先级为0
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

5、添加CAN1中断接收函数:

void CAN1_RX0_IRQHandler(void)
{
      CanRxMsg RxMessage;
      CAN_Receive(CAN1, CAN_Filter_FIFO0, &RxMessage);
      /*此处可添加接收消息处理逻辑*/
}

三、CAN2部分的具体代码:

    CAN2与CAN1大同小异,相关配置步骤也是一样,指示具体配置参数有所差别,这里只列出不同之处:

1、初始化CAN2相关GPIO口: 与CAN1配置类似

2、初始化CAN2控制器:与CAN1配置相同

3、初始化CAN2过滤器:

    CAN_FilterInitStructure.CAN_FilterNumber=14;    //过滤器14,选择范围14 - 27
    CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;     //屏蔽位模式
    CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;     //32位宽 
    CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;    //32位ID
    CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
    CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;//32位MASK
    CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
    CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0;//过滤器0关联到FIFO0
    CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;//激活过滤器0    

    CAN_SlaveStartBank(14);//配置CAN2起始过滤器为14,此配置只当芯片有CAN2模块时才需要

    CAN_FilterInit(&CAN_FilterInitStructure);            //滤波器初始化,通过库函数可得知这里实际是配置CAN1相关寄存器,因CAN2不能直接访问SRAM,所以利用CAN1的寄存器来间接访问。

4、初始化CAN2中断:   

    CAN_ITConfig(CAN2,CAN_IT_FMP0,ENABLE);                //FIFO0消息挂号中断允许.            
    NVIC_InitStructure.NVIC_IRQChannel = CAN2_RX0_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;     // 主优先级为1
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;            // 从优先级为0
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

5、添加CAN2中断接收函数;

void CAN2_RX0_IRQHandler(void)
{
      CanRxMsg RxMessage;
      CAN_Receive(CAN2, CAN_Filter_FIFO0, &RxMessage);
      /*此处可添加接收消息处理逻辑*/
}

到此代码部分已差不多,但以上内容均指示说明了一个大概过程与配置,具体为何这样配置需配合官方文档和其它相关资料分析。

 

 

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32F107之CAN配置 的相关文章

  • 四、数据转换、ros-CAN通讯

    1 CAN通讯 1 1驱动安装 1 1 1在我的gitee上下载test功能包 xff0c 将libusbcan so文件复制到 lib 其他位置 计算机 lib 目录下 1 2参考 我另一篇博客一 2 1 3 下载功能包 1 3 1 在我
  • CAN通讯的byte序和bit序

    听别人说起CAN通讯协议的时候总说到Intel格式和motorola格式的时候 Intel格式如何 xff0c Motorola格式又如何 xff1f 觉得很有必要搞懂这些知识 xff0c 也看了相关资料 xff0c 可直到今天还没明白 真
  • ubuntu 使用虚拟can 与 socketCAN使用

    原文链接 xff1a https blog csdn net xiandang8023 article details 127990159 创建虚拟CAN接口 在Linux上能使用虚拟CAN接口之前 xff0c 需要在终端执行以下三个步骤
  • CAN通信讲解(3)——错误据帧

    本文注意参考了 CAN入门书 xff0c 源于此书图片不再特殊标注 目录 3 1 总线错误的种类3 1 1 位错误3 1 2 ACK错误3 1 3 填充错误3 1 4 CRC错误3 1 5 格式错误 3 2 错误帧结构3 3 错误状态3 3
  • G2O库和Eigen库can not find 问题——FindG2O.cmake FindEigen3.cmake

    目录 CMakeLists设置FindG2O cmake文件内容FindEigen3 cmake 文件内容 CMakeLists设置 在CMakeLists里加入如下这句话 xff0c 并在项目文件夹中新建cmake文件夹 LIST APP
  • CAN报文解析—案例

    1 CAN报文定义 CAN报文是指发送单元向接受单元传送数据的帧 我们通常所说的CAN报文是指在CAN线 xff08 内部CAN 整车CAN 充电CAN xff09 上利用ECU和CAN卡接收到的十六进制报文 2 CAN协议中CAN报文种类
  • Nvidia Jetson Xavier 上使用CAN

    为了利于回忆 xff0c 将自己查询到的资料在这里记录一下 资料一 xff1a 20条消息 NVIDIA Xavier CAN weifengdq的专栏 CSDN博客 资料二 xff1a 英文版Enabling CAN on Nvidia
  • CAN报文格式简析

    Date xff1a 2022 5 11 Author xff1a MJQ Meta xff1a CAN CAN基础篇 CAN报文格式简析 1 Motornala和Intel格式 建议直接看图 xff0c 小白也能秒懂 xff01 注 xf
  • 基于NRF24L01的CAN数据透传

    闲谈 xff1a 闲来无聊 xff0c 恰好公司又经常用CAN数据的传输 xff0c 自己觉得要是用无线传送多好 xff0c 然后 xff0c 就是一个奇想 xff0c 就想做一个无线数据的透传 xff0c 恰好身边又有NRF24L01 那
  • 使用STM32F103做CAN的收发通信

    下面也是搭建嵌入式系统所必须的一个部分 参考网站 xff1a https www cnblogs com craigtao p 3645148 html https blog csdn net qq 29413829 article det
  • linux的socket CAN驱动介绍

    https blog csdn net linyangspring article details 27186911 在linux中 xff0c CAN总线的驱动有两种实现方式 xff1a 字符设备以及socket can驱动 Socket
  • RT-thread 中CAN总线的应用

    准备 xff1a RT thread Studio 2 2 5 CubeMX 6 6 1 rt thread驱动包 4 0 3 1 新建项目 2 打开CubeMX Settings xff0c 设置CAN 找到CAN1 xff0c 并勾选激
  • CAN接口芯片MCP2515的波特率和滤波器设置问题

    配置波特率代码 MCP2515ByteWrite CNF1 3 MCP2515ByteWrite CNF2 0x80 PHSEG1 3TQ PRSEG 1TQ MCP2515ByteWrite CNF3 PHSEG2 3TQ 功能 波特率的
  • STMCubeMX5.10版本CAN使用loopback模式自测

    使用芯片 STM32F103C8T6 cube软件版本 5 10 软件包版本为 STM32Cube FW F1 V1 7 0 一 配置时钟为使用外部晶振 并配置为72M 二 使能 can 并配置参数 设置can波特率为500k 并设置为lo
  • STM32的CAN总线的接收双FIFO使用方法

    通过下面的框图我们可以看到 STM32F013有两个接收FIFO 但是实际的使用中如何让着两个FIFO都被使用呢 解决办法就在这里 1 STM32F103有0 13共14个过滤器组 每个过滤器组都可以绑定指定的FIFO 2 特别需要注意的一
  • CAN总线的EMC设计方案

    一 CAN接口EMC设计概述 Controller Area Network简称为CAN 多用于汽车以及工业控制 用于数据的传输控制 在应用的过程中通讯电缆容易耦合外部的干扰对信号传输造成一定的影响 单板内部的干扰也可能通过电缆形成对外辐射
  • 电池充放电自动测试系统介绍

    电池是国民经济的基础产品 广泛运用在交通运输 通讯 电力 铁路 国防 计算机 应急设备等各个领域 传统电池检测生产方式已经很难满足电池产品的市场需求 那么如何高效快速的进行电池产品的性能检测呢 今天就给大家介绍一款全能型电池测试系统 电池充
  • STM32 CAN/CANFD软件快速配置(HAL库版本)

    STM32 CAN CANFD软件快速配置 HAL库版本 目录 STM32 CAN CANFD软件快速配置 HAL库版本 前言 1 软件编程 1 1 建立工程 1 2 初始化 1 2 1 引脚设置 1 2 2 CAN基本参数设置 1 2 3
  • 难懂?这样理解SPI与CAN很简单!

    难懂 这样理解SPI与CAN很简单 什么是串行通讯 为什么仍需使用串行通讯 SPI与CAN SPI 接口特点 CAN现场总线特点 什么是串行通讯 在正式进入主题前 我么先来介绍一下什么叫做 串行通信 串行通信是计算机的一种数据传输通信方式
  • 功放诊断测试

    1 切换trace显示时间模式 Toggle time mode 2 测seedkey 需要加载seednkey dll 3 功能寻址和物理寻址切换

随机推荐

  • 好看的网站

    1 红色主题网站 雕塑类 http www ibaolan com 2 40个布局排版好看的网页设计作品 https www shejidaren com 40 creative web design layout html 3 做了那么久
  • Part 2:Cocos2d-x开发基础-Cocos简介与环境搭建-关东升-专题视频课程

    立即学习 https edu csdn net course play 6735 133126 是独立按键还是矩阵按键
  • 51单片机 串口12864显示驱动

    include lt reg52 h gt define uchar unsigned char define uint unsigned int sbit CS 61 P2 5 片选信号 xff08 RS xff09 sbit SID 6
  • Nginx https 配置步骤,免费证书申请

    第一步 xff1a http aq chinaz com SSL 需要先注册登录站长工具 第二步 xff1a 填写域名信息 xff0c xff08 设置的密钥密码要记住 xff0c 在第五步时需要用到 xff09 第三步 xff1a 选择手
  • C/C++分割字符串: strtok函数

    C语言如何实现将字符串ABCD efgh i1234 David Julie Susan中 和 分隔开的几个字串ABCD efgh i1234 David Julie Susan取出来 xff1f 有个函数叫 strtok span cla
  • 浅谈用Google Scholar查找并获取外文文献的技巧和方法

    一 Google Scholar是什么 Google Scholar是Google于2004年底推出的专门面向学术资源的免费搜索工具 xff0c 能够帮助用户查找包括期刊论文 学位论文 书籍 预印本 文摘和技术报告在内的学术文献 xff0c
  • 常见的字符串处理函数strstr,strlen,strtok

    字符串处理 strstrstrlenstrtokstrchrstrcpystrcmpstrcatsprintfbzeromemsetmemcpymemcmperrno strstr span class token function str
  • Vscode+MinGW配置C++开发环境(解决版本过老和在线下载极慢问题)

    文章目录 准备电脑MinGW的编译器环境安装注意 配置Path环境路径VScode 安装C C 43 43 拓展配置运行 xff08 多数配置直接被VSCODE自动生成 xff09 准备电脑MinGW的编译器环境 为什么选择MinGW xf
  • Python——alembic数据库ORM模型的迁移与映射

    Python alembic数据库ORM模型的迁移与映射 alembic 作用 xff1a 方便数据库与ORM模型的迁移与映射 alembic 安装 xff1a pip install alembic alembic 用法 xff1a 1
  • 解决VNC远程连接树莓派,窗口显示不全的问题,亲测可行!!

    哇 xff0c 就在刚刚才百度到解决VNC远程连接树莓派 xff0c 窗口显示不全的问题 xff0c 昨晚上查了一晚上都没搞定 xff0c xff0c xff0c 首先说下问题吧 xff0c 就是用VNC远程连接树莓派后 xff0c 会出现
  • Kotlin Parameter specified as non-null is null

    报错信息如下 span class hljs label java lang IllegalArgumentException span Parameter specified as non null is null method kotl
  • 如何获取维普免费账号--应对大家工作后在校外下载维普万方等全文

    马上就要工作了 xff0c 觉得学校里面图书馆资料很多 xff0c 并且很有用 xff0c 都可以在CNKI 万方维普等中文数据库 xff0c 和SD EBSCO SpringerLink等西文数据库中下载全文 xff0c 但是仅仅限于校内
  • Ubuntu下搭建samba服务

    Samba服务器和NFS差不多 xff0c Samba是在Windows操作系统下访问Linux主机 xff0c NFS可以让Linux客户端访问NFS服务器 xff0c NFS服务器可以使用Windows搭建也可以使用Linux搭建 xf
  • VsCode打不开终端

    VsCode打不开终端 问题现象解决办法 问题现象 解决办法 打开设置 输入 integrated 并打开 settin json 插入对于终端路径设置 代码如下 xff1a 34 terminal integrated shell win
  • VMware虚拟机中的Ubuntu图形界面蓝屏问题

    VMware虚拟机中的Ubuntu图形界面蓝屏问题 因为某次暴力关机后 xff0c 进入Ubuntu时发现蓝屏 xff0c 界面显示不正常 xff0c 但Ctrl 43 alt 43 F4后可以进入命令行 xff0c 说明系统正常只是图形界
  • GD32F205在IAR上移植FreeRTOS

    目录 简述 xff1a 第一步 xff1a 准备最简工程与系统第二步 xff1a 拷贝源码第三步 xff1a 编译器IAR配置第四步 xff1a 工程代码修改第五步 xff1a 编译工程 简述 xff1a 1 主芯片 xff1a GD32F
  • vscode之C/C++代码自动补全

    目录 准备 xff1a 步骤 xff1a 安装插件重启加载更改配置选项找到 设置 打开json配置添加配置json保存并重新打开vscode即可自动补全 准备 xff1a IDE xff1a vscode 安装就不展开啦 步骤 xff1a
  • git生成公钥

    平台 xff1a Windows 打开git bash 随便在一个目录下右键 xff0c 选择 Git Bash Here 生成公钥命令 ssh keygen t rsa C your email 64 example com 备注 xff
  • CentOS安装arm-linux-gcc交叉编译器

    xff08 注 xff1a 首先需要明确需要安装centos系统的位数 xff0c 即是32位的还是64位的 xff09 1 下载并解压文件 xff1a 下载arm linux gcc 4 4 3 tgz到任意的目录下 xff0c 进入这个
  • STM32F107之CAN配置

    STM32F107属于STMF10x系列的互联型产品 xff0c 所以配有2个CAN模块即CAN1和CAN2 CAN模块正常工作模式和测试模式 xff0c 且测试模式又分为环回模式 静默模式和环回静默模式 xff0c 但一般都使用正常工作模