找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

Flux电机有限元分析教程西莫团购入口 | 奖励入口当当网购物入口 | 奖励入口欢迎使用!西莫论坛App开放下载Motor-CAD电机多物理域设计教材购买入口 | 奖励入口
★新会员论坛须知★《西莫电机技术》第39期发售火热进行中Flux电机电磁阀有限元分析教程团购入口 | 奖励入口论坛微信公众平台欢迎入驻
西莫电机及相关产品供需交流群开放邀请★ 论坛VIP会员申请 ★Motor-CAD.MANATEE电磁热振动噪声教程 | 奖励入口西莫团队欢迎您的加盟!
宣传推广合作请联系QQ:25941174西莫电机论坛微信群正式开放Flux变压器与电抗器有限元分析团购入口 | 奖励入口西莫电机论坛技术版区QQ群汇总
查看: 3675|回复: 4

[原创] stm32 can通信调试总结

[复制链接]

该用户从未签到

发表于 2012-6-20 10:00 | 显示全部楼层 |阅读模式 来自: 中国上海

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本人总是在这里劳驾大家,今天决定把我一段时间学习的成果与大家共享下!
下面的程序对初学者肯定有帮助的,因为我也是菜鸟!
STM32 CAN滤波器配置总结
经过一段时间的学习,终于把Can通信调通了。今天花费点时间总结下CAN通信各参数配置注意事项和方法,以便下回查阅。
这里采用分别介绍查询发送、中断接收和中断发送、中断接收两种方式。
第一步,初始化各端口与寄存器,这里只介绍CAN_Configuration代码如下:

CAN_InitTypeDef        CAN_InitStructure;
CAN_FilterInitTypeDef  CAN_FilterInitStructure;
  /* CAN register init */
CAN_DeInit();
CAN_StructInit(&CAN_InitStructure);
  /* CAN cell init */
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_Normal;// 正常模式
CAN_InitStructure.CAN_SJW=CAN_SJW_2tq;
CAN_InitStructure.CAN_BS1=CAN_BS1_9tq;
CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;
CAN_InitStructure.CAN_Prescaler=8; //36MHz/(1+8+7)*9 =250Kb/s
CAN_Init(&CAN_InitStructure);
  /* CAN filter init */初始化滤波器
CAN_FilterInitStructure.CAN_FilterNumber=0; //选择过滤器0
CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;//标识符屏蔽位模式
CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;//32位过滤器
CAN_FilterInitStructure.CAN_FilterIdHigh =tempid ;//接收板的CAN地址
CAN_FilterInitStructure.CAN_FilterIdLow =0x0004;//选择扩展标识符(见手册CAN_RIxR)
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xffff;//接收板的地址要和tempid一致
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0004;//下面有介绍
CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FIFO0; //选择FIFO0
CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;//使能过滤器
CAN_FilterInit(&CAN_FilterInitStructure); //进入初始化函数

          /* CAN FIFO0 message pending interrupt enable */
CAN_ITConfig(CAN_IT_FMP0, ENABLE);  //FIFO0 消息挂号中断屏蔽
CAN_ITConfig(CAN_IT_TME, ENABLE);           //发送邮箱空中断屏蔽
CAN_ITConfig(CAN_IT_BOF, ENABLE);   //离线中断允许

第二步,在嵌套向量中断控制中设置下,代码如下:
NVIC_InitTypeDef NVIC_InitStructure;
#ifdef  VECT_TAB_RAM  
  /* Set the Vector Table base location at 0x20000000 */
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else  /* VECT_TAB_FLASH  */
  /* Set the Vector Table base location at 0x08000000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);   
#endif
  /* Enable CAN RX0 interrupt IRQ channel */ //接收中断
NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN_RX0_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
//发送中断,如果是查询方式发送的话,下面代码不要
NVIC_InitStructure.NVIC_IRQChannel=USB_HP_CAN_TX_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//抢先中断优先
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//响应中断优先
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

第三步,编写发送子函数
CanTxMsg TxMessage; //定义数据结构类型变量
u8 TransmitMailbox = 0;
u16 i = 0;
TxMessage.ExtId=(tempid << 13);        //tempId 为接受板地址,应用过程中要左移13位
TxMessage.IDE=CAN_ID_EXT;//使用扩展帧
TxMessage.RTR=CAN_RTR_DATA;//发送数据帧
TxMessage.DLC= 1; //设置发送数据的长度
TxMessage.Data[0] = SendData;//赋值待发送
TransmitMailbox = CAN_Transmit(&TxMessage);//开始发送数据
i = 0;
//通过检查CANTXOK位来确认发送是否成功
while((CAN_TransmitStatus(TransmitMailbox) != CANTXOK) && (i != 0xFF))
  {
    i++;
   }

第四步,编写中断接收函数,注:下面代码在stm32f10x_it.c中编写
Void  USB_LP_CAN_RX0_IRQHandler(void)
{
  CanRxMsg  can_rx_one_frame; //定义接收数据变量
CAN_Receive(CAN_FIFO0,&can_rx_one_frame);//接收数据函数
  Receive_data = can_rx_one_frame.Data[0];//接收到的数据转存给变量Receive_data
CAN_FIFORelease(CAN_FIFO0);// 释放一 FIFO0
}
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过

该用户从未签到

发表于 2013-2-27 15:34 | 显示全部楼层 来自: 中国安徽合肥
楼主辛苦了,学习中
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

签到天数: 10 天

连续签到: 1 天

[LV.3]偶尔看看II

发表于 2013-3-7 15:58 | 显示全部楼层 来自: 中国湖北武汉
辛苦了,感谢下你的无私分享精神
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

发表于 2013-3-8 22:36 | 显示全部楼层 来自: 中国广东广州
好好看一下 ···
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

发表于 2017-5-6 15:45 | 显示全部楼层 来自: 中国山东潍坊
楼主可以分享一下这方面的资料 对于初学者或更好
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

西莫电机论坛微信公众平台欢迎您的关注!

QQ|Archiver|手机版|小黑屋|西莫电机圈 ( 浙ICP备10025899号-3|浙公网安备:33028202000436号 )

GMT+8, 2024-12-23 00:46 , Processed in 0.052154 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表