资源描述:
《STM32的CAN现场总线应用经验总结》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、STM32的CAN现场总线应用经验总结CAN现场总线的应用最重要的就是其接口端口映射、初始化及数据的发送、接收。1•接口映射STM32中的CAN物理引脚可以设置成三种:默认模式、重定义地址1模式、重定义地址2模式。CAN信号可以彼映射到端口A、端口B或端口D上,如下表所示,对于端口D,在36、48和64脚的封装上没有重映射功能。表1:CAN复用功能重映射复用功能CANREMAPLl:0J=M00uCANREMAP[l:0J=H10MCANREMAP[l:0]=Hir,CANRXPA11PB8PDOCANTX
2、PA12PB9PD1重映射不适用于36脚的封装当PDO和PD1没有被重映射到OSCJN和OSC_OUT时,重映射功能只适用于100脚和144脚的封装上默认模式/*ConfigureCANpin:RX*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_ll;GPIOInitStructure.GPIOMode=GPIOMode1PU;GPIO_Init(GPIO_CAN_Key,&GPlO.InitStructure);/*ConfigureCANpin:TX*/GPI0_InitS
3、tructure.GP10_Pin=GP10_Pin_12;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIOJnit(GPIOA,&GPIOJnitStructure);重定义地址1模式/*ConfigureCANpin:RX*/GPIO_InitStructure.GPlO_Pin=GPIO_Pin_8;GPIOInitStructure.GPIOMode=GPIOMode1PU;GPIOJnit(GPIO_CAN_Key,&GPIO.InitStruct
4、ure);/*ConfigureCANpin:TX*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;GPIO_InitStructure.GPlO_Mode=GPlO_Mode_AF_PP;GPIOJnit(GPIO_CAN_Key,&GPIO.InitStructure);/^ConfigureCANRemap重映射*/GPIO_PinRemapConfig(GPIO_Remap1_CAN,ENABLE);/*ConfigureCANpin:RX*/GPIO_InitStr
5、ucture.GPIO_Pin=GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_Init(GPIO_CAN_Key,&GPIO_InitStructure);/*ConfigureCANpin:TX*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_l;GPIO」nitStirictui*e.GPIO_M(xle=GPIO_Mode_AF_PP;GPIO_Init(GPIO_CAN_Key,&GPIO_InitS
6、tructure);/^ConfigureCANRemap重映射*/GPIO_PinRemapConfig(GPIO_Remap2_CAN,ENABLE);设置完CAN的引脚之后还需要打开CAN的时钟:/*CANPeriphclockenable*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN,ENABLE);2.初始化2.1.1CAN单元初始化tBS2=lTS2I2i01±ljXtqCAN单元初始化最重要的就是波特率的设置,原理如下:V位时间>同步段时间段1(BSD
7、时间段2(BS2)lXtq—*(TS1[3:O1+1)Xtq即:CANInitStructure.CANBS1即:CANInitStructure.CANBS波特率二1/位时间位时间=(1+(BS1+(BS2)Xtqq二(BRPf9:01+l)X丫阳水”B
8、J:CAN」nitStnjcture.CAN_PrescalertpCLK=APB1例如现有一STM32系统时蚀为72MHz,关于CAN波特率有以下设置:CAN」nitStnicture.CAN_SJW二CAN_SJW_ltq;〃重新同步跳跃宽度1个时间
9、单位CAN」nitStnicture.CAN_BS1=CAN_BS1_8tq;//时间段1为8个时间单位CAN」nitStnicture.CAN_BS2=CAN_BS2_7tq;〃时间段2为7个时间单位CAN_InitStructure.CAN_Prescaler=45;〃设左了一个时间单位的长度为45系统时钟为72MHz,则APB1的频率为36MHz则其CAN的波特率为1一K1+8+7)X45一(36X10&)