STM32-CAN总线使用说明_第1页
STM32-CAN总线使用说明_第2页
STM32-CAN总线使用说明_第3页
STM32-CAN总线使用说明_第4页
STM32-CAN总线使用说明_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、STM32F103和永的CAN总线使用说明1.配置CAN时钟、映射、IO口RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_USARTlIRCC_APB2Periph_GPI0AIRCC_APB2Periph_GP10BIRCC_APB2Periph_GPI0CIRCC_APB2Periph_AFI0.ENABLE);GPIO_PinRemapConfig(GPIO_Remapl.CAN1.ENABLE);打开对应IO/*ConfigureCANpin:RX*/GPI

2、O_InitStmcture.GPIO_Pin=GPIO_Pin_8;GPIO_InitStmcture.GPIO_Mode=GPIO_Modc_IPU;GPIO_Init(GPIOB.&GPIOnitStnicturc);/*ConfigureCANpin:TX*/GPIO_InitStmcture.GPIO_Pin=GPIO_Pin_9;GPIO_InitStmcture.GPIO_Mode=GPIO_Modc_AF_PP;GPIO_Init(GPIOB.&GPIOnitStnicture);2使能CAN中断向量NVICniruclure.NVIC_IRQChannel=USB_LP_CA

3、Nl_RX0_IRQn;NVICnitStructure.NVIC_IRQChannelPreemptionPriority=0;NVICnitStruclure.NVICRQChannelSubPriority=1;NVICniruclure.NVIC_IRQChannelCmd=ENABLE;NVICLInit(&NVIC_InitStructure);3.CAN硬件寄存器配置初始化CAN_DeInit(CANl);与2.0库有区别;CAN_StructInit(&CAN_InitStructure);CANnitStructure.CAN_TTCM=DISABLE;CAN_InitStr

4、ucture.CAN_ABOM=ENABLE:总线断开后自动修复:CAN_InitStructure.CAN_AWUM=DISABLE:CANnitStructure.CAN_NART=DISABLE;CANnitStructure.CAN_RFLM=DISABLE;CAN_InitStructure.CAN_TXFP=DlSABLE;CANnitStructurcCAN_Mode=:CAN_Modc_LoopBack;/CAN_Modc_Silent;/CAN_Mode_Normal;/CAN_Mode_LoopBack;/CAN_InitStructure.CAN_SJW=CAN_SJW_

5、ltq;CANnitStructure.CAN_BS1=CAN_BSl_6tq;CANnitStructure.CAN_BS2=CAN_BS2_4tq:CANnitStructure.CAN_Presca!er=CAN_100k_Prescaler;CAN_Init(CAN1,&CANJnitStructure);4过滤器初始化CAN_FilterInitStructure.CAN_FilterNumber=O;CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;/CAN_FilterMode_IdList;标识符模式;/C

6、AN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdList;/r展模式滤波器CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit:/32位过滤器;CAN_FilterInitStructure.CAN_FilterIdHigh=0 x0260;适用TxMessage.StdId=Ox13;标识符寄存器:CAN_FilterInitStructure.CAN_FilterIdLow=OxOOOO;CAN_FilterInitStructure.CAN_FilterMa

7、skIdHigh=0 x0260;屏蔽寄存器(不屏蔽);CAN_FilterInitStructure.CAN_FilterMaskIdLow=OxOOOO;严屏蔽寄存器0表示屏蔽,1表示不屏蔽*/CAN_FilterInitStructure.CAN_FilterFIFOAssignment=0;CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;CAN_FilterInit(&CAN_FilterInitStructure);5打开CAN接收中断CANTConfig(CANl.CANJT_FN1PO.ENABLE);6编辑发送数据(标识符

8、模式和扩展模式)TxMessage.StdId=Ox10;TxMessage.RTR=CAN_RTR_DATA;TxMessage.IDE=CAN_ID_STD:/(标识符模式)/CAN_ID_EXT(扩展标识符模式)TxMessage.DLC=8:TxMessage.DataO=0 x01;TxMessage.Data1=0 x01;TxMessage.Data2=0 x01;TxMessage.Data3=0 x01;TxMessage.Data4=0 x01;TxMessage.Data5=0 x01;TxMessage.Data=0 x01;TxMessage.Data7=0 x01;

9、CAN_Transmit(CAN1、&TxMessage);7查询是否发送完成i=0;while(CAN_TransmitStatus(CAN1,TransmitMailbox)!=CANTXOK)&(i!=OxFFF)与2.0库有异;判断发送数据成功i+;if(CAN_TransmitStatus(CAN1,TransmitMailbox)=CANTXPENDING)表示数据正在发送中。&接收数据voidreceive(void)u32i;CanRxMsgRxMessage;i=0;while(CAN_MessagePending(CANl,CAN_FIFOO)1)&(i!=OxFF)冷+:

10、if(i=OxFF)表示没有收到数据elseRxMessage.StdId=OxOO:RxMessage.IDE=CAN_ID_STD;RxMessage.DLC=O;RxMessage.Data0=0 x00:RxMessage.Data1=0 x00:RxMessage.Data2=0 x00;RxMessage.Data3=0 x00;RxMessage.Data4=0 x00;RxMessage.Data5=0 x00;RxMessage.Data6=0 x00;RxMessage.Data7=0 x00:CAN_Receive(CANI、CAN_FIFOO.&RxMessage);9

11、中断函?voidUSB_LP_CANl_RXO_IRQHandler(void)CanRxMsgRxMessage;RxMessage.StdId=OxOO:RxMessage.ExtId=OxOO;RxMessage.IDE=O;RxMessage.DLC=O;RxMessage.FMI=O;RxMessage.Data0=0 x00;RxMessage.Data1=0 x00:RxMessage.Data2=0 x00:RxMessage.Data3=OxOO:RxMessage.Data4=0 x00;RxMessage.Data5=OxOO:RxMessage.Data6=0 x00:

12、RxMessage.Data7=0 x00:CAN_Receive(CAN1,CAN_FIFOO.&RxMessage);if(RxMessage.IDE=CAN_ID_STD)ret=I;elseret=0;发送ID与过滤器设置的对应求值算法:发送数据的ID要求:TxMessage.StdId=0 x00:TxMessage.ExtId=Ox1234;TxMessage.IDE=0 x04:TxMessage.RTR=0;过滤器所对应的配置:32位,标识符模式31:2423:1615:87:0STID10:3STID2:0EXID17:13EXID12:5EXID4:0IDERTR00000

13、0000000000001001000110100100CAN.FilterldHighCAN.FilterldLow000091A4得出:CAN_FilterInitStructure.CAN_FilterIdHigh=OxOOOO;CAN_FilterInitStructure.CAN_FilterIdLow=0 x91A4;备注总线模式说明:查询CAN总线上的数据,不对总线进行任何操作的设置:总线模式选择CAN_Mode_Silent不要在总线上发送数据;过滤器设置为:CAN_FilterInitStructure.CAN_FilterIdHigh=OxOOOO;CAN_FilterIn

14、itStructure.CAN_FilterIdLow=0 x0000;CAN_FilterInitStructure.CAN_FilterMaskIdHigh=OxOOOO;CAN_FilterInitStructure.CAN_FilterMaskIdLow=OxOOOO:开启接收函数:receive();voidreceive(void)u32i,Error;CanRxMsgRxMessage;i=0;while(CAN_MessagePending(CANLCAN_FIFOO)1)&(i!=OxFF)有异;判断接收到数据i+:if(i=OxFF)/status=CAN_GetFlagStatus(CAN1、CAN_FLAG_BOF);/Error=CAN_GetError(CAN1);/Usart1Send32Bit(Error);elseRxMessage.StdId=OxOO;RxMe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论