STM32下调试CAN通信

2023-05-16

基本流程:
1、初始化CAN模块:
启用CAN时钟
配置CAN功能寄存器(包括位定时,分频等等)
配置CAN过滤器
打开中断
2、初始化I/O口
启用GPIO时钟
打开CAN对应的GPIO引脚
配置重映射(根据实际情况)
3、定义CAN发送结构体,接收结构体
4、开始发送并准备接收总线上信号
5、检查接收邮箱收的数据是否正确

void    CAN_Config()
{
    CAN_InitTypeDef         CAN_InitStructure;
    CAN_FilterInitTypeDef   CAN_FilterInitStructure;
    GPIO_InitTypeDef        GPIO_InitStructure;
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1,ENABLE);
    /**Configure the PA11 PA12 to CAN1*/
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   
    GPIO_Init(GPIOA,&GPIO_InitStructure);
    GPIO_PinAFConfig(GPIOA,GPIO_PinSource11,GPIO_AF_CAN1);
    GPIO_PinAFConfig(GPIOA,GPIO_PinSource12,GPIO_AF_CAN1);

    CAN_DeInit(CAN1);
    CAN_InitStructure.CAN_ABOM = DISABLE;       //自动离线
    CAN_InitStructure.CAN_AWUM = DISABLE;       //自动唤醒
    CAN_InitStructure.CAN_TTCM = DISABLE;       //触发通讯模式
    CAN_InitStructure.CAN_NART = ENABLE;        //禁止报文自动重传
    CAN_InitStructure.CAN_RFLM = DISABLE;       //报文自动覆盖¨
    CAN_InitStructure.CAN_TXFP = DISABLE;       //优先级判定
    CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;   //工作模式
    /**configure baudrate 1M */
    CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;            
    CAN_InitStructure.CAN_BS1 = CAN_BS1_6tq;
    CAN_InitStructure.CAN_BS2 = CAN_BS2_8tq;
    CAN_InitStructure.CAN_Prescaler =20;
    CAN_Init(CAN1, &CAN_InitStructure);

    CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;              //启用过滤
    CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_FilterFIFO0; //过滤邮箱0
    CAN_FilterInitStructure.CAN_FilterIdHigh= 0x0000;                   //过滤ID
    CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000;
    CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000;              //过滤ID掩码
    CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000;
    CAN_FilterInitStructure.CAN_FilterMode =CAN_FilterMode_IdMask;
    CAN_FilterInitStructure.CAN_FilterNumber = 0;                   
    CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
    CAN_FilterInit(&CAN_FilterInitStructure);

    CAN_ITConfig(CAN1,CAN_IT_FMP0,ENABLE);
}
定义CAN结构体:
CanTxMsg msg;
CanRxMsg RxMsg;

    msg.StdId = 0x09;
    msg.IDE = CAN_Id_Standard;
msg.Data[0]=0x01;
    msg.DLC=1;
发送:
`这里写代码片`
    CanTx =  CAN_Transmit(CAN1,&msg);
中断接收:
void CAN1_RX0_IRQHandler(void)
{
    if(CAN_MessagePending(CAN1,CAN_FIFO0) != RESET)
        {
            CAN_ClearITPendingBit(CAN1,CAN_IT_FMP0);
            CAN_Receive(CAN1,CAN_FIFO0,&RxMsg);
          msg.Data[0] = RxMsg.Data[2]+1;
            msg.DLC =1;
            msg.StdId = 0x02;
            msg.IDE = CAN_Id_Standard;
            if(RxMsg.Data[0] ==0x01)
            {
                GPIO_ToggleBits(GPIOD,GPIO_Pin_14);
            }
            CAN_Transmit(CAN1,&msg);
        }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32下调试CAN通信 的相关文章

  • CMSIS 库是否应该包含在版本控制中? [复制]

    这个问题在这里已经有答案了 通常 我曾经在版本控制中包含芯片供应商 ST 提供的设备特定标头和源以及 CMSIS Core 标头 数量不多 也没有更新的习惯 我使用STM32微控制器 但我不使用立方体框架 or the 标准外设库 最近 我
  • 139-基于stm32单片机老人居家监护报警系统Proteus仿真+源程序

    资料编号 139 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 MQ4传感器 电位器模拟 MQ2传感器 电位器模拟 蜂鸣器 电机 制作一个基于stm32单片机老人居家监护报警系统Proteus仿真 2 通过MQ2传
  • 134-基于stm32单片机矿井瓦斯天然气浓度温湿度检测自动通风系统Proteus仿真+源程序...

    资料编号 134 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 ds1302时钟 DHT11温湿度 电机 蜂鸣器 制作一个基于stm32单片机矿井瓦斯天然气浓度温湿度检测自动通风系统Proteus仿真 2 通过DH
  • 140-基于stm32单片机智能晾衣杆控制系统Proteus仿真+源程序

    资料编号 140 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 ds1302时钟 光敏传感器 蜂鸣器 LED灯 制作一个基于stm32单片机智能晾衣杆控制系统Proteus仿真 2 通过光敏传感器
  • HAL库STM32常用外设教程(二)—— GPIO输入\输出

    HAL库STM32常用外设教程 二 GPIO输入 输出 文章目录 HAL库STM32常用外设教程 二 GPIO输入 输出 前言 一 GPIO功能概述 二 GPIO的HAl库驱动 三 GPIO使用示例 1 示例功能 四 代码讲解 五 总结
  • STM32F4 通过软复位跳转到引导加载程序,无需 BOOT0 和 BOOT1 引脚

    我问这个问题是因为可以在这里找到类似问题的答案 通过应用程序跳转到 STM32 中的引导加载程序 即从用户闪存在引导模式下使用引导 0 和引导 1 引脚 用户 JF002 JF002回答 当我想跳转到引导加载程序时 我在其中一个备份寄存器中
  • STM32F103

    提示 来源正点原子 参考STM32F103 战舰开发指南V1 3PDF资料 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 提示 这里可以添加本文要记录的大概内容 开发环境硬件普中科技 接线图在g
  • HAL库学习

    CMSIS简介 CMSIS Cortex Microcontroller Software Interface Standard 微控制器软件接口标准 由ARM和其合作的芯片厂商 ST NXP 软件工具厂商 KEIL IAR 共同制定的标准
  • [MM32硬件]搭建灵动微MM32G0001A6T的简易开发环境

    作为学习单片机的经典 自然是通过GPIO点亮LED 或者是响应按钮的外部中断例程 这我们看看SOP8封装的芯片MM32G0001A6T得引脚 除了VDD和GND固定外 我们可以使用PA14 PA1 PA13 PA15 PA2 PA3这六个G
  • 串口通讯第一次发送数据多了一字节

    先初始化IO再初始化串口 导致第一次发送时 多出一个字节数据 优化方案 先初始化串口再初始化IO 即可正常通讯
  • 串口通讯第一次发送数据多了一字节

    先初始化IO再初始化串口 导致第一次发送时 多出一个字节数据 优化方案 先初始化串口再初始化IO 即可正常通讯
  • 1.69寸SPI接口240*280TFT液晶显示模块使用中碰到的问题

    1 69寸SPI接口240 280TFT液晶显示模块使用中碰到的问题说明并记录一下 在网上买了1 69寸液晶显示模块 使用spi接口 分辨率240 280 给的参考程序是GPIO模拟的SPI接口 打算先移植到FreeRtos测试 再慢慢使用
  • STM32 暂停调试器时冻结外设

    当到达断点或用户暂停代码执行时 调试器可以停止 Cortex 中代码的执行 但是 当皮质停止在暂停状态下执行代码时 调试器是否会冻结其他外设 例如 DMA UART 和定时器 您只能保留时间 r 取决于外围设备 我在进入主函数时调用以下代码
  • 毕设开题分享 单片机智能教室系统(智能照明+人数统计)

    1 简介 Hi 大家好 今天向大家介绍一个学长做的单片机项目 单片机智能教室系统 智能照明 人数统计 大家可用于 课程设计 或 毕业设计 项目分享 https gitee com feifei1122 simulation project
  • Freertos低功耗管理

    空闲任务中的低功耗Tickless处理 在整个系统运行得过程中 其中大部分时间都是在执行空闲任务的 空闲任务之所以执行 因为在系统中的其他任务处于阻塞或者被挂起时才会执行 因此可以将空闲任务的执行时间转换成低功耗模式 在其他任务解除阻塞而准
  • STM32F4XX的12位ADC采集数值超过4096&右对齐模式设置失败

    文章目录 一 前言 二 问题1 数值超过4096 三 问题1的排错过程 四 问题2 右对齐模式设置失败 五 问题2的解决方法 5 1 将ADC ExternalTrigConv设置为0 5 2 使用ADC StructInit 函数 一 前
  • 特殊寄存器

    特殊寄存器 文章目录 前言 一 背景 二 2 1 2 2 总结 前言 前期疑问 STM32特殊寄存器到底是什么 特殊寄存器怎么查看和调试代码 本文目标 记录和理解特殊寄存器 一 背景 最近在看ucosIII文章是 里面提到特殊寄存器 这就进
  • PWM DMA 到整个 GPIO

    我有一个 STM32F4 我想对一个已与掩码进行 或 运算的 GPIO 端口进行 PWM 处理 所以 也许我们想要 PWM0b00100010一段时间为 200khz 但随后 10khz 后 我们现在想要 PWM0b00010001 然后
  • STM32F0、ST-link v2、OpenOCD 0.9.0:打开失败

    我在用着发射台 http www ti com ww en launchpad about htmlgcc arm none eabi 4 9 2015q2 为 STM32F0 进行编译 现在我想使用该集合中的 arm none eabi
  • 移动数组中的元素

    我需要一点帮助 我想将数组中的元素向上移动一个元素 以便新位置 1 包含位置 1 中的旧值 new 2 包含 old 1 依此类推 旧的最后一个值被丢弃 第一个位置的新值是我每秒给出的新值 我使用大小为 10 的数组 uint32 t TE

随机推荐

  • 零基础教会你用github创建个人博客网站

    1 创建账号 进入github网站 xff0c 在网站首页右上角进行用户注册 2 填写相关信息 按照提示填写相关信息完成用户注册 3 搭建个人博客库 进入个人主页 xff0c 在右上角选择 43 好 xff0c 进入 new reposit
  • SV2-4G移动终端使用配置与使用

    一 硬件连接 1接位置天线 xff0c 2接方向天线 xff0c 3接4G天线 xff0c 4接GPS配置专用线 xff0c 5接4G配置专用线 二 运行状态识别 1处为指示灯 xff08 运行 SIM卡 网络 电源 xff09 xff0c
  • yapi插件开发及安装的一些备注

    yapi官方文档有些缺失 xff0c 这里做一下补充 xff0c 官方文档地址 xff1a https hellosean1025 github io yapi documents redev html 插件开发需要调试 xff0c 这个需
  • VSCode修改编辑器(代码窗口)背景色

    VSCode 的背景色是放在主题里面定义的 xff0c 所以在vscode的设置中无法修改到编辑器也就是代码窗口的背景色 xff0c 对应想要自定义编辑器背景的同志们来说 xff0c 可以通过修改主题文件来实现 xff0c 操作起来也并不复
  • ros下tcp通信的过程

    ros框架下的tcp通信的过程 博主在编写一个需要通过wifi传输两个整数和一个状态的问题中 xff0c 通过构建ros xff08 Ubuntu16 04 框架下的tcp c 43 43 通信过程解决了问题 一 ros串口通信的实现 首先
  • Ecos操作系統查看进程信息

    由于最近公司用到了ecos操作系统 xff0c 所以简单的了解了一下这个RTOS xff0c 其相关的社区资源较少 xff0c 国内基本不用 xff0c 这里结合手册整理了一部分的内容 本文章主要两部分 xff0c 一是建立基本的测试进程
  • 在vmware上运行ecos

    目前关于在vmware虚拟机上运行ecos的文章应该是有 xff0c 我会放到文章最后面的资源链接 xff0c 所以写这篇文章的目的有两点 xff0c 一是补充原有文章的不足 xff0c 在实际操作中遇到的困难 二是提供其中相关的资源链接
  • PROFINET协议解析-DCP

    目录 一 设置 Set xff08 请求 xff09 二 设置Set xff08 应答 xff09 三 识别 Identify xff08 请求 xff09 四 识别 Identify xff08 应答 xff09 DCP全称Discove
  • PROFINET协议-DCP实践

    这里就上篇文章 Profinet协议解析 DCP 内容进行实践 xff0c 通过实验验证各操作的准确性 xff0c 并且也介绍一些基本的通信分析方法 xff0c 不必使用昂贵的抓包工具 xff08 某东200左右 xff09 xff0c 使
  • Profinet协议解析-过程数据

    新的一篇文章 xff0c 开始讲下一个点 过程数据 过程数据 xff0c 顾名思义 xff0c 就是一直循环传输的数据 xff0c 在整个过程中不间断的传输 xff0c 其每次传输的时间称为同步周期 这点类似于Ethercat中的PDO数据
  • 无题

    漫无目的的写点东西 很多事情在文字面前显得特别无力 xff0c 又不得不用它来描述记录 记得读本科那会儿 xff0c 机械专业被称为一个万金油的行业 xff0c 所以宁愿用一本的分数去一个二本学校 xff0c 也要报机械专业 xff0c 谁
  • PROFINET的时钟同步(一)

    最近发现CSDN的编辑工具越来越不好用了 xff0c 直接用word导出PDF转图片 xff0c 发上来 清晰度受CSDN的影响 xff0c 不是很清楚
  • PROFINET 链路简述

    如上为 Profinet 的简易收发链路图 xff0c 其中收发各有四条路径 xff0c 三个中继桥 租用分别如下 xff1a RX 端 xff1a CTRL xff1a 控制管理帧的通道 xff0c 例如 LLDP 的邻居协议相关帧 xf
  • DSP中GPIO位域

    在TMS320F2812中 xff0c 对于程序中寄存器的名称是如何映射到物理地址的 xff0c 这里做一下详细的讲解 主要应用到三个文件 xff1a CMD h DSP28 GLobalVariableDefs c xff0c 其中CMD
  • 使用UART串口下调试CH376芯片

    CH376是文件管理控制芯片 xff0c 用于单片机系统读写U 盘或者SD 卡中的文件 CH376支持USB设备方式和USB主机方式 xff0c 并且内置了USB通讯协议的基本固件 xff0c 内置了处理Mass Storage海量存储设备
  • Ubuntu(arm)22.04配置清华源

    1 xff0c 清华源地址 地址 xff1a https mirror tuna tsinghua edu cn help ubuntu 2 xff0c 获取ubuntu arm 的源 ubuntu arm 要使用清华源中ubuntu po
  • DGUS调试笔记一

    0 串口的通讯配置 xff1a 在机器背面VHC86芯片有两个焊点 xff0c 若焊点短接 xff0c 即屏工作在TTL电平下 xff0c 默认出厂处于分离状态 xff0c 即RS232电平下 直接将DIN与232的TX相连 xff0c D
  • 使用HAL库函数建立STM32F2工程笔记

    一 建立一个新的文件夹 xff0c 新建三个文件夹User Driver Project xff0c 还可以加一个Doc存放工程的相关说明等等 1 将STM32F2xx的库函数 xff08 HAL函数库 xff09 中的Drivers文件夹
  • STM32伺服编码器接口

    在STM32的高级定时器和一般定时器中有Encoder interface mode xff08 编码器接口 xff09 xff0c TI1和TI2分别对应TIM CH1 和TIM CH2 通道 一 计数规则如下 xff1a 表55的是编码
  • STM32下调试CAN通信

    基本流程 xff1a 1 初始化CAN模块 xff1a 启用CAN时钟 配置CAN功能寄存器 xff08 包括位定时 xff0c 分频等等 xff09 配置CAN过滤器 打开中断 2 初始化I O口 启用GPIO时钟 打开CAN对应的GPI