在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用STM32F103做CAN的收發(fā)通信

STM32嵌入式開發(fā) ? 來(lái)源:STM32嵌入式開發(fā) ? 作者:STM32嵌入式開發(fā) ? 2022-07-06 11:01 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

CAN通信

CAN 是Controller Area Network 的縮寫(以下稱為CAN),該通信使用的是ISO11898標(biāo)準(zhǔn),該標(biāo)準(zhǔn)的物理層特征如下圖所示。

95bfe748-f6c2-11ec-ba43-dac502259ad0.png

CAN協(xié)議是通過(guò)以下5種類型的幀進(jìn)行的:

  • 數(shù)據(jù)幀

  • 搖控幀

  • 錯(cuò)誤幀

  • 過(guò)載幀

  • 幀間隔

另外,數(shù)據(jù)幀和遙控幀有標(biāo)準(zhǔn)格式和擴(kuò)展格式兩種格式。標(biāo)準(zhǔn)格式有11 個(gè)位的標(biāo)識(shí)符(ID),擴(kuò)展格式有29 個(gè)位的ID。

大部分系統(tǒng)使用的都是數(shù)據(jù)幀 ,我這里使用的也是數(shù)據(jù)幀。
數(shù)據(jù)幀一般由7個(gè)段構(gòu)成,即:
(1) 幀起始。表示數(shù)據(jù)幀開始的段。
(2) 仲裁段。表示該幀優(yōu)先級(jí)的段。
(3) 控制段。表示數(shù)據(jù)的字節(jié)數(shù)及保留位的段。
(4) 數(shù)據(jù)段。數(shù)據(jù)的內(nèi)容,一幀可發(fā)送0~8個(gè)字節(jié)的數(shù)據(jù)。
(5) CRC段。檢查幀的傳輸錯(cuò)誤的段。
(6) ACK段。表示確認(rèn)正常接收的段。
(7) 幀結(jié)束。表示數(shù)據(jù)幀結(jié)束的段。

明確了數(shù)據(jù)幀概念,還需要理解一下過(guò)濾器的作用。

STM32的標(biāo)識(shí)符屏蔽濾波目的是減少了CPU處理CAN通信的開銷。STM32的過(guò)濾器組最多有28個(gè)(互聯(lián)型),但是STM32F103ZET6只有14個(gè)(增強(qiáng)型),每個(gè)濾波器組x由2個(gè)32為寄存器,CAN_FxR1和CAN_FxR2組成。
STM32每個(gè)過(guò)濾器組的位寬都可以獨(dú)立配置,以滿足應(yīng)用程序的不同需求。根據(jù)位寬的不同,每個(gè)過(guò)濾器組可提供:

  • 1個(gè)32位過(guò)濾器,包括:STDID[10:0]、EXTID[17:0]、IDE和RTR位

  • 2個(gè)16位過(guò)濾器,包括:STDID[10:0]、IDE、RTR和EXTID[17:15]位

此外過(guò)濾器可配置為,屏蔽位模式和標(biāo)識(shí)符列表模式。

在屏蔽位模式下,標(biāo)識(shí)符寄存器和屏蔽寄存器一起,指定報(bào)文標(biāo)識(shí)符的任何一位,應(yīng)該按照“必須匹配”或“不用關(guān)心”處理。
而在標(biāo)識(shí)符列表模式下,屏蔽寄存器也被當(dāng)作標(biāo)識(shí)符寄存器用。因此,不是采用一個(gè)標(biāo)識(shí)符加一個(gè)屏蔽位的方式,而是使用2個(gè)標(biāo)識(shí)符寄存器。接收?qǐng)?bào)文標(biāo)識(shí)符的每一位都必須跟過(guò)濾器標(biāo)識(shí)符相同。相關(guān)
文章:CAN總線詳解

一般也都是使用標(biāo)識(shí)符列表模式,這里使用的也是標(biāo)識(shí)符列表模式。濾波過(guò)程舉例如下:
95d70536-f6c2-11ec-ba43-dac502259ad0.png

在程序中就是:


		
//要過(guò)濾的ID高位 CAN_FilterInitStructure.CAN_FilterIdHigh=0X00;  //要過(guò)濾的ID低位                 CAN_FilterInitStructure.CAN_FilterIdLow= (((u32)0x1314<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF; //過(guò)濾器屏蔽標(biāo)識(shí)符的高16位值CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0xFFFF;   //過(guò)濾器屏蔽標(biāo)識(shí)符的低16位值         CAN_FilterInitStructure.CAN_FilterMaskIdLow=0xFFFF;

		

這里的CAN_FilterId和CAN_FilterMaskId是配合使用的,意思是CAN_FilterId指出需要屏蔽ID的什么內(nèi)容,什么格式;CAN_FilterMaskId是指CAN_FilterId的每一位是否需要過(guò)濾,若CAN_FilterMaskId在某位上是1的話,ID對(duì)應(yīng)位上的數(shù)值就必須和CAN_FilterId該位上的一樣,保持一致,反之則是“不關(guān)心”。

上述程序的設(shè)置的含義就是:只接收來(lái)自0x1314的數(shù)據(jù),屏蔽其他ID的數(shù)據(jù)。

程序思路

這里準(zhǔn)備做一個(gè)主機(jī)與從機(jī)的通信,主要用擴(kuò)展標(biāo)識(shí)符ExtId來(lái)區(qū)分,分配的標(biāo)識(shí)符是: 主機(jī):0x1314 從機(jī):0x1311

主機(jī)負(fù)責(zé)接收所有從機(jī)的數(shù)據(jù),不需要過(guò)濾,用擴(kuò)展標(biāo)識(shí)符ExtId來(lái)區(qū)分不同從機(jī)的數(shù)據(jù);主機(jī)還可以向不同從機(jī)發(fā)送信息。而從機(jī)則只接收來(lái)自主機(jī)的數(shù)據(jù),同樣用擴(kuò)展標(biāo)識(shí)符ExtId來(lái)區(qū)分是否是發(fā)向自己的數(shù)據(jù);同時(shí),也能夠向主機(jī)發(fā)送信息。

相關(guān)代碼

代碼也是非常簡(jiǎn)單的,這里貼出了主機(jī)和從機(jī)的can.c和can.h兩個(gè)文件。

從機(jī)相關(guān)代碼

can.c文件:

#include "can.h"

/* 在中斷處理函數(shù)中返回 *///__IO uint32_t ret = 0;

//接收數(shù)據(jù)緩沖器u8 RxBuf[5];u8 Rx_flag=0;

void CAN1_Init(void){    GPIO_InitTypeDef GPIO_InitStructure;     NVIC_InitTypeDef NVIC_InitStructure;    CAN_InitTypeDef        CAN_InitStructure;    CAN_FilterInitTypeDef  CAN_FilterInitStructure;

    /* 復(fù)用功能和GPIOB端口時(shí)鐘使能*/        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB, ENABLE);                                                                      

    /* CAN1 模塊時(shí)鐘使能 */    RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); 

    /* Configure CAN pin: RX */  // PB8    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;       //上拉輸入    GPIO_Init(GPIOB, &GPIO_InitStructure);

    /* Configure CAN pin: TX */   // PB9    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;     //復(fù)用推挽輸出    GPIO_Init(GPIOB, &GPIO_InitStructure);

    //#define GPIO_Remap_CAN    GPIO_Remap1_CAN1 本實(shí)驗(yàn)沒(méi)有用到重映射I/O    GPIO_PinRemapConfig(GPIO_Remap1_CAN1, ENABLE);

    //CAN_NVIC_Configuration(); //CAN中斷初始化       /* Configure the NVIC Preemption Priority Bits */      NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

    #ifdef  VECT_TAB_RAM        /* Set the Vector Table base location at 0x20000000 */       NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);     #else  /* VECT_TAB_FLASH  */      /* Set the Vector Table base location at 0x08000000 */       NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);       #endif

    /* enabling interrupt */    NVIC_InitStructure.NVIC_IRQChannel=USB_LP_CAN1_RX0_IRQn;;    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;    NVIC_Init(&NVIC_InitStructure);

    //CAN_INIT();//CA初始化N模塊     /* CAN register init */    CAN_DeInit(CAN1);                       //將外設(shè)CAN的全部寄存器重設(shè)為缺省值    CAN_StructInit(&CAN_InitStructure);     //把CAN_InitStruct中的每一個(gè)參數(shù)按缺省值填入

    /* CAN cell init */    CAN_InitStructure.CAN_TTCM=DISABLE;         //沒(méi)有使能時(shí)間觸發(fā)模式    CAN_InitStructure.CAN_ABOM=DISABLE;         //沒(méi)有使能自動(dòng)離線管理    CAN_InitStructure.CAN_AWUM=DISABLE;         //沒(méi)有使能自動(dòng)喚醒模式    CAN_InitStructure.CAN_NART=DISABLE;         //沒(méi)有使能非自動(dòng)重傳模式    CAN_InitStructure.CAN_RFLM=DISABLE;         //沒(méi)有使能接收FIFO鎖定模式    CAN_InitStructure.CAN_TXFP=DISABLE;         //沒(méi)有使能發(fā)送FIFO優(yōu)先級(jí)    CAN_InitStructure.CAN_Mode=CAN_Mode_Normal; //CAN設(shè)置為正常模式    CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;      //重新同步跳躍寬度1個(gè)時(shí)間單位    CAN_InitStructure.CAN_BS1=CAN_BS1_3tq;      //時(shí)間段1為3個(gè)時(shí)間單位    CAN_InitStructure.CAN_BS2=CAN_BS2_2tq;      //時(shí)間段2為2個(gè)時(shí)間單位    CAN_InitStructure.CAN_Prescaler=60;         //時(shí)間單位長(zhǎng)度為60     CAN_Init(CAN1,&CAN_InitStructure);          //波特率為:72M/2/60(1+3+2)=0.1 即波特率為100KBPs

    // CAN filter init 過(guò)濾器,注意,只接收主機(jī)發(fā)過(guò)來(lái)的數(shù)據(jù),屏蔽其他數(shù)據(jù)    CAN_FilterInitStructure.CAN_FilterNumber=1;                     //指定過(guò)濾器為1    CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;   //指定過(guò)濾器為標(biāo)識(shí)符屏蔽位模式    CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;  //過(guò)濾器位寬為32位

    //CAN_FilterInitStructure.CAN_FilterIdHigh= (((u32)0x1314<<3)&0xFFFF0000)>>16;      CAN_FilterInitStructure.CAN_FilterIdHigh=0X00;                  //要過(guò)濾的ID高位     CAN_FilterInitStructure.CAN_FilterIdLow= (((u32)0x1314<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF; //要過(guò)濾的ID低位 

    CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0xFFFF;            //過(guò)濾器屏蔽標(biāo)識(shí)符的高16位值    CAN_FilterInitStructure.CAN_FilterMaskIdLow=0xFFFF;             //過(guò)濾器屏蔽標(biāo)識(shí)符的低16位值    CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FIFO0;     //設(shè)定了指向過(guò)濾器的FIFO為0    CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;            //使能過(guò)濾器    CAN_FilterInit(&CAN_FilterInitStructure);                       //按上面的參數(shù)初始化過(guò)濾器

    /* CAN FIFO0 message pending interrupt enable */     CAN_ITConfig(CAN1,CAN_IT_FMP0, ENABLE);                         //使能FIFO0消息掛號(hào)中斷}

/* 發(fā)送兩個(gè)字節(jié)的數(shù)據(jù)*/u8 CAN_SetMsg(u8 Data1,u8 Data2){     u8 mbox;    u16 i=0;     CanTxMsg TxMessage;  

    TxMessage.StdId=0x0000;     //標(biāo)準(zhǔn)標(biāo)識(shí)符為0x00    TxMessage.ExtId=0x1311;     //擴(kuò)展標(biāo)識(shí)符0x1311,可以更改該標(biāo)識(shí)符以示區(qū)分不同從機(jī)    TxMessage.IDE=CAN_ID_EXT;   //使用擴(kuò)展標(biāo)識(shí)符    TxMessage.RTR=CAN_RTR_DATA; //為數(shù)據(jù)幀    TxMessage.DLC=2;            //消息的數(shù)據(jù)長(zhǎng)度為2個(gè)字節(jié)    TxMessage.Data[0]=Data1;    //第一個(gè)字節(jié)數(shù)據(jù)    TxMessage.Data[1]=Data2;    //第二個(gè)字節(jié)數(shù)據(jù) 

    //發(fā)送數(shù)據(jù)    mbox= CAN_Transmit(CAN1, &TxMessage);      while((CAN_TransmitStatus(CAN1, mbox)==CAN_TxStatus_Failed)&&(i<0XFFF))        i++;    //等待發(fā)送結(jié)束    if(i>=0XFFF)        return 0;    return 1;}u8 CAN_GetMsg(u8 *msg1,u8 *msg2){    if(Rx_flag == 1)//發(fā)現(xiàn)數(shù)據(jù)    {        *msg1=RxBuf[0];        *msg2=RxBuf[1];        Rx_flag=0;//數(shù)據(jù)已經(jīng)取走,可以更新數(shù)據(jù)        return 1;    }else        return 0;}/* USB中斷和CAN接收中斷服務(wù)程序,USB跟CAN公用I/O,這里只用到CAN的中斷。*/void USB_LP_CAN1_RX0_IRQHandler(void){

  CanRxMsg RxMessage;

  RxMessage.StdId=0x00;  RxMessage.ExtId=0x00;  RxMessage.IDE=0;  RxMessage.DLC=0;  RxMessage.FMI=0;  RxMessage.Data[0]=0x00;  RxMessage.Data[1]=0x00;    

  CAN_Receive(CAN1,CAN_FIFO0, &RxMessage); //接收FIFO0中的數(shù)據(jù)  

  if(Rx_flag == 0)//數(shù)據(jù)已取走或者緩沖器為空    {        RxBuf[0]=RxMessage.Data[0];        RxBuf[1]=RxMessage.Data[1];        Rx_flag=1;//數(shù)據(jù)已經(jīng)備好,等待取走    }

}

		

can.h文件

95e760c0-f6c2-11ec-ba43-dac502259ad0.png

主機(jī)相關(guān)代碼

這里主機(jī)代碼大部分是和從機(jī)類似的,就只貼出不同的地方了。 can.c文件:

#include "can.h"

/* 在中斷處理函數(shù)中返回 *///__IO uint32_t ret = 0;

void CAN1_Init(void){    ......//以上與從機(jī)部分相同

    //CAN filter init 過(guò)濾器,已經(jīng)設(shè)置為任意,可以通過(guò)ExtId標(biāo)識(shí)符區(qū)分從機(jī)代號(hào)    CAN_FilterInitStructure.CAN_FilterNumber=1;                     //指定過(guò)濾器為1    CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;   //指定過(guò)濾器為標(biāo)識(shí)符屏蔽位模式    CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;  //過(guò)濾器位寬為32位    CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;                //過(guò)濾器標(biāo)識(shí)符的高16位值    CAN_FilterInitStructure.CAN_FilterIdLow=CAN_ID_EXT|CAN_RTR_DATA;//過(guò)濾器標(biāo)識(shí)符的低16位值    CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;            //過(guò)濾器屏蔽標(biāo)識(shí)符的高16位值    CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;             //過(guò)濾器屏蔽標(biāo)識(shí)符的低16位值    CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FIFO0;     //設(shè)定了指向過(guò)濾器的FIFO為0    CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;            //使能過(guò)濾器    CAN_FilterInit(&CAN_FilterInitStructure);                       //按上面的參數(shù)初始化過(guò)濾器

    /* CAN FIFO0 message pending interrupt enable */     CAN_ITConfig(CAN1,CAN_IT_FMP0, ENABLE);                         //使能FIFO0消息掛號(hào)中斷}

//接收數(shù)據(jù)緩沖器u8 CAN_RX_BUF[CAN_RX_LEN]={0};     //接收緩沖,最大USART_REC_LEN個(gè)字節(jié).//接收標(biāo)志位u8 Rx_flag=0;/* USB中斷和CAN接收中斷服務(wù)程序,USB跟CAN公用I/O,這里只用到CAN的中斷。*/void USB_LP_CAN1_RX0_IRQHandler(void){    u8 i=0;    CanRxMsg RxMessage;

    RxMessage.StdId=0x00;    RxMessage.ExtId=0x00;    RxMessage.IDE=0;    RxMessage.DLC=0;    RxMessage.FMI=0;

    CAN_Receive(CAN1,CAN_FIFO0, &RxMessage); //接收FIFO0中的數(shù)據(jù)  

    if(Rx_flag == 0)//數(shù)據(jù)已取走或者緩沖器為空    {        if((RxMessage.DLC) == 2)//是否收到2位字節(jié)數(shù)據(jù)        {             CAN_RX_BUF[0]=RxMessage.Data[0];             CAN_RX_BUF[1]=RxMessage.Data[1];             }    }

} 

/* 發(fā)送兩個(gè)字節(jié)的數(shù)據(jù)*/u8 CAN_SendMsg(u8* data1, u8* data2){     u8 mbox;    u16 i=0;     CanTxMsg TxMessage;  

    TxMessage.StdId=0x0000;     //標(biāo)準(zhǔn)標(biāo)識(shí)符為0x00    TxMessage.ExtId=0x1314;     //擴(kuò)展標(biāo)識(shí)符0x0000    TxMessage.IDE=CAN_ID_EXT;   //使用擴(kuò)展標(biāo)識(shí)符    TxMessage.RTR=CAN_RTR_DATA; //為數(shù)據(jù)幀    TxMessage.DLC=2;            //消息的數(shù)據(jù)長(zhǎng)度為2個(gè)字節(jié)    TxMessage.Data[0]=Data1;    //第一個(gè)字節(jié)數(shù)據(jù)    TxMessage.Data[1]=Data2;    //第二個(gè)字節(jié)數(shù)據(jù) 

    //發(fā)送數(shù)據(jù)    mbox= CAN_Transmit(CAN1, &TxMessage);      while((CAN_TransmitStatus(CAN1, mbox)==CAN_TxStatus_Failed)&&(i<0XFFF))        i++;    //等待發(fā)送結(jié)束    if(i>=0XFFF)        return 0;//發(fā)送失敗    return 1;//發(fā)送成功 }u8 CAN_GetMsg(u8 *msg1,u8 *msg2){    if(Rx_flag == 1)//發(fā)現(xiàn)數(shù)據(jù)    {        *msg1=CAN_RX_BUF[0];        *msg2=CAN_RX_BUF[1];        Rx_flag=0;//數(shù)據(jù)已經(jīng)取走,可以更新數(shù)據(jù)        return 1;    }else        return 0;}void Clear_canBuffer(void){    Rx_flag=0;//清楚接收標(biāo)志位    memset(CAN_RX_BUF, 0, sizeof(u8)*CAN_RX_LEN);//清空緩沖區(qū)}u8 Check_canRX(void){    return (Rx_flag == 6);}

		

can.h文件:

#ifndef __CAN_H#define __CAN_H

#include "sys.h"#include "string.h"

#define CAN_RX_LEN          30          //定義最大接收字節(jié)數(shù) 

extern u8  CAN_RX_BUF[CAN_RX_LEN]; //接收緩沖,最大USART_REC_LEN個(gè)字節(jié).末字節(jié)為換行符 

void CAN1_Init(void);u8 CAN_SendMsg(u8* data1, u8* data2);u8 CAN_GetMsg(u8 *msg1,u8 *msg2);

#endif /* __CAN_H */

文章出處:【微信公眾號(hào):STM32嵌入式開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

審核編輯:符乾江
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • CAN
    CAN
    +關(guān)注

    關(guān)注

    57

    文章

    2901

    瀏覽量

    467180
  • STM32
    +關(guān)注

    關(guān)注

    2291

    文章

    11022

    瀏覽量

    363364

原文標(biāo)題:使用STM32F103做CAN的收發(fā)通信

文章出處:【微信號(hào):c-stm32,微信公眾號(hào):STM32嵌入式開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    CS32F103RB有無(wú)驅(qū)動(dòng)例程,是否可用stm32F103的驅(qū)動(dòng)代碼?

    如果不能使用stm32F103驅(qū)動(dòng)的話,請(qǐng)把驅(qū)動(dòng)例程發(fā)送1830665518@qqcom
    發(fā)表于 05-15 10:54

    STM32F103x8 STM32F103xB單片機(jī)數(shù)據(jù)手冊(cè)

    STM32F103x8STM32F103xB單片機(jī)數(shù)據(jù)手冊(cè)
    發(fā)表于 04-14 14:55 ?2次下載

    STM32F103×8/STM32F103×B MCU手冊(cè)

    本文提供了STM32F103x8和STM32F103xB中密度高性能系列微控制器的訂購(gòu)信息和機(jī)械器件特性。有關(guān)整個(gè)STMicroelectronics STM32F103xx系列的更多信息,請(qǐng)
    發(fā)表于 03-18 16:37 ?0次下載

    使用stm32F103的USART的lin通訊模式,TX,RX,GND,三根線怎么和lin總線連接?

    使用stm32F103的USART的lin通訊模式,TX,RX,GND,三根線怎么和lin總線連接
    發(fā)表于 03-14 07:39

    MH32F103A單片機(jī) 低價(jià)替代STM32,硬件完美兼容 主頻可達(dá)216M

    、I2C、UART、USB 2.0全速串行通信接口、CAN總線控制器以及SDIO接口。 MH32F103A單片機(jī)可用于替代STM32103,替換簡(jiǎn)單,功能更強(qiáng),價(jià)格更低。 應(yīng)用場(chǎng)景 M
    的頭像 發(fā)表于 02-14 16:14 ?446次閱讀
    MH32<b class='flag-5'>F103</b>A單片機(jī) 低價(jià)替代<b class='flag-5'>STM32</b>,硬件完美兼容 主頻可達(dá)216M

    零死角玩轉(zhuǎn)STM32F103—指南者

    電子發(fā)燒友網(wǎng)站提供《零死角玩轉(zhuǎn)STM32F103—指南者.pdf》資料免費(fèi)下載
    發(fā)表于 01-20 14:18 ?49次下載

    STM32F103上位機(jī)升級(jí),RS485升級(jí)、CAN升級(jí)

    STM32F103_IAP開發(fā)板,用STM32F103RCT6主控芯片,例程用標(biāo)準(zhǔn)庫(kù)開發(fā)。基本串口RS232\\RS485通信CAN接口升級(jí)學(xué)習(xí)方案開發(fā)板。 升級(jí)方案分兩種:用外置F
    發(fā)表于 01-03 08:57

    stm32F103驅(qū)動(dòng)LDC1000,返回的proximtyDataMIN frequencyDataMIN proximtyDataMAX frequencyDataMAX均為0怎么解決?

    最近在做關(guān)于stm32F103驅(qū)動(dòng)LDC1000的實(shí)驗(yàn),發(fā)現(xiàn)返回的 proximtyDataMINfrequencyDataMINproximtyDataMAX frequencyDataMAX均為0,讀取STATUS寄存器的值為112,請(qǐng)問(wèn)怎么解決? 非常感謝!!!
    發(fā)表于 01-02 08:28

    ADS8320如何與STM32f103的SPI連接?

    如題,請(qǐng)教一下ADS8320如何與STM32f103的SPI連接,因?yàn)?b class='flag-5'>STM32的SPI只支持8位和16為的傳輸格式。如果您有驅(qū)動(dòng),那定是極好的!
    發(fā)表于 12-24 08:23

    STM32F103x8/STM32F103xB規(guī)格書

    電子發(fā)燒友網(wǎng)站提供《STM32F103x8/STM32F103xB規(guī)格書.pdf》資料免費(fèi)下載
    發(fā)表于 12-06 15:43 ?1次下載

    stm32f103用SPI驅(qū)動(dòng)ADS8341數(shù)據(jù)不正確,忽大忽小的原因?

    stm32f103用SPI驅(qū)動(dòng)ADS8341數(shù)據(jù)不正確。忽大忽小。
    發(fā)表于 12-04 06:14

    STM32F103模擬SPI驅(qū)動(dòng)ADS1256,沒(méi)有成功的原因?

    STM32F103模擬SPI驅(qū)動(dòng)ADS1256,沒(méi)有成功
    發(fā)表于 11-22 07:11

    第三篇-V1.5 TB6612電機(jī)pwm控制STM32智能小車 STM32F103C8T6單片機(jī)

    通過(guò)合理的硬件設(shè)計(jì)和詳細(xì)的視頻筆記介紹,硬件使用STM32F103主控資料多方便學(xué)習(xí),通過(guò)3萬(wàn)字筆記、12多個(gè)小時(shí)視頻、20多章節(jié)代碼手把手教會(huì)你如何開發(fā)和調(diào)試。
    的頭像 發(fā)表于 08-12 18:29 ?2706次閱讀
    第三篇-V1.5 TB6612電機(jī)pwm控制<b class='flag-5'>STM32</b>智能小車 <b class='flag-5'>STM32F103</b>C8T6單片機(jī)

    STM32F103無(wú)法下載程序的原因?

    STM32F103無(wú)法下載程序
    發(fā)表于 07-09 06:24

    如何使用STM32F103控制LTC2662?

    使用STM32F103控制LTC2662
    發(fā)表于 07-04 07:46
    主站蜘蛛池模板: 业余性自由色xxxx视频 | 亚洲欧美网 | 日本最猛黑人xxxx猛交 | 美日韩一级 | 五月婷婷丁香在线视频 | 国产色婷婷免费视频 | 国产福利小视频在线观看 | 狼人 成人 综合 亚洲 | 国产一区美女 | 日韩午夜大片 | 亚洲精品国产自在久久出水 | 天天爽夜夜爽人人爽一区二区 | 手机看片福利久久 | 一级毛片成人免费看a | 三级黄色在线观看 | 国产黄色录像视频 | 伊人精品久久久大香线蕉99 | 日本免费精品视频 | 中国特黄一级片 | 免费观看做网站爱 | 免费网站直接看 | 美女性爽视频国产免费 | 色婷婷激情五月综合 | 黑粗硬大欧美视频 | 看片地址| 国产伦精品一区二区 | 成年美女黄网站色大免费视频 | 美女视频黄视大全视频免费网址 | 一区二区三区四区在线观看视频 | 最近2018中文字幕2019视频 | 欧美黄色免费看 | 久久久黄色片 | 色综合久久久久久久久五月 | 天天影视网天天影网 | 人人骚 | 香蕉久久夜色精品国产小说 | 欧美国产在线一区 | 天天干夜夜草 | 加勒比一木道|视频在线看 加勒比在线免费视频 | 日本高清视频色wwwwww色 | 欧美日韩国产乱了伦 |