关于STM32中CAN中断的使用

发布者:dst2015最新更新时间:2015-08-24 来源: eefocus关键字:STM32  CAN中断 手机看文章 扫描二维码
随时随地手机看文章
    “如果你用的CAN引脚是PA11和PA12,接收中断用CAN1_RX0_IRQn。如果CAN引脚用的是PB8和PB9,也就是用重定义的引脚,接收中断用CAN1_RX1_IRQn。由于PA11和PA12也是USB的引脚,所以非互联型且带CAN控制器的微控制器的库文件在起名字时用了USB_LP_CAN1_RX0_IRQn。”具体的定义可以参考stm32F10x.h文件,其中对不同型号的中断有具体的定义。

 

示例如下:

1. 配置过滤器

 CAN_FilterInitStructure.CAN_FilterNumber = 0;

 CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;

   CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;

 CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000;

 CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000;

 CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000;
 CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000;

 CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_FIFO0;   //关联FIFO0

 CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;

 CAN_FilterInit(&CAN_FilterInitStructure);

  
 CAN_FilterInitStructure.CAN_FilterNumber = 14;

 CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_FIFO1;   //关联FIFO1

 CAN_FilterInit(&CAN_FilterInitStructure);

 

2. 开启CAN中断

     

   CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);

   CAN_ITConfig(CAN1, CAN_IT_FMP1, ENABLE);
 

   CAN_ITConfig(CAN2, CAN_IT_FMP0, ENABLE);

   CAN_ITConfig(CAN2, CAN_IT_FMP1, ENABLE);

 

3. 中断处理函数


void CAN1_RX0_IRQHandler(void)

{
        CAN_Receive(CAN1, CAN_FIFO0, &CAN1_RxMsg);

 //
}


void CAN1_RX1_IRQHandler(void)

{
        CAN_Receive(CAN1, CAN_FIFO1, &CAN1_RxMsg);

        //
}

void CAN2_RX0_IRQHandler(void)

{

        CAN_Receive(CAN2, CAN_FIFO0, &CAN2_RxMsg);
       //
}


void CAN2_RX1_IRQHandler(void)

{
        CAN_Receive(CAN2, CAN_FIFO1, &CAN2_RxMsg);
        //
}

关键字:STM32  CAN中断 引用地址:关于STM32中CAN中断的使用

上一篇:STM32的数据手册和技术参考手册的区别
下一篇:STM32固件库V3.5.0的CMSIS文件详细说明

推荐阅读最新更新时间:2024-03-16 14:29

STM32 103 USART
打开对应GPIO时钟 复用时钟 USART时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO | RCC_APB2Periph_USART1, ENABLE ); USART2 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE ); USART3 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE ); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE ); GP
[单片机]
STM32中重要的C语言知识点总结
说在前面的话一位初学单片机的小伙伴让我推荐C语言书籍,因为C语言基础比较差,想把C语言重新学一遍,再去学单片机,我以前刚学单片机的时候也有这样子的想法。 其实C语言是可以边学单片机边学的,学单片机的一些例程中,遇到不懂的C语言知识,再去查相关的知识点,这样印象才会深刻些。 下面就列出了一些STM32中重要的C语言知识点,初学的小伙伴可以多读几遍,其中大多知识点之前都有写过,这里重新整理一下,更详细地分析解释可以阅读附带的链接。 assert_param断言(assert)就是用于在代码中捕捉这些假设,可以将断言看作是异常处理的一种高级形式。 断言表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真。
[单片机]
<font color='red'>STM32</font>中重要的C语言知识点总结
STM32的GPIO介绍及电路图讲解
STM32的GPIO介绍 STM32引脚说明 GPIO是通用输入/输出端口的简称,是STM32可控制的引脚。GPIO的引脚与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。 STM32F103ZET6芯片为144脚芯片,包括7个通用目的的输入/输出口(GPIO)组,分别为GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、GPIOG,同时每组GPIO口组有16个GPIO口。通常简略称为PAx、PBx、PCx、PDx、PEx、PFx、PGx,其中x为0-15。 STM32的大部分引脚除了当GPIO使用之外,还可以复用位外设功能引脚(比如串口),这部分在【STM32】STM32端口复
[单片机]
<font color='red'>STM32</font>的GPIO介绍及电路图讲解
stm32模拟串口(基于高精度延时)
上一篇实现了高精度延时,这一节我们利用已实现的高精度延时接口来模拟串口发生数据(接收数据暂时没用到,所以偷懒没实现),直接上代码。 一、softserial.h #ifndef _SOFTWARE_SERIAL_H #define _SOFTWARE_SERIAL_H #include stm32f1xx.h void soft_serial_init(void); void serial_write(uint8_t const data); void serial_transimt(const uint8_t *p_txdata,uint16_t size); void serial_transmit
[单片机]
stm32专题二十五:实现基本定时器定时
利用基本定时器定时过程: 1 开启基本定时器的时钟; 2 定义时基初始化结构体,然后只需要配置分频系数PSC和重装载计数值ARR,其他结构体成员不用管; 3 开启定时器中断,这里要选择为定时器更新中断; 4 使能定时器。 接下来是配置过程,非常简单。 bsp_BasicTim.c #include bsp_BasicTim.h // 中断优先级配置 static void BASIC_TIM_NVIC_Config(void) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGrou
[单片机]
STM32处理器输入捕获分析
前言: 1.博文基于ARM Cortex-M3内核的STM32F103ZET6芯片和标准3.5.0库; 2.如有不足之处,还请多多指教; * 一 基本知识 * 1. 输入捕获的功能:用来测量脉宽或者测量信号频率; 2. 输了TIM6和TIM7外,其他定时器都有输入捕获功能; 3. 通用定时器输入捕获中断和定时器更新中断公用同一个中断函数; 二 侧脉宽工作原理 如何获取一个脉冲的宽度(比如高电平): 1. 开启并设置好定时器的时钟源 ,频率为F; 2. 输入需要检测的脉冲; 3. 利用CNT计数器计算一个脉冲的上升沿和下降沿之间的脉宽 三 相关寄存器 TIMx_ARR,TIMx_PSC,TIMx_CCMRx,TIMx_CCERx,T
[单片机]
<font color='red'>STM32</font>处理器输入捕获分析
STM32笔记---RTC的初始化
RTC这东西晕晕的,因为一个模块涉及到了RTC,BKP,RCC多个模块,之间的关系让人有点模糊 入门的知识请大家看手册,我来总结: 总之,RTC只是个能靠电池维持运行的32位定时器over! 所以,使用时要注意以下问题: 1.上电后要检查备份电池有没有断过电。如何检查? 恩,RTC的示例代码中已经明示: 往备份域寄存器中写一个特殊的字符,备份域寄存器是和RTC一起在断电下能保存数据的。 上电后检查下这个特殊字符是否还存在,如果存在,ok,RTC的数据应该也没丢,不需要重新配置它 如果那个特殊字符丢了,那RTC的定时器数据一定也丢了,那我们要重新来配置RTC了 这个过程包括时钟使能、RTC时钟源切换、设置分频系数等等,这个可以
[单片机]
如何有效地使用串口通讯接收数据
引言 在使用stm32或者其他单片机的时候,会经常使用到串口通讯,那么如何有效地接收数据呢?假如这段数据是不定长的有如何高效接收呢? 同学A:数据来了就会进入串口中断,在中断中读取数据就行了! 中断就是打断程序正常运行,怎么能保证高效呢?经常把主程序打断,主程序还要不要运行了? 同学B:串口可以配置成用DMA的方式接收数据,等接收完毕就可以去读取了! 这个同学是对的,我们可以使用DMA去接收数据,不过DMA需要定长才能产生接收中断,如何接收不定长的数据呢? DMA简介 题外话:其实,上面的问题是很有必要思考一下的,不断思考,才能进步。 什么是DMA DMA :全称Direct Memory Access,即直接存储器访问
[单片机]
如何有效地使用串口通讯接收数据
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved