云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 基于can总线的温度测控系统的设计本科本科毕业论文

基于can总线的温度测控系统的设计本科本科毕业论文

  • 62 次阅读
  • 3 次下载
  • 2025/5/4 18:26:31

烟台南山学院毕业设计(论文) 第 36 页

CAN_InitStructure.CAN_Mode=CAN_Mode_Normal; //CAN硬件工作在正常模式 CAN_InitStructure.CAN_SJW=CAN_SJW_1tq; //重新同步跳跃宽度1个时间单位 CAN_InitStructure.CAN_BS1=CAN_BS1_8tq; //时间段1为8个时间单位 CAN_InitStructure.CAN_BS2=CAN_BS2_7tq; //时间段2为7个时间单位 CAN_InitStructure.CAN_Prescaler=9; //(pclk1/((1+8+7)*9))=36MHZ/16/9=250Kbits 设定了一个时间单位的长度9

CAN_Init(&CAN_InitStructure); (4)CAN滤波器初始化:

CAN_FilterInitStructure.CAN_FilterNumber=0; //指定了待初始化的滤波器0 CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; //指定滤波器将被初始化为标识符屏蔽位模式

CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; //设置位宽为32位

CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000; //用来设定滤波器标识符(32位位宽时为其高段位,16位位宽时为第一个)

CAN_FilterInitStructure.CAN_FilterIdLow=0x0000; //用来设定滤波器标识符(32位位宽时为其低段位,16位位宽时为第二个)

CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000; //设定滤波器屏蔽标识符(32位位宽时为其高段位,16位位宽时为第一个)

CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000; //设定滤波器屏蔽标识符(32位位宽时为其低段位,16位位宽时为第二个)

CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FIFO0; //设定指向滤波器的FIFO0

CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; //使能滤波器 CAN_FilterInit(&CAN_FilterInitStructure);

CAN_ITConfig(CAN_IT_FMP0,ENABLE); //使能指定的CAN中断 2、CAN发送函数

(1)选择一个空的发送邮箱:

if((CAN->TSR&TSR_TME0)==TSR_TME0)

烟台南山学院毕业设计(论文) 第 37 页

TransmitMailbos=0;

else if((CAN->TSR&TSR_TME1)==TSR_TME1) TransmitMailbox=1;

else if((CAN->TSR&TSR_TME2)==TSR_TME2) TransmitMailbox=2;

else TransmitMailbox=CAN_NO_MB;

在TransmitMailbox=CAN_NO_MB的条件下设置ID; CAN->sTxMailBox[TransmitMailbox].TIR&=TMIDxR_TXRQ; If(TxMessage->IDE==CAN_ID_STD) TxMessage->StdId&=(u32)0x000007FF; TxMessage->StdId=TxMessage->StdId<<21;

CAN->sTxMailBox[TransmitMailbox].TIR|=(TxMssage->StdId|TxMessage->IDE|TxMessage->RTR);

else TxMessage->ExtId<<=3;

CAN->sTxMailBox[TransmitMailbox].TIR|=(TxMessage->ExtId|TxMessage->IDE|TxMessage->RTR);

(2)设置DLC:

TxMessage->DLC&=(u8)0x0000000F;

CAN->sTxMailBox[TransmitMailbox].TDTR&=(u32)0xFFFFFFF0; CAN->sTxMailBox[TransmitMailbox].TDTR|=TxMessage->DLC; (3)设置数据帧的长度:

CAN->sTxMailBox[TransmitMailbox].TDTR=((u32)TxMessage->Data[3]<<24)| ((u32)TxMessage->Data[2]<<16)|

((u32)TxMessage->Data[1]<<8)| ((u32)TxMessage->Data[0]));

CAN->sTxMailBox[TransmitMailbox].TDHR=((u32)TxMessage->Data[7]<<24)|

((u32)TxMessage->Data[6]<<16)| ((u32)TxMessage->Data[5]<<8)| ((u32)TxMessage->Data[4]));

烟台南山学院毕业设计(论文) 第 38 页

(4)请求发送语句:

CAN->sTxMailBox[TransmitMailbox].TIR|=TMIDxR_TXRQ; (5)最后返回TransmitMailbox; 3、CAN接收函数 (1)获取ID:

RxMessage->IDE=(u8)0x04&CAN->sFIFOMailBox[FIFONumber].RIR; If(RxMessage->IDE==CAN_ID_STD)

RxMessage->StdId=(u32)0x000007FF&(CAN->sFIFOMailBox[FIFONumber].RIR>>21)

else

RxMessage->ExtId=(u32)0x1FFFFFFF&(CAN->sFIFOMailBox[FIFONumber].RIR>>3)

RxMessage->RTR=(u8)0x02&(CAN->sFIFOMailBox[FIFONumber].RIR; (2)得到DLC和FMI:

RxMessage->DLC=(u8)0x0F&CAN->sFIFOMailBox[FIFONumber].RDTR; RxMessage->FMI=(u8)0xFF&(CAN->sFIFOMailBox[FIFONumber].RDTR>>8); (3)解析数据帧:

RxMessage->Data[0]=(u8)0xFF&CAN->sFIFOMailBox[FIFONumber].RDLR; RxMessage->Data[1]=(u8)0xFF&(CAN->sFIFOMailBox[FIFONumber].RDLR>>8); RxMessage->Data[2]=(u8)0xFF&(CAN->sFIFOMailBox[FIFONumber].RDLR>>16);

RxMessage->Data[3]=(u8)0xFF&(CAN->sFIFOMailBox[FIFONumber].RDLR>>24);

RxMessage->Data[4]=(u8)0xFF&CAN->sFIFOMailBox[FIFONumber].RDHR; RxMessage->Data[5]=(u8)0xFF&(CAN->sFIFOMailBox[FIFONumber].RDHR>>8); RxMessage->Data[6]=(u8)0xFF&(CAN->sFIFOMailBox[FIFONumber].RDHR>>16);

RxMessage->Data[7]=(u8)0xFF&(CAN->sFIFOMailBox[FIFONumber].RDHR>>24);

烟台南山学院毕业设计(论文) 第 39 页

(4)最后返回FIFO:

CAN_FIFORelease(FIFONumber); 附录C:转换器的软件设计

1、CAN发送的部分函数: void CAN_SEND() //发送数据部分 byte i,p;

p=CAN[CAN_SR]; //状态位 if(p&0x04) {

p=CAN_TXB; //p指向发送缓存首址 for(i=0;i<10;i++)CAN[p++]=TXB[i]; CAN[CAN_CMR]=0X01; //请求发送 }

2、CAN接收的部分函数

Void CAN_INT()interrupt 0 using 1 //接收中断 p=CAN[CAN_IR]; if(p&0x01) {

p=CAN_RXB; for(i=0;i<10;i++) {

RXB[i]=CAN[p++]; }}

CAN[CAN_CMR]=0x04; //释放接收缓存 CANBUS=1;

3、CAN初始化部分函数:

CAN[CAN_CR]=0x01; //控制寄存器写入控制字0x01 CAN[CAN_ACR]=0x03; //接收代码寄存器地址 CAN[CAN_AMR]=0x00; //接收屏蔽寄存器设置为0x00

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

烟台南山学院毕业设计(论文) 第 36 页 CAN_InitStructure.CAN_Mode=CAN_Mode_Normal; //CAN硬件工作在正常模式 CAN_InitStructure.CAN_SJW=CAN_SJW_1tq; //重新同步跳跃宽度1个时间单位 CAN_InitStructure.CAN_BS1=CAN_BS1_8tq; //时间段1为8个时间单位 CAN_InitStructure.CAN_BS2=CAN_BS2_7tq; //时间段2为7个时间单位 CAN_InitStructure.CAN_Prescaler=9; //(pclk1/((1+8+7)*9))=36MHZ/16/9=250Kbits 设定了一个时间单位的长度9 CAN_Init(&CAN_InitStructure); (4)CAN滤波器初始

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com