单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,PPT,模板下载:, struct _CAN_HandleTypeDef,CAN_TypeDef *Instance;/*!Register base address*/,CAN_InitTypeDef Init;/*!CAN required parameters*/,_IO HAL_CAN_StateTypeDef State;/*!CAN communication state*/,_IO uint32_t ErrorCode;/*!CAN Error code.,CAN_HandleTypeDef;,CAN_HandleTypeDefCAN总线结构体CAN_,CAN_TypeDef-CAN,寄存器结构体,见,P102,详细描述,typedef struct,_IO uint32_t MCR;,_IO uint32_t MSR;,_IO uint32_t TSR;,_IO uint32_t RF0R;,_IO uint32_t RF1R;,_IO uint32_t IER;,_IO uint32_t ESR;,_IO uint32_t BTR;,uint32_t RESERVED088;,CAN_TxMailBox_TypeDef sTxMailBox3;,CAN_FIFOMailBox_TypeDef sFIFOMailBox2;,uint32_t RESERVED112;,_IO uint32_t FMR;,_IO uint32_t FM1R;,uint32_t RESERVED2;,_IO uint32_t FS1R;,uint32_t RESERVED3;,_IO uint32_t FFA1R;,uint32_t RESERVED4;,_IO uint32_t FA1R;,uint32_t RESERVED58;,CAN_FilterRegister_TypeDef sFilterRegister14;,CAN_TypeDef;,CAN_TypeDef-CAN寄存器结构体见P102详细描,01,CAN,总线代码编写方法概览,02,CAN,总线,代码的数据结构,03,CAN,总线使用方法和函数,目录,CONTENTS,04,CAN,总线,实例流程图,05,CAN,总线代码概览,06,代码编写建议,01CAN总线代码编写方法概览02CAN总线代码的数据结构0,MX_CAN_Init():CAN,工作模式配置,hcan.Instance=CAN1;,hcan.Init.Prescaler=40;,hcan.Init.Mode=CAN_MODE_NORMAL;,hcan.Init.SyncJumpWidth=CAN_SJW_1TQ;,hcan.Init.TimeSeg1=CAN_BS1_6TQ;,hcan.Init.TimeSeg2=CAN_BS2_2TQ;,hcan.Init.TimeTriggeredMode=DISABLE;,hcan.Init.AutoBusOff=ENABLE;,hcan.Init.AutoWakeUp=DISABLE;,hcan.Init.AutoRetransmission=DISABLE;,hcan.Init.ReceiveFifoLocked=DISABLE;,hcan.Init.TransmitFifoPriority=DISABLE;,见,P102,MX_CAN_Init():CAN工作模式配置 hcan.,CAN,函数的,用法,见,user_can.c,1.MX_CAN_Init():CAN,工作模式配置,2.CAN_User_Init,(),,CAN,总线配置,过滤器的配置和启用,3.can_start,(),启动,CAN,总线,4.can_stop,(),停止,CAN,总线,5.Can_Send_Msg,(),,CAN,发送数据,6.Can_Send_Msg_StdId,(),CAN,发送自定义格式数据,7.HAL_CAN_RxFifo0MsgPendingCallback,(),,CAN,接收回调函数,8.FilterID,(),过滤屏蔽接收,ID,CAN函数的用法见user_can.c,01,CAN,总线代码编写方法概览,02,CAN,总线,代码的数据结构,03,CAN,总线使用方法和函数,目录,CONTENTS,04,CAN,总线,实例流程图,05,CAN,总线代码概览,06,代码编写建议,01CAN总线代码编写方法概览02CAN总线代码的数据结构0,开始,初始化,HAL,库(,FLASH,接口,,NVIC,,基准时间),系统时钟配置(,CPU,AHB,和,APB,总线时钟),可配置设备初始化(,GPIO,ADC,UART,TIMER,温湿度和红外传感器,启用串口接收中断),CAN,初始化,(MX_CAN_Init(),CAN_User_Init),启动,CAN,总线,定时读取各类型传感器数据,CAN,网关节点把所有传感器数据通过,485,总线上报到物联网网关,CAN,终端节点把所有传感器数据放在空闲的发送邮箱去处理,处理接收的串行口数据,流程图,开始初始化HAL库(FLASH接口,NVIC,基准时间)系统,01,CAN,总线代码编写方法概览,02,CAN,总线,代码的数据结构,03,CAN,总线使用方法和函数,目录,CONTENTS,04,CAN,总线,实例流程图,05,CAN,总线代码概览,06,代码编写建议,01CAN总线代码编写方法概览02CAN总线代码的数据结构0,代码浏览,代码浏览,代码浏览代码浏览,01,CAN,总线代码编写方法概览,02,CAN,总线,代码的数据结构,03,CAN,总线使用方法和函数,目录,CONTENTS,04,CAN,总线,实例流程图,05,CAN,总线代码概览,06,代码编写建议,01CAN总线代码编写方法概览02CAN总线代码的数据结构0,代码改进的一些建议,1.,变量,函数命名方法没有遵循规范:,比如有的用英文,有的用拼音;有的用驼峰命名法,有的没用。有的没有对齐。,2.,函数的形式参数没有做范围检测。,3.,函数的形式参数是指针类型的,没有做空的判断。,4.,数据类型没有做统一定义,比如有的还在用,unsigned short,5.,代码的注释不规范、不完整,增加维护的成本。,代码改进的一些建议 1.变量,函数命名方法没有遵循规范:,