stm32f0读取fifo的值的can fifo是共用的吗

stm32&can通讯,&不知哪个能用,先转载收集
#include "stm32f10x.h"
#include "can.h"
GPIO_CAN&&&&&&&&&&&&&&&&&&&GPIOA
RCC_APB2Periph_GPIO_CAN&&&&RCC_APB2Periph_GPIOA
GPIO_Pin_RX&&&&&&&&&&&&&&&&GPIO_Pin_11
GPIO_Pin_TX&&&&&&&&&&&&&&&&GPIO_Pin_12
GPIO_Remap_CAN&&&&&&&&&&&&&GPIO_Remap1_CAN1
#define LED_SET() GPIO_SetBits(GPIOB,GPIO_Pin_15)
#define LED_RST() GPIO_ResetBits(GPIOB,GPIO_Pin_15)
void CAN_config_init(void)
&&CAN_InitTypeDef&&&&&&&&CAN_InitS
&&CAN_FilterInitTypeDef&&CAN_FilterInitS
&&CAN_DeInit(CAN1);
&&CAN_StructInit(&CAN_InitStructure);
36M 250k速率
&&CAN_InitStructure.CAN_TTCM=DISABLE;
&&CAN_InitStructure.CAN_ABOM=DISABLE;
&&CAN_InitStructure.CAN_AWUM=DISABLE;
&&CAN_InitStructure.CAN_NART=DISABLE;
&&CAN_InitStructure.CAN_RFLM=DISABLE;
&&CAN_InitStructure.CAN_TXFP=DISABLE;
&&CAN_InitStructure.CAN_Mode=CAN_Mode_N
&&CAN_InitStructure.CAN_SJW=CAN_SJW_1
&&CAN_InitStructure.CAN_BS1=CAN_BS1_12
&&CAN_InitStructure.CAN_BS2=CAN_BS2_3
&&CAN_InitStructure.CAN_Prescaler=9;
&&CAN_Init(CAN1,
&CAN_InitStructure);
&&CAN_FilterInitStructure.CAN_FilterNumber=0;
&&CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdM
&&CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32
&&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;
&&CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
&&CAN_FilterInit(&CAN_FilterInitStructure);&
void CAN_init(void)
&&&&NVIC_InitTypeDef
NVIC_InitS
&&&&GPIO_InitTypeDef
GPIO_InitS&&&
首先打开电源及时钟
&&&&RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO
|RCC_APB2Periph_GPIO_CAN, ENABLE);
&&&&RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1,
&&&&NVIC_InitStructure.NVIC_IRQChannel
= USB_LP_CAN1_RX0_IRQn;
&&&&NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority
&&&&NVIC_InitStructure.NVIC_IRQChannelSubPriority
&&&&NVIC_InitStructure.NVIC_IRQChannelCmd
&&&&NVIC_Init(&NVIC_InitStructure);
&&&&NVIC_InitStructure.NVIC_IRQChannel
= USB_HP_CAN1_TX_IRQn;
&&&&NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority
&&&&NVIC_InitStructure.NVIC_IRQChannelSubPriority
&&&&NVIC_InitStructure.NVIC_IRQChannelCmd
&&&&NVIC_Init(&NVIC_InitStructure);
然后配置pin
&&&&GPIO_InitStructure.GPIO_Pin
= GPIO_Pin_RX;
&&&&GPIO_InitStructure.GPIO_Mode
= GPIO_Mode_IPU;
&&&&GPIO_Init(GPIO_CAN,
&GPIO_InitStructure);
&&&&GPIO_InitStructure.GPIO_Pin
= GPIO_Pin_TX;
&&&&GPIO_InitStructure.GPIO_Mode
= GPIO_Mode_AF_PP;
&&&&GPIO_InitStructure.GPIO_Speed
= GPIO_Speed_50MHz;
&&&&GPIO_Init(GPIO_CAN,
&GPIO_InitStructure);
&&&&GPIO_PinRemapConfig(GPIO_Remap_CAN
, ENABLE);
波特率过滤器初始化
&&&&CAN_config_init();
&&&&CAN_ITConfig(CAN1,
CAN_IT_FMP0 | CAN_IT_FF0 | CAN_IT_FOV0,
ENABLE);&&// fifo0中断
&&&&CAN_ITConfig(CAN1,
CAN_IT_FMP1 | CAN_IT_FF1 | CAN_IT_FOV1,
ENABLE);&&// fifo1中断
&&&&CAN_ITConfig(CAN1,
CAN_IT_TME,
DISABLE);&&&&&&&&&&&&&&&&//
int CAN_tx_data(void)
&&&&CanTxMsg
&&&&uint8_t
TransmitMailbox = 0;
&&&&TxMessage.StdId=0x001;
&&&&TxMessage.RTR=CAN_RTR_DATA;
&&&&TxMessage.IDE=CAN_ID_STD;
&&&&TxMessage.DLC=4;
&&&&TxMessage.Data[0]=0x04;
&&&&TxMessage.Data[1]=0x08;
&&&&TxMessage.Data[2]=0x0c;
&&&&TxMessage.Data[3]=0x10;
&&&&TransmitMailbox
= CAN_Transmit(CAN1, &TxMessage);
用于检查消息传输是否正常
&&while((CAN_TransmitStatus(CAN1,
TransmitMailbox) != CANTXOK) && (i != 0xFF))
检查返回的挂号的信息数目
&&while((CAN_MessagePending(CAN1,
CAN_FIFO0) & 1) && (i != 0xFF))
void USB_LP_CAN1_RX0_IRQHandler(void)
&&&&CanRxMsg
== CAN_GetITStatus(CAN1,CAN_IT_FF0))
&&&&&&&&CAN_ClearITPendingBit(CAN1,CAN_IT_FF0);
if(SET == CAN_GetITStatus(CAN1,CAN_IT_FOV0))
&&&&&&&&CAN_ClearITPendingBit(CAN1,CAN_IT_FOV0);
&&&&&&&&CAN_Receive(CAN1,
CAN_FIFO0, &RxMessage);
&&&&&&&&if(RxMessage.StdId==0x001&&RxMessage.DLC==4)
&&&&&LED_SET();
&&&&&//&&&printf("CAN_FIFO0
RxMessage.StdId is 0x%x\r\n",RxMessage.StdId);
&&&&&//&&&printf("RxMessage.DLC
0x%x\r\n",RxMessage.DLC);&&
&&&&&&//&&for(i
= 0; i & RxMessage.DLC; i++)
&&&&&//&&&{
&&&&&//&&&&&&&printf("data[%d]
is 0x%x\r\n",i,RxMessage.Data[i]);
&&&&&&//&&}
&&&&&//&&&printf("\r\n");&&
void LED_init(void)
&GPIO_InitTypeDef GPIO_InitS
&RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
&GPIO_InitStruct.GPIO_Mode =
GPIO_Mode_Out_PP;
&GPIO_InitStruct.GPIO_Pin =
GPIO_Pin_15;
&GPIO_InitStruct.GPIO_Speed =
GPIO_Speed_2MHz;
&GPIO_Init(GPIOB,
&GPIO_InitStruct);
void soft_delayms(u16 t)
&while(t--)
&&tt = 10000;
&&while(tt--);
文件:can.h
&#ifndef __CAN_H
#define&__CAN_H
#include "stm32f10x.h"
void CAN_config_init(void);
void CAN_init(void);
int CAN_tx_data(void);
void LED_init(void);
void soft_delayms(u16 t);
文件:main.c
#include "stm32f10x.h"
#include "can.h"
int main(void)
&SystemInit();
&LED_init();
&CAN_config_init();
&CAN_init();
&CAN_tx_data();
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。还没有帐号? 赶紧
用户版块帖子
STM32的CAN总线的接收双FIFO使用方法-------&重要
在线时间18430小时
铜币14731威望2234贡献值0银元0
本帖被 eric2013 从 RL-RTX & CMSIS-RTOS RTX 复制到本区()
通过下面的框图我们可以看到,STM32F013有两个接收FIFO=1200) window.open('/attachment/Fid_29/29_58_2544f3caccc2a12.png?119');" style="max-width:1200" onload="if(is_ie6&&this.offsetWidth>1200)this.width=1200;" >但是实际的使用中如何让着两个FIFO都被使用呢,解决办法就在这里,1. STM32F103有0-13共14个过滤器组,每个过滤器组都可以绑定指定的FIFO。=1200) window.open('/attachment/Fid_29/29_58_0fedc3d886f72d8.png?54');" style="max-width:1200" onload="if(is_ie6&&this.offsetWidth>1200)this.width=1200;" >=1200) window.open('/attachment/Fid_29/29_58_da5cbc0ddb019e0.png?10');" style="max-width:1200" onload="if(is_ie6&&this.offsetWidth>1200)this.width=1200;" >2. 特别需要注意的一点是,FIFO0和FIFO1的接收对应不同的中断入口,切记。分别是 DCD&&&& USB_LP_CAN1_RX0_IRQH USB Low&&Priority or CAN1 RX0DCD&&&& CAN1_RX1_IRQHandler&&&&&&&&; CAN1 RX1=========================================================================================下面的截图就是将过滤器分配给不同FIFO的一个简单例子框图=1200) window.open('/attachment/Fid_29/29_58_9eebcc3.png?93');" style="max-width:1200" onload="if(is_ie6&&this.offsetWidth>1200)this.width=1200;" >
超级赛亚人1 :燃烧吧,小宇宙!
访问内容超出本站范围,不能确定是否安全
限100 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
您目前还是游客,请
&回复后跳转到最后一页
Powered by & Copyright Time now is:01-28 15:53 &
版权所有 Gzip enabled
Total 0.081543(s) query 4,汽车的CAN和STM32自带的CAN区别? - STM32 - 意法半导体STM32/STM8技术社区
后使用快捷导航没有帐号?
查看: 4477|回复: 4
汽车的CAN和STM32自带的CAN区别?
在线时间1 小时
主题帖子精华
初级会员, 积分 197, 距离下一级还需 3 积分
初级会员, 积分 197, 距离下一级还需 3 积分
汽车的CAN和STM32自带的CAN在电气性能上有何区别?可不可以直接接到汽车的OBDII上面的CAN上,电平匹配吗?想做一个简单的行车电脑,用来显示汽车的一些动态参数,想采用STM32芯片不知是否可行?
STM32手册描述:
控制器区域网络(CAN)
CAN接口兼容规范2.0A和2.0B(主动) ,位速率高达1兆位/ 秒。它可以接收和发送11位标识符的标准帧,也可以接收和发送29位标识符的扩展帧。具有3 个发送邮箱和2 个接收FIFO,3 级14个可调节的滤波器。
不知道能否直接连接汽车上的CAN?没接触过CAN,也没接触过车载电子,望大家给点指导。
欢迎加入STM32/STM8社区技术交流群:& & &STM32L系列开发群:
ST金币1620
在线时间433 小时
主题帖子精华
RE:汽车的CAN和STM32自带的CAN区别?
是一样的,他们走的都是标准CAN协议。不建议直接连接,最好加上隔离和CAN SN251之类的芯片。
在线时间1 小时
主题帖子精华
初级会员, 积分 197, 距离下一级还需 3 积分
初级会员, 积分 197, 距离下一级还需 3 积分
回复:汽车的CAN和STM32自带的CAN区别?
回复第 2 楼 于 11:20:02发表:
是一样的,他们走的都是标准CAN协议。不建议直接连接,最好加上隔离和CAN SN251之类的芯片。
直连,不做隔离可以吗?
欢迎加入STM32/STM8社区技术交流群:& & &STM32L系列开发群:
在线时间18 小时
主题帖子精华
金牌会员, 积分 2281, 距离下一级还需 719 积分
金牌会员, 积分 2281, 距离下一级还需 719 积分
RE:汽车的CAN和STM32自带的CAN区别?
在线时间1 小时
主题帖子精华
初级会员, 积分 197, 距离下一级还需 3 积分
初级会员, 积分 197, 距离下一级还需 3 积分
RE:汽车的CAN和STM32自带的CAN区别?
已经明白了谢谢!
欢迎加入STM32/STM8社区技术交流群:& & &STM32L系列开发群:
站长推荐 /1
本次活动管理已根据网友报名,及实际贡献各选出20人大名单(包含原创之星、互助之星、活跃之星三项,可能有疏漏)。请大家参与评选投票,每人最多投5票~
Tel: 3-8064
备案号: 苏ICP备号-2
|||意法半导体STM32/STM8技术社区
Powered by温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
&&& “如果你用的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_IdM& &CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32&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);&&&&&&& //}
阅读(5615)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'关于STM32中CAN1_RX0_IRQn和CAN1_RX1_IRQn的使用',
blogAbstract:'&&& “如果你用的CAN引脚是PA11和PA12,接收中断用CAN1_RX0_IRQn。如果CAN引脚用的是PB8和PB9,也就是用重定义的引脚,接收中断用CAN1_RX1_IRQn。由于PA11和PA12也是USB的引脚,所以非互联型且带CAN控制器的微控制器的库文件在起名字时用了USB_LP_CAN1_RX0_IRQn。”',
blogTag:'can',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:1,
permalink:'blog/static/',
commentCount:3,
mainCommentCount:3,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}STM32的can2和CAN1竟然有关联?!!!
调试STM32F107的CAN2竟然无法接收。通过与另一个代码对比,终于发现想用CAN2,则必须把CAN1的RCC也配置上,就可以接收了。
上网查了下,21IC给解释/icview--1.html。手册也懒得看了,总之,CAN2和CAN1是有关联的。对于STM32F407可能也是如此。
如果设置两遍也不行。也是CAN2不能接收。
比如这样设置两遍:
& RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
& RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2, ENABLE);
& RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
& RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2, ENABLE);
那么不行,只有在整个工程中设置一遍才可以,如下:
& RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
& RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2, ENABLE);
只有先使能CAN1 &然后才使能CAN2 &否则有的不好用。
上面这些都是试出来的,没看文档,没理论依据。
关于FIFO 的配置 &可以看这个文章
而我目前只是采用一个FIFO0.
好用就得。实时性对我来说是次要的。
看过本文的人也看了:
我要留言技术领域:
取消收藏确定要取消收藏吗?
删除图谱提示你保存在该图谱下的知识内容也会被删除,建议你先将内容移到其他图谱中。你确定要删除知识图谱及其内容吗?
删除节点提示无法删除该知识节点,因该节点下仍保存有相关知识内容!
删除节点提示你确定要删除该知识节点吗?

我要回帖

更多关于 stm32 fifo 的文章

 

随机推荐