欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOCX文档下载  

    STM32F103芯片CAN总线应用程序.docx

    • 资源ID:1072787       资源大小:39.98KB        全文页数:5页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    STM32F103芯片CAN总线应用程序.docx

    *Copyright(a)日期:修改记录:描述:STM32共有14组过滤器,用以对接收到的帧进展过滤。每组过滤器包括了2个可配置的32位存放器:CAN_FxR0和CAN_FxRl<.对于过滤器组,可以将其配置成屏蔽位模式,这样CAN_FxR0中保存的就是标识符匹配值,CAN-FxRl中保存的是屏蔽码,即CAN_FxRl中如果某一位为1,那么CAN,F×R0中相应的位必须与收到的帧的标志符中的相应位吻合才能通过过滤器;CAN-FxRl中为0的位表示CAN_FxR0中的相应位可不必与收到的帧进展匹配。过滤器组还可以被配置成标识符列表模式,此时CAN.F×R0和CAN_FxRl中的都是要匹配的标识符,收到的帧的标识符必须与其中的一个吻合才能通过过滤。例如:CAN-FiIterInitStructure.CAN-FiIterNumber=O;设置第一组过滤器CAN_FilterlnitStructure.CAN_FilterMode=CAN_FilterMode_ldMask;屏蔽位模式CAN_FilterlnitStructure.CAN_FilterScale=CAN_FilterScale_32bit;/32位CAN-FiIterInitStructure.CAN-FiIterIdHigh=(OXO635<<5);接收ID为635的消息11位帧ID标准帧因此左移5CAN_FilterlnitStructure.CAN_FilterldLow=OxOOOO;CAN_FilterlnitStructure.CAN_FilterMaskldHigh=Oxffff;/CAN-FiIterInitStructure.CAN-FiIterMaskIdLow=Oxffff;CAN_FilterlnitStructure.CAN_FilterFIFOAssignment=CAN_FIFOO;第一组过滤器指向FIFOOCAN-FiIterInitStructure.CAN-FiIterActivation=ENABLE;CAN_Filterlnit(&CAN_FilterlnitStructure);滤波器配置详细如下:1、对扩展数据帧进展过滤:(只接收扩展数据帧)CAN-FilterlnitStructure-CAN-FiIterIdHigh=(u32)slave_id«3)&0xFFFF0000)»16;CAN_FilterlnitStructure.CAN_FilterldLo=(u32)slave_id«3)|CANJD_EXT|CAN_RTR_DA7A)&0xFFFF;CAN_FilterlnitStructure.CAN_FilterMaskldHigh=OxFFFF;CAN_FilterlnitStructure.CAN_FilterMaskldLow=OxFFFF;(注:标准帧数据帧、标准远程帧和扩展远程帧均被过滤)2、对扩展远程帧过滤:(只接收扩展远程帧)CAN-FilterlnitStructure-CAN-FiIterIdHigh=(u32)slave_id«3)&0xFFFF0000)»16;CAN_FilterlnitStructure.CAN_FilterldLow=(u32)slave_id«3)|CAN_ID_EXT|CAN_RTR_REMOTE)&OxFFFF;CAN_FilterlnitStructure.CAN_FilterMaskldHigh=OxFFFF;CAN_FilterlnitStructure.CAN_FilterMaskldLow=OxFFFF;3、对标准远程帧过滤:(只接收标准远程帧)CAN-FiIterInitStructure.CAN-FiIterIdHigh=(u32)slave_id«21)&0xffff0000)»16;CAN_FilterlnitStructure.CAN_FilterldLow=(u32)slavejd<<21)CAN_ID_STD|CAN_RTR_REMOTE)&Oxffff;CAN_FilterlnitStructure.CAN_FilterMaskldHigh=OxFFFF;CAN_FilterlnitStructure.CAN_FilterMaskldLow=OxFFFF;4、对标准数据帧过滤:(只接收标准数据帧)CAN_FilterlnitStructure.CAN_FilterldHigh=(u32)slave_id«21)&0xffff0000)»16;CAN_FilterlnitStructure.CAN_FilterldLow=(u32)slavejd<<21)CAN_ID_STDCAN_RTR_DA7A)&0xffff;CAN_FilterlnitStructure.CAN_FilterMaskldHigh=OxFFFF;CAN_FilterlnitStructure.CAN_FilterMaskldLow=OxFFFF;5、对扩展帧进展过滤:(扩展帧不会被过滤掉)CAN-FiIterInitStrUCtUre.CAN-FiIterIdHigh=(u32)slave_id«3)&0xFFFF0000)»16;CAN_FilterlnitStructure.CAN_FilterldLow=(u32)slave_id«3)|CAN_ID_EXT)&0xFFFF;CAN_FilterlnitStructure.CAN_FilterMaskldHigh=OxFFFF;CAN_FilterlnitStructure.CAN_FilterMaskldLow=OxFFFC;6、对标准帧进展过滤:(标准帧不会被过滤掉)CAN_FilterlnitStructure.CAN_FilterldHigh=(u32)slave_id«21)&0xffff0000)»16;CAN_FilterlnitStructure.CAN_FilterldLow=(u32)slavejd<<21)CAN_ID_STD)&Oxffff;CAN-FilteiInitStructure.CAN-FiIterMaskIdHigh=OxFFFF;CAN_FilterlnitStructure.CAN_FilterMaskldLow=OxFFFC;注:SlaVeJd为要过滤的id号。*/ftinclude1,CAN.hn/*/全局变量声明/引用处externvolatileunsignedcharCan_Flag;/CAN发送数据完成flag标志/*描述:CAN初始化、CAN波特率=PCLKl/(BRP+l)*(TSl+TS2+3)*/voidlnit_CAN(void)(NVICJnitTypeDefNviCJnitStructure;GPIOJnitTypeDefGPIO_lnitStructure;CAN_lnitTypeDefCANJnitStructure;CAN_FilterlnitTypeDefCAN_FilterlnitStructure;RCjAPBlPeriPhClOCkCmd(RCJAPBlPeriph_CANl,ENABLE);/CAN时钟使能RCC,APB2PeriphClockCmd(RCC,APB2Peph,GPIOAzENABLE);/I/O口时钟使能*ConfigureCANpin:RXPAll*/GPIO_lnitStructure.GPIO_Pin=GPIO_Pin_ll;GPIO_lnitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_lnit(GPIOA,&GPIO_lnitStructure);*ConfigureCANpin:TXPA12*/GPIO_lnitStructure.GPIO_Pin=GPIO_Pin_12;GPIO_lnitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_lnit(GPIOA,&GPIO_lnitStructure);*CANregisterinit*/CAN-DeInit(CANl);CAN_Structlnit(&CAN_lnitStructure);*CANcellinit*/CANjnitstructureCANJTCM=DISABLE;制止时间触发通信模式CAN_lnitStructure.CAN_ABOM=DISABLE;CAN_lnitStructure.CAN_AWUM=DISABLE;CAN_lnitStructure.CAN_NART=DISABLE;CAN_lnitStructure.CAN_RFLM=DISABLE;CAN_lnitStructure.CAN_TXFP=DISABLE;睡眠模式通过去除sleep位来唤醒 ENABLE;报文自动重传接收溢出时,FIFO未锁定发送的优先级由标示符的大小决定CAN_lnitStructure.CAN_Mode=CAN_Mode_Normal; /CAN_Mode_LoopBack;/CAN_lnitStructure.CAN_SJW=CAN_SJW_ltq;/SJW=O波特率计算,PCLKl=36MHZ,CAN 波特率=36MHZ/(2+l)*(15+6+3)=500KbSCAN_lnitStructure.CAN_BSl=CAN_BSl_16tq;/TS1=15波特率计算,PCLK1=36MHZ,CAN 波特率=PCLKi/(BRP+l)*(TSl+TS2+3)CAN_lnitStructure.CAN_BS2=CAN_BS2_7tq; /TS2=6CAN_lnitStructure.CAN_Prescaler=3;/BRP=29/ 45=50KCAN_lnit(CANlz&CAN_lnitStructure);* CAN filter init */CAN_FilterlnitStructure.CANeFiIterNumber=O;过滤器CAN_FilterlnitStructure.CAN_FilterMode=CAN_FilterMode_ldMask; 模式.CAN_FilterlnitStructure.CAN_FilterScale=CAN_FilterScale_32bit;CAN_FilterlnitStructure.CAN_FilterldHigh=OxOOOO;CAN_FilterlnitStructure.CAN_FilterldLow=OxOOOO;CAN_FilterlnitStructure.CAN-FilterMaskIdHigh=OxOOOO;CAN_FilterlnitStructure.CAN_FilterMaskldLow=OxOOOO;CAN_FilterlnitStructure.CAN_FilterFIFOAssignment=0;过滤器指向FIFOOCAN-FiIterInitStructure.CAN-FiIterActivation=ENABLE;CAN_Filterlnit(&CAN_FilterlnitStructure);* Enable CAN RXO interrupt IRQchanneI*/NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);第1组屏蔽位"2位第一组中断优先级组选择0组使用NVIC_lnitStructure. NVICJRQChanneI=/USB_H P_CAN l_TX_IRQn接收中断使能NVIC_lnitStructure. NvicjRQchanneIPreemptionPriority = 1;NVIC_lnitStructure. NvicjRQChanneISubPriority = 2;NVICjnitstructureNVICJ RQChannelCmd = ENABLE;NVIC_lnit(&NVIC_lnitStructure);* CAN FIFOO message pending interrupt enable */ CAN_ITConfig(CAN 1,CAN_IT_FMPO, ENABLE);能过滤器中断USB_LP_CAN l_RXO_IRQn;抢占优先级响应优先级使/*描述:CAN发送一标准帧数据*/voidCAN_Send(unsignedshortintSID,unsignedchardatalzunsignedchardata2zunsignedchardata3zunsignedchardata4,unsignedchardata5,unsignedchardata6,unsignedchardata7)/CAN发送一标准帧数据CanTxMsgTxMessage;CanRxMsgRxMessage;unsignedcharTransmitMaiIbox;Can_Flag=0;*transmit1message*/TXMeSSage.StdId=SID;/X)XlO1;/SIDOxOO;ID标示符/TxMessage.Extld=0xl234;TxMessage.RTR=CAN_RTR_DATA;TxMessage.IDE=CAN_ID_STD;选择数据帧/CAN_ID_EXT;/选择标准帧TxMessage.DLC=7;TxMessage.DataO=datal;/datal;TxMessage.Datal=data2;/data2;TxMessage.Data2=data3;/data3;TxMessage.Data3=data4;/data4;TxMessage.Data4=data5;/data5;TxMessage.Data5=data6;/data6;TxMessage.Data6=data7;/data7;/TxMessage.Data7=0x00;/data8;TransmitMaiIbox=CAN_Transmit(CANl,&TxMessage);while(CAN_TransmitStatus(CANl,TransmitMaiIbox)!=CANTXOK);Can_Flag=1;*receive*/RxMessage.StdId=OxOO;RxMessage.lDE=CAN_ID_STD;RxMessage-DLC=O;RxMessage-Data0=0x00;RxMessage.Datal=OxOO;CAN_Receive(CANl,CAN_FIFOO,&RxMessage);)*FunctionName*Description*:USB_LP_CAN_RXO_IRQHandler:ThisfunctionhandlesUSBLowPriorityorCANRXOinterruptsrequests.*Input*Output*Return:None:None:None*voidUSB_LP_CANl_RXO_IRQHandler(void)/CAN中断接收程序(CanRxMsgRxMessage;RxMessage.StdId=OxOO;RxMessage-ExtId=OxOO;RxMessageJDE=O;RxMessage.DLC=O;RxMessage.FMI=O;RxMessage.DataO=OxOO;RxMessage.Datal=0x00;CAN-Receive(CANCAN-FIFOO,&RxMessage);*if(R×Message.Extld=0xl234)&&(RxMessage.IDE=CANJD_EXT)&&(RxMessage.DLC=2)&&(RxMessage.DatalRxMessage.Data0<<8)=0xDECA)(ret=1;)else(ret=O;)*/)*

    注意事项

    本文(STM32F103芯片CAN总线应用程序.docx)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开