娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年05月23日(星期五)

2019年05月23日 | STM32F105 CAN通信過濾器配置問題

發布者:qazwsx007 來源: eefocus關鍵字:STM32F105  CAN通信  過濾器配置 手機看文章 掃描二維碼
隨時隨地手機看文章

總結一些最近做項目對CAN通信的過濾器配置的理解;


這里我使用STM32F105系列的芯片,有2路CAN,我使用的是CAN2,過濾器可以設置從15開始,當然,從1開始也是沒有問題的;

當設置了CAN過濾器,表示只能接收指定ID的數據,其他ID發送過來的數據,不再觸發CAN中斷,可以進一步提高系統的穩定性。當CAN總線上數據比較多的時候,是很有必要的。

具體配置如下:

CAN_SlaveStartBank(15); // can2篩選器組從15開始 

CAN_FilterInitStructure.CAN_FilterNumber=15; 

CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; 

CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; 

//表示只能接收接收方ID為0x11,發送方ID為0x14的數據,具體看通信協議

CAN_FilterInitStructure.CAN_FilterIdHigh=0x1114; 

CAN_FilterInitStructure.CAN_FilterIdLow=0x0000; 

CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0xffff; 

CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000; 

CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0; 

CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; 

CAN_FilterInit(&CAN_FilterInitStructure);

1

2

3

4

5

6

7

8

9

10

11

12

如果要設置多個過濾器,繼續配置如下:


CAN_FilterInitStructure.CAN_FilterNumber=16; 

CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; 

CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; 

CAN_FilterInitStructure.CAN_FilterIdHigh=0x1113; 

CAN_FilterInitStructure.CAN_FilterIdLow=0x0000; 

CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0xffff; 

CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000; 

CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0; 

CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; 

CAN_FilterInit(&CAN_FilterInitStructure);

1

2

3

4

5

6

7

8

9

10

以此類推。

3. 單獨使用CAN2的時候必須開啟先CAN1的時鐘,否則收不到數據;

CAN完整的初始化代碼(注意F105系列的CAN2時鐘使能部分):


//CAN模式初始化

//參數 tsjw :重新同步跳躍時間單元.范圍:CAN_SJW_1tq~ CAN_SJW_4tq

//參數 tbs2 :時間段2的時間單元.   范圍:CAN_BS2_1tq~CAN_BS2_8tq;

//參數 tbs1 :時間段1的時間單元.   范圍:CAN_BS1_1tq ~CAN_BS1_16tq

//參數 brp ;波特率分頻器.范圍:1~1024;  tq=(brp)*tpclk1

//波特率=Fpclk1/((tbs1+1+tbs2+1+1)*brp);

//示例:Fpclk1的時鐘在初始化的時候設置為36M,如果設置 CAN_Mode_Init(CAN_SJW_1tq,CAN_BS2_8tq,CAN_BS1_9tq,4,CAN_Mode_LoopBack);

//則波特率為:(pclk1/((tsjw+tbs2+tbs1)*brp)) = 36Mhz/18/4 = 500Kbits

//參數 mode :模式設置: mode:CAN_Mode_Normal,普通模式;CAN_Mode_LoopBack,回環模式; 

//CAN普通模式初始化, 波特率500Kbps 

//返回值:0,初始化OK;

//    其他,初始化失敗;

//這里我使用正常模式;CAN_Mode_Init(CAN_SJW_1tq,CAN_BS1_4tq,CAN_BS2_7tq,6,CAN_Mode_Normal);//正常模式

u8 CAN_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode)

{

GPIO_InitTypeDef GPIO_InitStructure; //聲明結構體

CAN_InitTypeDef        CAN_InitStructure;

CAN_FilterInitTypeDef  CAN_FilterInitStructure;

NVIC_InitTypeDef  NVIC_InitStructure;//CAN接收RX0中斷使能

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//使能PORTB時鐘                      


RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); //新增 注意

RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2, ENABLE);//使能CAN2時鐘  


GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復用推挽輸出

GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化IO

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;

//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉輸入  

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 

  GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化IO

//CAN單元設置

  CAN_InitStructure.CAN_TTCM = DISABLE;//禁止時間觸發通信模式

CAN_InitStructure.CAN_ABOM = ENABLE; /* 自動離線禁止,自動離線:一旦硬件監控到128次11個隱性位,就自動退出離線狀態。在這里要軟件設定后才能退出 */

//  CAN_InitStructure.CAN_ABOM = DISABLE;//軟件對CAN_MCR寄存器的INRQ位進行置1后清0后,一旦硬件檢測到128次11位連續的隱形位,就退出離線狀態(軟件自動離線管理)

  CAN_InitStructure.CAN_AWUM = DISABLE;//睡眠模式通過軟件喚醒(清除CAN->MCR的SLEEP位)???

  CAN_InitStructure.CAN_NART = DISABLE; /* 報文重傳, 如果錯誤一直傳到成功止,否則只傳一次 */

// CAN_InitStructure.CAN_NART = ENABLE;//禁止報文自動傳送 

  CAN_InitStructure.CAN_RFLM = DISABLE;//報文不鎖定,新的覆蓋舊的  

CAN_InitStructure.CAN_TXFP = ENABLE;  /* 發送優先級  0---由標識符決定  1---由發送請求順序決定 */

// CAN_InitStructure.CAN_TXFP = DISABLE;//發生FIFO的優先級由報文的標識符決定

  CAN_InitStructure.CAN_Mode = mode;//模式設置: mode:CAN_Mode_Normal,普通模式;CAN_Mode_LoopBack,回環模式; 

  

  //設置波特率

  CAN_InitStructure.CAN_SJW = tsjw;//重新同步跳躍寬度(Tsjw)為tsjw+1個時間單位  CAN_SJW_1tq  CAN_SJW_2tq CAN_SJW_3tq CAN_SJW_4tq

  CAN_InitStructure.CAN_BS1 = tbs1;//Tbs1=tbs1+1個時間單位CAN_BS1_1tq ~CAN_BS1_16tq

  CAN_InitStructure.CAN_BS2 = tbs2;//Tbs2=tbs2+1個時間單位CAN_BS2_1tq ~ CAN_BS2_8tq

//(pclk1/((1+8+9)*4)) = 36Mhz/18/4 = 500Kbits

//(pclk1/((1+4+7)*6)) = 36Mhz/18/4 = 500Kbits

  CAN_InitStructure.CAN_Prescaler = brp; 

        

  CAN_Init(CAN2, &CAN_InitStructure);

#if 1

//待優化

CAN_SlaveStartBank(15); // can2篩選器組從15開始 

CAN_FilterInitStructure.CAN_FilterNumber=15; 

CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; 

CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; 

CAN_FilterInitStructure.CAN_FilterIdHigh=0x1114; 

CAN_FilterInitStructure.CAN_FilterIdLow=0x0000; 

CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0xffff; 

CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000; 

CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0; 

CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; 

CAN_FilterInit(&CAN_FilterInitStructure);


CAN_FilterInitStructure.CAN_FilterNumber=16; 

CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; 

CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; 

CAN_FilterInitStructure.CAN_FilterIdHigh=0x1113; 

CAN_FilterInitStructure.CAN_FilterIdLow=0x0000; 

CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0xffff; 

CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000; 

CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0; 

CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; 

CAN_FilterInit(&CAN_FilterInitStructure);

CAN_FilterInitStructure.CAN_FilterNumber=17; 

CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; 

CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; 

CAN_FilterInitStructure.CAN_FilterIdHigh=0x1115; 

CAN_FilterInitStructure.CAN_FilterIdLow=0x0000; 

CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0xffff; 

CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000; 

CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0; 

CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; 

CAN_FilterInit(&CAN_FilterInitStructure);

CAN_FilterInitStructure.CAN_FilterNumber=18; 

CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask; 

CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit; 

CAN_FilterInitStructure.CAN_FilterIdHigh=0x1116; 

CAN_FilterInitStructure.CAN_FilterIdLow=0x0000; 

CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0xffff; 

CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000; 

CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_Filter_FIFO0; 

CAN_FilterInitStructure.CAN_FilterActivation=ENABLE; 

CAN_FilterInit(&CAN_FilterInitStructure);

#endif

CAN_ITConfig(CAN2,CAN_IT_FMP0,ENABLE); //FIFO0消息掛號中斷允許.     


NVIC_InitStructure.NVIC_IRQChannel = CAN2_RX0_IRQn;    //優先級配置,比較特殊 USB_LP_CAN1_RX0_IRQn

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 5;     // 主優先級為1

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;            // 次優先級為0

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;/* 掛號中斷, 進入中斷后讀fifo的報文函數釋放報文清中斷標志 */

NVIC_Init(&NVIC_InitStructure);

}



關鍵字:STM32F105  CAN通信  過濾器配置 引用地址:STM32F105 CAN通信過濾器配置問題

上一篇:STM32F103VET6——ADC單通道中斷讀取實驗講解
下一篇:STM32 C語言編程易錯問題總結

推薦閱讀

美光昨天發布了最新款的5210 ION系列企業級SSD,采用美光與Intel聯合開發的新一代QLC NAND閃存顆粒。這也是全球首款QLC閃存產品。按照存儲方式劃分,NAND閃存已經發展了四代:第一代SLC每單元可存儲1比特數據(1bits/cell),性能好、壽命長,可經受10萬次編程/擦寫循環,但容量低、成本高,如今已經非常罕見;第二代MLC每單元可存儲2比特數據(2bits/cell)...
1. 前言如今,LED在各個領域中的應用已經司空見慣,在汽車領域也不例外,作為剎車燈、車速表等指示燈光源,LED的應用正在逐年增加。(圖1) 圖1. 汽車內飾中采用LED的位置 ROHM自1973年開始生產LED燈以來,在產品開發方面,已經連續45年處于行業領先地位。ROHM的最大優勢在于,能夠進行全面而嚴格的品質管理并利用垂直統合型生產體制(從元件制造階段開...
據FF消息,歷經七個月的申請、談判、投票和法院確認,備受關注的Faraday Future(FF)創始人兼CPUO賈躍亭(YT)的個人破產重組終于在洛杉磯當地時間5月21日舉行的聽證會上獲得了加州中區破產重組法院的最終確認和通過,盡管有極個別債權人依然在聽證會上表達了反對意見,但絕大多數債權人和法官均表達了支持意見。這意味著賈躍亭個人破產重組正式進入生效...
據外媒報道,LG化學將于7月向特斯拉供應鎳鈷錳鋁(NCMA)四元電池正極材料,這是LG化學首次商業化生產NCMA正極材料。NCMA電池是指正極采用鎳、鈷、錳、鋁四種金屬材料的四元電池。該概念最早于2016年由韓國漢陽大學及韓國本土動力電池企業共同提出。NCMA正極材料的鎳含量已提高到90%,鈷含量已降低至5%以下,高含量的鎳可以增加電池的能量密度,讓電池能夠...

史海拾趣

問答坊 | AI 解惑

電話研究. 請大家看看..小毛病

師傅門好我有個問題弄不明白,我的的電話的掛機狀態突然發生吱吱的聲音,然后把話筒接起來在又掛機又好了,等一下你按免提鍵沒有反映,你在把話筒那起來一下又掛到 在按免提鍵又正常了:  請大家分析下:   謝謝…

查看全部問答∨

擴大LDO輸入電壓范圍~~~

我采用如下圖所示的LDO原理圖,其中Vref采用10V穩壓管,R1=1.8K,R2=1K,調整管采用MJL1302 PNP管。當輸入電壓<45V時,電壓能很好工作,Vo穩定在27.9—28V,但當Vi>45V,輸出就會變成0(是由于當Vi>45V,運放V+<V-,運放輸出為0)。請問下 ...…

查看全部問答∨

wang1jin帶您從零學單片機視頻教程(免費下載!)

最近在網上下載了一部視頻教程,看后感覺不錯.所以和大家共享一下... 發一點好貼不容易,希望下載的朋友幫忙頂一下...版主加下精....謝謝... 頂得人多的話,我下次還會來更新... 直接點擊就可以下載了.... 第一章的內容包括有單片機硬 ...…

查看全部問答∨

AD7891 verilog

我用fpga產生控制ad7891的時序,但弄了很久都出不來,哪位高手能幫我弄一下嗎…

查看全部問答∨

幫忙分析一下為什么wince5.0沒有起來

我用的fristboot和eboot是微控提供的,內核是自己編譯的, 下面的是從串口打印的信息 RomBOOT >By www.mcuzone.com ... FMD_DirectRead lasted 0 ms for 0x46 bytes (timer granularity is 400) Press [ENTER] to download now or [SPACE] t ...…

查看全部問答∨

Protel 99se里刪除漢字問題

在Protel 99se  PCB 圖里放漢字后,我不需要它了,要刪除。有沒有直接刪除的辦法,我怎么都直接刪不了,必須把鎖打開后一個線一個線的刪(一個字好多線組成的),特費勁,知道的指點指點,謝謝了!…

查看全部問答∨

關于掃描槍程序dll調用的問題

我在symbol ppt2800m ,pocket pc 2003上寫一個掃描槍程序,其中用到了一個activescan2800m.dll的文件,我將其添加引用后,調用其中的函數,在執行的過程中告訴我:由于以下錯誤: 類未注冊 ,無法創建 CLSID 為“{58A21E64-D817-11D5-84F7-00E098035 ...…

查看全部問答∨

有外企好職位給硬件設計的高手,在上海!

有外企好職位給硬件設計的高手,在上海! 我是獵頭,現在手上有很不錯的兩個職位,500強外企。FPGA設計和PCB LAYOUT. 唯一的條件--要求英語非常好(進外企這也不算要求哦~~) 所以這兩塊的高手請速和我聯系 MSN:brook.b@msn.com…

查看全部問答∨

stm32訂制rtc晶振32.768k

                                 mark…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 馆陶县| 喀喇| 绩溪县| 常宁市| 金塔县| 太谷县| 松溪县| 徐水县| 称多县| 汽车| 永春县| 曲阜市| 灵石县| 东方市| 武义县| 托里县| 新田县| 大洼县| 星座| 万盛区| 岳池县| 抚松县| 开远市| 文成县| 措美县| 铁力市| 永善县| 集贤县| 三穗县| 静乐县| 荆州市| 西贡区| 禹城市| 留坝县| 东丰县| 金坛市| 琼海市| 吴忠市| 闸北区| 洮南市| 石楼县|