单片机硬件CAN通信的应用.docx
CAN的应用非常广泛,现在很多单片机都内部集成了CAN控制器.今天结合瑞萨RA2单片机的CAN控制器模块,给大家描述一下其应用案例。瑞萨RA21.1系列MCU筒介RA21.1产品组基于Arm*Corte×-M23核心(现今Arm-Cortex-M系列中功耗最低的CPU).这款产品采用优化的制程和瑞萨电子的低功耗工艺技术,是业界一流水平的超低功耗微控制器.RA21.1产品组能够支持1.6V至5.SV宽电压工作,CPU时钟频率最高48MHz,且运行模式电澹和待机模式电流更低.RA21.1产品群配备了增强型电容式触推感应单元(CTSU2)、CAN控制器局域网总线,串行通信接口、高精度模拟电路和定时器。产品封装从48引脚到100弓I脚.RA21.148MHz32-BitArm®Cortex®-M23CoreHMemoryCodeF1.ash(256kB.128kB)SRAM(16k)PantySRAM(16kB)ECCDataF1.ash(8kB)11Ana1.ogueCJTimers12bitADC(19ch)12OitDAC(Ich)1.owPowerAna1.ogComparator(2c)GPT32-b<t(4ch)GPT16bit(6ch)AGT1-bt(2ch>WDTTempecaturGSensor(CommunicationCANx1I2C×2SCIx5SPIx2SystemSafety控制叁同域网CAN模块而介SysTickDTCMu1.tip1.eC1.ocksOnCpOsaRatorHOCO(24.32.48.64MHz).1.OCO(32kHz).I1.OCO(15kKz)1.owPoworModesE1.CPortFunctionSe1.ectRTCMonxxyProtectionISRAMParityChoECCinSRAMPTC1.OCkFrequencyAccuracyMeasurerrCRCCa1.cu1.atorIWDTDataOperatKXiCircF1.ashAreaProtectiADCSeifTest控制器局域网(CAN)模块使用基于消息的协议在电磁暝声应用中的多个从机和主机之间接收和传输数据.该模块符合ISOI1.898-1(CAN2.0ACAN20B)标准,最多支持32个邮箱,可配置为普通邮箱和FIFO模式下的发送或接收。支持标准(11位)和扩展(29位)消息格式.CAN模块需要额外的外部CAN收发器.注意本项:CAN需要外部速晶体作为时钟源,使用CAN模块前需要先配置好外部高速时钟.CAN模块参数规格TU27.1CANBfMCifksbont(1o2ParamMfS<m<*1inOetararvttrata1.SO118fi1<crr<aftIcr*i*Cte*dIVX1.at1.cMWrrmB13DM*w*k*11mFrEWM岬S«MWECAN.8MKrIfCI*CANCMtxrcUeMQM皿EqaI)”,w<ht*QIJ”3Mm>qmo0w Ncrniaimode:32mt&mM9eMrcen1.9Mbtofar4hc*mMMerroec4eft 0"w>24mMbcmncw04fWrw119amb*xtfwrIrVHrMIPQM«rtvoegton.athrrrw119*mout*31o*o<<RXMIrawrt1.(TX)4*UqFFO*RcponRoowDft>mtM0ab¼»fK>.or*ywxMdID,crm>ecCH*'';,.I!.,>'.»> StoctaMtMtoR0MrMe<M(urMdmMgMRMttM)andovnunmotmMEM9MMd) Roc<<co0rterper<j<or,CC<Hab¼Ioro(11MUJA4CMiMKffVMUt*MU1cmfarwyXMMt1.OWm)M3"OSM<M>db*5B<i田11B2rti2tcTrmn4*on 1.or(MatamtMRmoietametwMMeR TnBWmax>IOICfmeeytoor*yr1.ndanSC.0r*7a>nddID.ormadO P10wvvnMA4trv¼nMonVm ftv*da1.f11MgrnctoA Mo>aodBOf1.KiIibMd4<tmMK)oraaKwnun<*r partIortevwrt0fquMitof1.«4habortCancttanCOatmwdntahafta9y0)toMM11fortxMrKtoda*r*cn4>t>reryfromIMbuk<Saxc3b9 *>1tm9*Wtacn<0wM AatemMcvcqe(CANMmodeenbuMf1.eMry Awnacr*c*gofCANMrtmo<cn kVMMfQo<CANImAmodeMugh»sdtam TrwwBcnto11ordMM*ghtvWfWmEg«av»f*oMtr<9 ,'JJCAht>iCw-Xio>'Qut<*11yImo-XACXex½rzC«C-.C*«T0<EACKcMrMteremx 0ttMo<vMcn1011orMMM.mdu*«VDr>«wnn»frorpMM.M<rtMy.aMbu»4«rcMry S-wrsmogcf««vxxurtcrTwMtUm(>rgTb.Urrp1.xcboouwq«1.b<OOUHerRcwdock>c<to1.e4.2ert.nMWvp«io(HHM11ct*jnceoSuaofttodrtamtwu<ctRCfCCO<r0ft»Trwmccm>c<RQH*r*O Tf¼mFIFO torrtrutnCANHMpmodtCANdock*>cwdk>po*<ccmunpcrrSctf>MVJMQf1.Thf1.MB0*MfU«01IreS*Xf4>*O*Wp9C«f"Or<wi>c*JO*OMOMkWMCAMUOK¼tfrvc IMeMWrnO4 S*t<m>©rtWknpb«») «rcd»11.yamicc<<eckRA21.1CAN通信应用例程使用官方右studi。开发工具创建RA21.1工程,并添加CAN外设模块底层应用.9JW1V031R.BDr.SCAN-GMMtiM5*I0MAUCww*<*>S<cksYY*m4i”>KMjCewcnq.opo<t"gt.wo.c*3Hy1.g.CQC。Oo<O<M<6C配2SCAN模块参数(包括通信速率、引脚死因等)。9-CAN"5)a<r<r*<1cv<hkV9ftwn*Ax>rq.<fCAMQ.<4VCxrwrJNrv*CWwdC*xkSow¾eXIEOwt¼dOrrwHeWcdeCMTWXrXwMK*3<OMMiOMode><x*o<M<*oetVBMJdIWW49>MVAUo9me*WdW<tr*j4rf4eWt<XCANeMdSF14O*wndcAjIpHtn4>B,*X*KecmHfONwbO03(mm>MU4r(WM»Mx)SH(MCUPwbo1215OoufMrj16HOoupMtW2JOsJPM9Z42GfourMrfbo51OpurCAN应用叁考代码/wait#defineWAIT_TIME(500U)timeva1.ue/mai1.#defineCAN_MAI1.BOX_NUMBER_TX(OU)boxnumber/CANtransmission/CANreceivestatus/CANerrorstatus/CANtransmit/CANreceiveWdefineCAN_MAI1.BOX_NUMBER_RX(IU)#defineCAN_FRAME_TRANSM1.1.DATA_BYTES(8U)/data1.engthSdefineZERO(OU)*Privateg1.oba1.variab1.es*/*F1.ags,setfromCa1.1.backfunction*/staticvo1.ati1.eb1.b_can_tx=fa1.se;statusstaticvo1.ati1.eboo1.b_can_rx=fa1.se;staticvo1.ati1.eboo1.b_can_err=fa1.se;*CANframesfortxandrx*/staticcan_frame_tg_can_tx_frame;framestaticcan_frame_tg_can_rx_frame;framevoidha1.-entry(void)*TODO:addyourowncodehere/fsp_err_terr=FSP,SUCCESS;uint32ttimeout/timeoutuint8jcan_tx_msgCAN_FRAME_TRANSMIT_DATA_BYTES0,1,2,3,4,5,6,7;uint8jcan_rx_msgCAN_FRAME_TRANSMIT_DATA_BYTES=0;*Initia1.izestheCGCmodu1.e.*/err=R_CGC_Open(&g_cgcO_ctr1.,&g_cgcO_cfg);*Hand1.eanyerrors.Thisfunctionshou1.dbedefinedbytheuser./assert(FSP_SUCCESS=err);*StarttheCGJC1.oCK_MA1.NJDSC.7err=R_CGC_C1.ockStart(&g_cgcO_ctr1.,CGC_C1.OCK_MAIN_OSC,NU1.1.);assert(FSP_SUCCESS=err);*Initia1.izeCANmodu1.e*/err=R_CAN_Open(&g_can_