1?FlexCAN-FD簡(jiǎn)介
MM32F0160 系列 MCU 具有一個(gè) FlexCAN 模塊,該模塊遵循 ISO 11898-1 標(biāo)準(zhǔn)、 CAN FD 和 CAN 2.0B 協(xié)議規(guī)范,不僅兼容傳統(tǒng)CAN,還支持CAN FD模式。在CAN-FD模式下,可實(shí)現(xiàn)最高8 Mbps的FD模式通信速率,支持標(biāo)準(zhǔn)幀(11位標(biāo)識(shí)符)和擴(kuò)展幀(29位標(biāo)識(shí)符),支持最大64字節(jié)有效負(fù)載,并且具有非常靈活的用于傳輸和接收的郵箱系統(tǒng)。
使用CAN FD較傳統(tǒng)CAN具有如下優(yōu)點(diǎn):
(1)增加了數(shù)據(jù)長(zhǎng)度,在發(fā)送長(zhǎng)數(shù)據(jù)時(shí),軟件更加簡(jiǎn)單高效,滿足更高的數(shù)據(jù)吞吐量。
(2)提高了傳輸速率,使得延遲時(shí)間更短,具有更好的實(shí)時(shí)性,滿足更高的帶寬。
(3)擴(kuò)展了CRC場(chǎng),為數(shù)據(jù)內(nèi)容提供了更好的保護(hù),增加了系統(tǒng)安全性。
本章節(jié)初步學(xué)習(xí)使用MM32F0160 FlexCAN-FD接口實(shí)現(xiàn)CAN FD通信,相關(guān)例程參考靈動(dòng)官網(wǎng)的LibSamples或在此基礎(chǔ)上修改。關(guān)于CAN FD協(xié)議不再進(jìn)行詳細(xì)介紹,感興趣的小伙伴可以查閱相關(guān)資料增進(jìn)了解。
2?CAN FD幀
ISO 11898-1標(biāo)準(zhǔn)指定了符合ISO 11898-1(2003)標(biāo)準(zhǔn)的經(jīng)典幀格式,并引入了CAN FD(Flexible Data Rate)幀格式。經(jīng)典幀格式支持高達(dá)1Mbps的比特率,以及每幀8字節(jié)的有效負(fù)載。FD幀格式支持超過(guò)1Mbps的比特率,以及每幀超過(guò)8字節(jié)的有效負(fù)載。FlexCAN可以收發(fā)CAN FD和經(jīng)典CAN格式交替的報(bào)文。
CAN FD 幀中有三個(gè)附加的控制位:
EDL:擴(kuò)展數(shù)據(jù)長(zhǎng)度位,支持更多的數(shù)據(jù)負(fù)載。
BRS比特率切換位:決定CAN FD幀是否切換比特率。
ESI錯(cuò)誤狀態(tài)指示:錯(cuò)誤主動(dòng)節(jié)點(diǎn)發(fā)送顯性,錯(cuò)誤被動(dòng)節(jié)點(diǎn)發(fā)送隱性。
CAN FD格式不支持遠(yuǎn)程幀,遠(yuǎn)程幀總是以經(jīng)典CAN格式傳輸。接收到FD幀并匹配郵箱時(shí),接收?qǐng)?bào)文緩沖區(qū)的RTR位將被無(wú)效化。
CAN FD報(bào)文數(shù)據(jù)字段可超過(guò)8字節(jié),支持12至64字節(jié)。CAN FD報(bào)文可切換比特率,使CAN幀的控制字段、數(shù)據(jù)字段和CRC字段比特率高于幀的開(kāi)始和結(jié)束。
CAN FD幀結(jié)構(gòu)(部分)如下圖所示:
CAN FD幀從SOF(幀起始)到BRS的仲裁段,以標(biāo)稱(chēng)比特率傳輸;從BRS到CRC界定符的數(shù)據(jù)段,以數(shù)據(jù)比特率傳輸;從CRC界定符到Intermission位,傳輸恢復(fù)為標(biāo)稱(chēng)比特率。如果CAN FD幀中BRS為隱性,則位時(shí)序在BRS的采樣點(diǎn)發(fā)生變化。BRS位之前,CAN FD仲裁段的標(biāo)稱(chēng)位時(shí)序由CAN_CBT或CAN_CTRL1寄存器定義;檢測(cè)到隱性BRS時(shí),數(shù)據(jù)位時(shí)序由CAN_FDCBT 寄存器定義。
3?協(xié)議時(shí)序
FlexCAN具有單獨(dú)配置CAN FD協(xié)議時(shí)序的寄存器,CAN FD位時(shí)序寄存器(CAN_FDCBT)存儲(chǔ)用于控制位時(shí)序參數(shù)的字段:FPRESDIV、FPROPSEG、FPSEG1、FPSEG2和FRJW。
CAN FD報(bào)文數(shù)據(jù)段的FDPRESDIV定義了串行時(shí)鐘(Sclock)的預(yù)分頻,見(jiàn)下列方程。串行時(shí)鐘的周期定義了用于構(gòu)成CAN FD波形的時(shí)間單位Tq,Tq為CAN引擎所能處理的最小時(shí)間單元。
比特率定義了接收或傳輸 CAN FD報(bào)文的速率,公式如下:
位時(shí)間可以細(xì)分為三個(gè)部分:
同步段(SYNC_SEG):1Tq的固定長(zhǎng)度;信號(hào)邊沿出現(xiàn)在該段內(nèi)。
時(shí)間段1:包括傳播段和相位段1。FlexCAN 使用 CAN_FDCBT寄存器的FDPROPSEG和FDPSEG1字段,其總和(+1)為2 ~ 39Tq。
時(shí)間段 2:包括相位段2。其值(+1)為2 ~ 8Tq。時(shí)間段2不能小于信息處理時(shí)間2Tq。
當(dāng)采用CAN FD位作為持續(xù)時(shí)間的衡量標(biāo)準(zhǔn)時(shí),一個(gè)CAN FD位的外設(shè)時(shí)鐘個(gè)數(shù)NumClkBit為:
fCANFDCLK為PE時(shí)鐘,單位Hz。
fSYS為系統(tǒng)(CHI)時(shí)鐘頻率,單位Hz。
4?報(bào)文緩沖區(qū)
MM32F0160 FlexCAN遵循CAN FD協(xié)議規(guī)范,該模塊已經(jīng)設(shè)計(jì)了對(duì)應(yīng)的CAN FD報(bào)文緩沖區(qū)結(jié)構(gòu)。經(jīng)典 CAN 幀使用傳統(tǒng)型 Rx FIFO,CAN FD幀使用增強(qiáng)型Rx FIFO。下圖為FlexCAN所使用的報(bào)文緩沖區(qū)結(jié)構(gòu),包括CAN 2.0B的兩種幀格式:擴(kuò)展幀(29位ID)和標(biāo)準(zhǔn)幀(11位ID)。每個(gè)報(bào)文緩沖區(qū)由16、24、40或72字節(jié)組成,其中包括8、16、32或64字節(jié)的數(shù)據(jù)。郵箱使用 0x80 ~ 0x27F 的內(nèi)存區(qū)域。
EDL — 擴(kuò)展數(shù)據(jù)長(zhǎng)度,EDL位區(qū)分CAN幀和CAN FD 幀。
BRS — 比特率切換,定義是否在 CAN FD 幀內(nèi)切換比特率。
ESI — 錯(cuò)誤狀態(tài)指示,表示發(fā)送節(jié)點(diǎn)是錯(cuò)誤主動(dòng)還是錯(cuò)誤被動(dòng)。
CODE — 報(bào)文緩沖區(qū)代碼,CODE 字段可以被 CPU 和 FlexCAN 讀寫(xiě),用作報(bào)文緩沖區(qū)匹配和仲裁過(guò)程的一部分。編碼詳見(jiàn)用戶手冊(cè)。
SRR — 替代遠(yuǎn)程請(qǐng)求,
1:擴(kuò)展幀格式傳輸時(shí),必須使用隱性位。
0:擴(kuò)展幀格式傳輸時(shí),顯性位無(wú)效。
只用于擴(kuò)展幀格式。傳輸時(shí)(發(fā)送緩沖區(qū))該位必須設(shè)置為 1,且將會(huì)和從 CAN 總線上接收到的值一起存儲(chǔ)于接收緩沖區(qū)。該位可以被接收為隱性或顯性,如果 FlexCAN 以顯性位接收,則認(rèn)為仲裁丟失。
IDE — ID擴(kuò)展位,
1:擴(kuò)展幀;
0:標(biāo)準(zhǔn)幀。
RTR — 遠(yuǎn)程傳輸請(qǐng)求
1:如果是發(fā)送MB,則表示當(dāng)前MB可能有一個(gè)遠(yuǎn)程幀待發(fā)送;如果是接收MB,則接收到的遠(yuǎn)程幀將會(huì)被存儲(chǔ);
0:表示當(dāng)前的M 中有一個(gè)數(shù)據(jù)幀待傳輸。在接收MB中,可能會(huì)被用于匹配過(guò)程。
如果FlexCAN傳輸1(隱性),接收到0(顯性),則認(rèn)為仲裁丟失。如果 RTR傳輸0(顯性),接收到1(隱性),則認(rèn)為是位錯(cuò)誤。如果接收到的值與發(fā)送值相同,則被認(rèn)為是一次成功的位傳輸。
注:配置CAN FD幀時(shí)RTR位必須為0。
DLC — 數(shù)據(jù)字節(jié)長(zhǎng)度
該4位字段為發(fā)送/接收數(shù)據(jù)的長(zhǎng)度(以字節(jié)為單位),位于偏移地址為0x8到0xF的MB空間。
接收階段,該字段由FlexCAN寫(xiě)入,從接收幀的DLC字段復(fù)制而得;
傳輸階段,該字段由CPU寫(xiě)入,且與要傳輸?shù)膸腄LC字段相對(duì)應(yīng)。
當(dāng)RTR = 1 時(shí),被傳輸?shù)膸瑸檫h(yuǎn)程幀,不包含數(shù)據(jù)字段(DLC 字段的設(shè)置無(wú)效,參見(jiàn)表格“有效數(shù)據(jù)字節(jié)”)。
TIME STAMP — 自由運(yùn)行計(jì)時(shí)器時(shí)間戳
該16位字段為自由運(yùn)行計(jì)時(shí)器的復(fù)制,當(dāng)標(biāo)識(shí)符字段開(kāi)頭出現(xiàn)在CAN總線上時(shí)進(jìn)行捕獲。
PRIO — 本地優(yōu)先級(jí)
該 3 位字段只有當(dāng)MCR.LPRIO_EN被置位時(shí)才有效,且只針對(duì)傳輸郵箱。用于附加到 ID 來(lái)定義傳輸優(yōu)先級(jí),不會(huì)被傳輸。
ID — 幀標(biāo)識(shí)符
標(biāo)準(zhǔn)幀格式,只有高 11 位(28 ~ 18)用于識(shí)別接收或發(fā)送幀,忽略低 18 位。擴(kuò)展幀格式,所有位都用于識(shí)別傳輸或接收幀。
DATA BYTE0 ~ 63 — 數(shù)據(jù)字段
數(shù)據(jù)幀最多可以使用64個(gè)字節(jié),取決于為MB選擇的有效負(fù)載大小。從總線上接收到的幀以該幀被接收時(shí)的格式進(jìn)行存放。只有n小于DLC時(shí),DATA BYTE(n)才有效。
5?MB 內(nèi)存映射
FlexCAN內(nèi)存緩沖區(qū)的內(nèi)存映射如下表所示:
6?FlexCAN-FD API
從靈動(dòng)官網(wǎng)下載的FLEXCAN固件庫(kù)中定義了FD相關(guān)的API函數(shù)如下:
7?FlexCAN-FD通信
配置FlexCAN為CAN FD模式,通過(guò)中斷接收和發(fā)送報(bào)文。
7.1 FlexCAN配置
voidFlexCAN_Configure(void) { GPIO_InitTypeDefGPIO_InitStruct; NVIC_InitTypeDefNVIC_InitStruct; flexcan_config_tFlexCAN_ConfigStruct; flexcan_rx_mb_config_tFlexCAN_RxMB_ConfigStruct; RCC_ClocksTypeDefRCC_Clocks; RCC_GetClocksFreq(&RCC_Clocks); RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOB,ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1ENR_FLEXCAN,ENABLE); GPIO_PinAFConfig(GPIOB,GPIO_PinSource8,GPIO_AF_3); GPIO_PinAFConfig(GPIOB,GPIO_PinSource9,GPIO_AF_3); GPIO_StructInit(&GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin=GPIO_Pin_8; GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode=GPIO_Mode_FLOATING; GPIO_Init(GPIOB,&GPIO_InitStruct); GPIO_StructInit(&GPIO_InitStruct); GPIO_InitStruct.GPIO_Pin=GPIO_Pin_9; GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_Init(GPIOB,&GPIO_InitStruct); NVIC_InitStruct.NVIC_IRQChannel=FLEX_CAN_IRQn; NVIC_InitStruct.NVIC_IRQChannelPriority=0; NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE; NVIC_Init(&NVIC_InitStruct); FLEXCAN_GetDefaultConfig(&FlexCAN_ConfigStruct); FlexCAN_ConfigStruct.baudRate=1000000U;/*1Mbps*/ FlexCAN_ConfigStruct.baudRateFD=2000000U;/*2Mbps*/ FlexCAN_ConfigStruct.clkSrc=Enum_Flexcan_ClkSrc1; FlexCAN_ConfigStruct.enableLoopBack=false; FlexCAN_ConfigStruct.disableSelfReception=true; FlexCAN_ConfigStruct.enableIndividMask=true; FLEXCAN_Init(FLEX_CAN1,&FlexCAN_ConfigStruct); FLEXCAN_EnterFreezeMode(FLEX_CAN1); FLEX_CAN1->MCR|=1<13; ????FLEX_CAN1->CTRL1&=(~CAN_CTRL1_SMP(1)); FLEXCAN_ExitFreezeMode(FLEX_CAN1); /*Baudratecalculatebyautomatically*/ FLEXCAN_FDCalculateImprovedTimingValues(FlexCAN_ConfigStruct.baudRate,FlexCAN_ConfigStruct.baudRateFD, RCC_Clocks.PCLK1_Frequency,&FlexCAN_ConfigStruct.timingConfig); FLEXCAN_FDInit(FLEX_CAN1,&FlexCAN_ConfigStruct,FLEXCAN_64BperMB,true); FLEXCAN_SetFDTxMbConfig(FLEX_CAN1,1,true); FLEXCAN_SetFDTxMbConfig(FLEX_CAN1,3,true); FlexCAN_RxMB_ConfigStruct.id=FLEXCAN_ID_STD(0x111); FlexCAN_RxMB_ConfigStruct.format=Enum_Flexcan_FrameFormatStandard; FlexCAN_RxMB_ConfigStruct.type=Enum_Flexcan_FrameTypeData; FLEXCAN_SetFDRxMbConfig(FLEX_CAN1,0,&FlexCAN_RxMB_ConfigStruct,true); FLEXCAN_SetRxIndividualMask(FLEX_CAN1,0,FLEXCAN_RX_MB_STD_MASK(0xFFF,0,0)); /*EnableMB0Interrupt*/ FLEX_CAN1->IMASK1|=(0x01U<0); ????FlexCAN_RxMB_ConfigStruct.id?????=?FLEXCAN_ID_EXT(0x222); ????FlexCAN_RxMB_ConfigStruct.format?=?Enum_Flexcan_FrameFormatExtend; ????FlexCAN_RxMB_ConfigStruct.type???=?Enum_Flexcan_FrameTypeData; ????FLEXCAN_SetFDRxMbConfig(FLEX_CAN1,?2,?&FlexCAN_RxMB_ConfigStruct,?true); ????FLEXCAN_SetRxIndividualMask(FLEX_CAN1,?2,?FLEXCAN_RX_MB_EXT_MASK(0xFFF,?0,?1)); ????/*?Enable?MB2?Interrupt?*/ ????FLEX_CAN1->IMASK1|=(0x01U<2); }
配置PB8、PB9復(fù)用為FlexCAN的RX、TX引腳;
配置CAN1Mbps和CANFD2Mbps、MB選擇64字節(jié)負(fù)載;
配置NVIC中斷;
配置MB1、MB3為發(fā)送郵箱;
配置MB0、MB2為接收郵箱;
MB0僅接收ID為0x111的標(biāo)準(zhǔn)幀;
MB2僅接收ID為0x222的擴(kuò)展幀。
7.2 發(fā)送標(biāo)準(zhǔn)幀報(bào)文
voidFlexCAN_FD_SendStandardFrameMessage(uint32_tID,uint8_t*Buffer,uint8_tLength) { flexcan_fd_frame_tFlexCAN_FD_FrameStruct; FlexCAN_FD_FrameStruct.length=Length; FlexCAN_FD_FrameStruct.type=(uint8_t)Enum_Flexcan_FrameTypeData; FlexCAN_FD_FrameStruct.format=(uint8_t)Enum_Flexcan_FrameFormatStandard; FlexCAN_FD_FrameStruct.brs=1; FlexCAN_FD_FrameStruct.edl=1; FlexCAN_FD_FrameStruct.id=ID; for(uint8_ti=0;i16;?i++) ????{ ????????FlexCAN_FD_FrameStruct.dataWord[i]?=?Buffer[i?*?4]?<24?|?Buffer[i?*?4?+?1]?<16?|?Buffer[i?*?4?+?2]?<8?|?Buffer[i?*?4?+?3]; ????} ????FLEXCAN_WriteFDTxMb(FLEX_CAN1,?1,?&FlexCAN_FD_FrameStruct); }
flexcan_fd_frame_t是按照FlexCAN MB結(jié)構(gòu)定義的結(jié)構(gòu)體,將要發(fā)送的標(biāo)準(zhǔn)幀按照幀結(jié)構(gòu)依次設(shè)置結(jié)構(gòu)體的各字段,接著寫(xiě)入MB1發(fā)送郵箱。
7.3 發(fā)送擴(kuò)展幀報(bào)文
voidFlexCAN_FD_SendExtendFrameMessage(uint32_tID,uint8_t*Buffer,uint8_tLength) { flexcan_fd_frame_tFlexCAN_FD_FrameStruct; FlexCAN_FD_FrameStruct.length=Length; FlexCAN_FD_FrameStruct.type=(uint8_t)Enum_Flexcan_FrameTypeData; FlexCAN_FD_FrameStruct.format=(uint8_t)Enum_Flexcan_FrameFormatExtend; FlexCAN_FD_FrameStruct.brs=1; FlexCAN_FD_FrameStruct.edl=1; FlexCAN_FD_FrameStruct.id=ID; for(uint8_ti=0;i16;?i++) ????{ ????????FlexCAN_FD_FrameStruct.dataWord[i]?=?Buffer[i?*?4]?<24?|?Buffer[i?*?4?+?1]?<16?|?Buffer[i?*?4?+?2]?<8?|?Buffer[i?*?4?+?3]; ????} ????FLEXCAN_WriteFDTxMb(FLEX_CAN1,?3,?&FlexCAN_FD_FrameStruct); }
同上,將要發(fā)送的擴(kuò)展幀按照幀結(jié)構(gòu)依次設(shè)置結(jié)構(gòu)體的各字段,接著寫(xiě)入MB3發(fā)送郵箱。
7.4 獲取報(bào)文并發(fā)送
voidFlexCAN_FD_RxMB_Handler(uint8_tIndex) { uint8_tBuffer[64]; flexcan_fd_frame_tFlexCAN_FD_FrameStruct; FLEXCAN_ReadFDRxMb(FLEX_CAN1,Index,&FlexCAN_FD_FrameStruct); for(uint8_ti=0;i16;?i++) ????{???????? ????????Buffer[i*4+0]?=?(FlexCAN_FD_FrameStruct.dataWord[i]?>>0x18)&0xFF; Buffer[i*4+1]=(FlexCAN_FD_FrameStruct.dataWord[i]>>0x10)&0xFF; Buffer[i*4+2]=(FlexCAN_FD_FrameStruct.dataWord[i]>>0x08)&0xFF; Buffer[i*4+3]=(FlexCAN_FD_FrameStruct.dataWord[i]>>0x00)&0xFF; } if(Index==0) { FlexCAN_FD_SendStandardFrameMessage((FlexCAN_FD_FrameStruct.id>>CAN_ID_STD_SHIFT),Buffer,FlexCANFD_TX_64Bytes_DataLen); } else { FlexCAN_FD_SendExtendFrameMessage((FlexCAN_FD_FrameStruct.id>>CAN_ID_EXT_SHIFT),Buffer,FlexCANFD_TX_64Bytes_DataLen); } }
讀接收郵箱(Index),獲取CAN FD報(bào)文中的數(shù)據(jù),并發(fā)送該報(bào)文。
7.5 中斷服務(wù)子程序
voidFlexCAN_IRQHandler(void) { uint32_tu32flag=1; /*MB0*/ if(FLEXCAN_GetMbStatusFlags(FLEX_CAN1,u32flag<0)?!=?0) ????{ ????????FlexCAN_FD_RxMB_Handler(0); ????????FLEXCAN_ClearMbStatusFlags(FLEX_CAN1,?u32flag?<0); ????} ????/*?MB1?*/ ????if?(FLEXCAN_GetMbStatusFlags(FLEX_CAN1,?u32flag?<1)?!=?0) ????{ ????????FLEXCAN_ClearMbStatusFlags(FLEX_CAN1,?u32flag?<1); ????} ????/*?MB2?*/ ????if?(FLEXCAN_GetMbStatusFlags(FLEX_CAN1,?u32flag?<2)?!=?0) ????{ ????????FlexCAN_FD_RxMB_Handler(2); ????????FLEXCAN_ClearMbStatusFlags(FLEX_CAN1,?u32flag?<2); ????} ????/*?MB3?*/ ????if?(FLEXCAN_GetMbStatusFlags(FLEX_CAN1,?u32flag?<3)?!=?0) ????{ ????????FLEXCAN_ClearMbStatusFlags(FLEX_CAN1,?u32flag?<3); ????} }
MB0、MB2完成接收調(diào)用MB接收函數(shù),獲取報(bào)文并通過(guò)MB1、MB3發(fā)送。MB1、MB3完成傳輸,清除對(duì)應(yīng)標(biāo)志。
7.6 FlexCAN_FD中斷示例
voidFlexCAN_FD_Interrupt_Sample(void) { uint8_tBuffer[64]= { 0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0xAA, 0xAA,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x55, 0x55,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0xAA, 0xAA,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x88, }; printf(" Test%s",__FUNCTION__); FlexCAN_Configure(); while(1) { FlexCAN_FD_SendStandardFrameMessage(0x214,Buffer,FlexCANFD_TX_64Bytes_DataLen); PLATFORM_LED_Toggle(LED1); PLATFORM_DelayMS(1000); } }
調(diào)用FlexCAN_Configure(),在while中間隔1s中發(fā)送標(biāo)準(zhǔn)幀報(bào)文,幀ID為0x214,數(shù)據(jù)為定義好的Buffer[64]。
在主函數(shù)中調(diào)用FlexCAN_FD_Interrupt_Sample()。
8?驗(yàn)證
連接CAN調(diào)試工具,配置波特率CAN 1Mbps、CAN FD 2Mbps,觀測(cè)上位機(jī)軟件:
接收區(qū)間隔1s接收到一次FD報(bào)文,ID為0x214。
在發(fā)送區(qū)發(fā)送標(biāo)準(zhǔn)幀F(xiàn)D報(bào)文,ID為0x111,發(fā)送擴(kuò)展幀F(xiàn)D報(bào)文,ID為0x222,各發(fā)送5次:
每發(fā)送1次報(bào)文,接收區(qū)接收到1次該ID的報(bào)文,和程序預(yù)期一致。
審核編輯:湯梓紅
-
mcu
+關(guān)注
關(guān)注
146文章
17148瀏覽量
351184 -
接口
+關(guān)注
關(guān)注
33文章
8596瀏覽量
151145 -
CAN
+關(guān)注
關(guān)注
57文章
2754瀏覽量
463697 -
通信
+關(guān)注
關(guān)注
18文章
6032瀏覽量
135990 -
比特率
+關(guān)注
關(guān)注
1文章
28瀏覽量
10613
原文標(biāo)題:靈動(dòng)微課堂 (第279講)|MM32F0160 FlexCAN-FD 通信
文章出處:【微信號(hào):MindMotion-MMCU,微信公眾號(hào):靈動(dòng)MM32MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論