关于STM32中CAN1_RX0_IRQn和CAN1_RX1_IRQn的使用
http://blog.csdn.net/niepangu/article/details/38842073
“如果你用的CAN引脚是PA11和PA12,接收中断用CAN1_RX0_IRQn。如果CAN引脚用的是PB8和PB9,也就是用重定义的引脚,接收中断用CAN1_RX1_IRQn。由于PA11和PA12也是USB的引脚,所以非互联型且带CAN控制器的微控制器的库文件在起名字时用了USB_LP_CAN1_RX0_IRQn。”
以上内容参考于网络,后经证实,以上说法是不正确的,理由如下:
STM32有2个3级深度的接收缓冲区:FIFO0和FIFO1,每个FIFO都可以存放3个完整的报文,它们完全由硬件来管理。如果是来自FIFO0的接收中断,则用CAN1_RX0_IRQn中断来处理。如果是来自FIFO1的接收中断,则用CAN1_RX1_IRQn中断来处理。在CAN的初始化配置过程中,用CAN_FilterFIFOAssignment来选择要使用FIFO。
示例如下:
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 = 0; //关联FIFO0
CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
CAN_FilterInit(&CAN_FilterInitStructure);
CAN_FilterInitStructure.CAN_FilterNumber = 14;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 1; //关联FIFO1
CAN_FilterInit(&CAN_FilterInitStructure);
2. 开启CAN中断
/* IT Configuration for CAN1 */
CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);
CAN_ITConfig(CAN1, CAN_IT_FMP1, ENABLE);
/* IT Configuration for CAN2 */
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中CAN1_RX0_IRQn和CAN1_RX1_IRQn的使用相关推荐
- STM32中GPIO的8种工作模式
一.推挽输出:可以输出高.低电平,连接数字器件:推挽结构一般是指两个三极管分别受两个互补信号的控制,总是在一个三极管导通的时候另一个截止.高低电平由IC的电源决定.形象点解释:推挽,就是有推有拉,任何 ...
- Arduino处理STM32中的多个串口通讯问题
简 介: 对于在Arduino下开发STM32的程序,对于STM32所具有的三个硬件USART进行测测试.结果显示可以使用这些串口完成相应的数据的输入与输出.但是涉及到以下两个问题,还没有得到解决:问 ...
- STM32中GPIO的8种工作模式!
一.推挽输出:可以输出高.低电平,连接数字器件:推挽结构一般是指两个三极管分别受两个互补信号的控制,总是在一个三极管导通的时候另一个截止.高低电平由IC的电源决定. 推挽电路是两个参数 ...
- STM32中IO口的8中工作模式
该文摘自:http://blog.csdn.net/kevinhg/article/details/17490273 一.推挽输出:可以输出高.低电平,连接数字器件:推挽结构一般是指两个三极管分别受两 ...
- STM32中GPIO的8种模式
STM32中GPIO的8种模式
- STM32中NVIC_SystemReset()函数的作用?什么时候用?
STM32中NVIC_SystemReset()函数的作用?什么时候用? STM32软件复位有两种方式 (1)方式一:NVIC_SystemReset()函数用来复位STM32. 注意1:从SYSRE ...
- STM32中的timers中断处理函数
STM32中的timers中断处理函数 1.在固件库函数里面,用来读取中断状态寄存器的值判断中断类型的函数是: ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, ...
- 9.STM32中对SysTick_Init()函数(sysTick_Config()、TimingDelay_Decrement()自定义)和Delay_us()的理解
STM32中对SysTick_Init()函数(sysTick_Config().TimingDelay_Decrement()自定义)和Delay_us()的理解: 实验:3个LED灯以500ms的 ...
- 8.STM32中对ADC1_Config()函数(ADC1_GPIO_Config()和ADC1_Mode_Config())的理解(自定义)测试ADC转换电压值输出到终端上。
STM32中对ADC1_Config()函数(ADC1_GPIO_Config()和ADC1_Mode_Config())的理解:
最新文章
- Centos下安装mysql 总结
- 微软发起Java on Azure调查,呼吁Java社区积极参与
- 忘掉什么鬼并发,先听完这个故事!
- 在IE7下使用Fiddler
- 广东网络借贷中介整改验收,留给平台的时间只有8天!
- P4720 【模板】扩展卢卡斯定理/exLucas(无讲解,纯记录模板)
- Linux学习第五篇之文件处理命令touch、cat、tac、more、less、head、tail
- c# 与 c++ 界面同框终极技巧
- 深度学习VS机器学习——到底什么区别
- python培训内幕_刚刚,Python 内幕被爆出!老码农:没控制住,心态已崩!
- RocketMq在windows下安装
- 犯了这15个错误,你可能会上征信“黑名单”
- 第19部分- Linux x86 64位汇编GDB单步调试
- 月薪4万是一种什么样的感受?
- websocket服务器无响应,WebSocket服务器因某些原因无法正常工作(WebSocket server not working for some reasons)...
- FusionCharts Free
- 英特尔会是下一个诺基亚吗?
- myeclipse下载git中的代码步骤
- linux下编译GCC
- 螺栓不松没事,一松就断?是什么原因?
热门文章
- 聊聊成为大神路上的过程
- Python eval函数用法简介
- Java求n以内素数_求0到n之间素数个数的序列(Java)
- oracle locked time,Oracle里面的用户smsdb无法登录 LOCKED(TIMED)
- 国内数据中心制冷系统设计与发展
- 数据中心在疫情期间发挥的作用
- 数据中心节能环保政策汇总分析:2022年新建大型数据中心PUE需达到1.4以下
- 串行和并行的区别_入门参考:从Go中的协程理解串行和并行
- java什么是服务治理平台_Java | Spring Cloud 是如何实现服务治理的
- Py之cupy:cupy的简介、安装、使用方法之详细攻略