文档详情

STM32-CAN总线通信文档STM32-CAN总线通信文档.pdf

发布:2018-04-22约1.22万字共12页下载文档
文本预览下载声明
STM32 CAN 总线通信 CAN 总线通信详绅学习的话这里有个视频教程可以推荐看看, /programs/view/IIuJjM2RIxc 做电子的一定要多练勤于劢手, 做多了就自然而然就手到擒来。 Can.h 文件如下: #ifndef __CAN_H #define __CAN_H #include sys.h ////////////////////////////////////////////////////////////////////////////////// //CAN 接收RX0 中断使能 #define CAN_RX0_INT_ENABLE 0 //0,丌使能;1,使能. u8 CAN_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode);//CAN 初始化 u8 Can_Send_Msg(u8* msg,u8 len); //发送数据 u8 Can_Receive_Msg(u8 *buf); // 接收数据 #endif Can.c 文件如下: #include can.h #include led.h #include delay.h #include usart.h //CAN 初始化 //tsjw:重新同步跳跃时间单元.范围:1~3; CAN_SJW_1tq CAN_SJW_2tq CAN_SJW_3tq CAN_SJW_4tq //tbs2:时间段2 的时间单元.范围:1~8; //tbs1:时间段1 的时间单元.范围:1~16; CAN_BS1_1tq ~CAN_BS1_16tq //brp :波特率分频器.范围:1~1024;(实际要加 1,也就是 1~1024) tq=(brp)*tpclk1 //注意以上参数任何一个都丌能设为0,否则会乱. //波特率=Fpclk1/((tsjw+tbs1+tbs2)*brp); //mode:0,普通模式;1,回环模式; //Fpclk1 的时钟在初始化的时候设置为36M,如果设置CAN_Normal_Init(1,8,7,5,1); //则波特率为:36M/((1+8+7)*5)=450Kbps //返回值:0,初始化OK; // 其他,初始化失败; u8 CAN_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode) { GPIO_InitTypeDef GPIO_InitStructure; CAN_InitTypeDef CAN_InitStructure; CAN_FilterInitTypeDef CAN_FilterInitStructure; #if CAN_RX0_INT_ENABLE NVIC_InitTypeDef NVIC_InitStructure; #endif RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能PORTA 时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);//使能CAN1 时 钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽 GPIO_Init(GPIOA, GPIO_InitStructure); //初始化IO GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//上拉输入 GPIO_Init(GPIOA, GPIO_InitStructure);//初始化IO //CAN 单元设置 CAN_InitStructure.CAN
显示全部
相似文档