日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

stm32f4關(guān)于can總線的學習心得

發(fā)布者:Wanderlust123最新更新時間:2024-10-14 來源: cnblogs關(guān)鍵字:stm32f4  can總線  學習心得 手機看文章 掃描二維碼
隨時隨地手機看文章

今天花了一天的時間學習了stm32f4的can模塊的相關(guān)知識,首先我學的時候顯示從can協(xié)議這塊入手,而后進入stm32的配置和使用上,期間子啊百度上找了好多資料這里吧我的理解跟大家分享一下,希望我理解不足和錯誤的地方大家給指出來。


對于stm32的使用就是三個步驟
1:學習怎么配置相應(yīng)的寄存器
2:學習怎樣發(fā)送數(shù)據(jù)
3:學習怎樣接收數(shù)據(jù);但是在這個之前的學會對can總線協(xié)議的一些了解;
這里我拿我學習的時候看的一篇百度文章來說明吧:
CAN總線上的一個節(jié)點(站)發(fā)送數(shù)據(jù)時,它以報文的形式廣播給網(wǎng)絡(luò)中所有節(jié)點,對每個節(jié)點來說,無論數(shù)據(jù)是否是發(fā)給自己的,都對其接收。每組報文開頭的11位字符為標識符,定義了報文的優(yōu)先級,這種報文格式成為面向內(nèi)容的編制方案。同一系統(tǒng)中標識符是唯一的,不可能有兩個站發(fā)送具有相同標識符的報文,當幾個站同時競爭總線讀取時,這種配置十分重要。 
大體的工作原理我們搞清了,但是根本的協(xié)議我們還要花一番功夫。下面介紹一個重要的名詞,“顯性“和”隱性“ 
   在我看到的很多文章里,有很多顯性和隱性的地方,為此我頭痛不已,最終我把它們徹底弄明白了。 
  首先CAN數(shù)據(jù)總線有兩條導(dǎo)線,一條是黃色的,一條是綠色的。分別是CAN_High線和CAN_Low線 當靜止狀態(tài)時,這兩條導(dǎo)線上的電平一樣。這個電平稱為靜電平。大約為2.5伏。 這個靜電平狀態(tài)就是隱形狀態(tài),也稱隱性電平。也就是沒有任何干擾的時候的狀態(tài)稱為隱性狀態(tài).當有信號修改時,CAN_High線上的電壓值變高了,一般來說會升高至少1V,而CAN_Low線上的電壓值會降低一個同樣值,也是1v,那么這時候。CAN_High就 是2.5v+1v=3.5v,它就處于激活狀態(tài)了。而CAN_Low降為2.5v-1v=1.5v。 可以看看這個圖 
 
由此我們得到 
在隱性狀態(tài)下,CAN_High線與CAN_Low沒有電壓差,這樣我們看到?jīng)]有任何變化也就檢測不到信號。但是在顯性狀態(tài)時,改值最低為2V,我們就可以利用這種變化才傳輸數(shù)據(jù)了。所以出現(xiàn)了那些幀,那些幀中的場,那些場中的位,云云~~~~~~~~~~~ 
在總線上通常邏輯1表示隱性。而0表示顯性。這些1啊,0啊,就可以利用起來為我們傳數(shù)據(jù)了。 
利用這種電壓差,我們可以接收信號;
以上是對顯隱電平的理解
CAN的報文格式有兩種,不同之處其實就是識別符長度不同,具有11位識別符的幀稱為標準幀,而還有29位識別符的幀為擴展幀,CAN報文有以下4個不同的幀類型。分別是 (1) 數(shù)據(jù)幀:數(shù)據(jù)幀將數(shù)據(jù)從發(fā)送器傳輸?shù)浇邮掌鳌?(2) 遠程幀:總線節(jié)點發(fā)出遠程幀,請求發(fā)送具有同一標識符的數(shù)據(jù)幀 (3) 錯誤幀:任何節(jié)點檢測到總線錯誤就發(fā)出錯誤幀 (4) 過載幀:過載幀用已在先行的后續(xù)的數(shù)據(jù)幀(或遠程幀)之間提供一
這一上是對協(xié)議電平的理解;一下就是stm32 f4的相關(guān)配置
static void CAN2_Config(void)
{
  //CanTxMsg TxMessage;
CAN_InitTypeDef        CAN_InitStructure;
  CAN_FilterInitTypeDef  CAN_FilterInitStructure;

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2, ENABLE); //????CAN2???±??
  
  CAN_DeInit(CAN2); //??CAN2?????÷?????è???±????
  CAN_StructInit(&CAN_InitStructure); //??CAN_InitStructure??????????????°??±????????


  /* CAN cell init */
  CAN_InitStructure.CAN_TTCM = DISABLE; //失能時間觸發(fā)模式
  CAN_InitStructure.CAN_ABOM = DISABLE; //?§??×??????????í
  CAN_InitStructure.CAN_AWUM = DISABLE; //?§??×???????????
  CAN_InitStructure.CAN_NART = DISABLE; //只發(fā)送一次,不管接不接受
  CAN_InitStructure.CAN_RFLM = DISABLE; //鎖定fifo模式
  CAN_InitStructure.CAN_TXFP = DISABLE; //失能fifo優(yōu)先級
  CAN_InitStructure.CAN_Mode = CAN_Mode_Normal;  //?????¤×÷????
  CAN_InitStructure.CAN_SJW = CAN_SJW_1tq; //設(shè)定同步時間段
    
  /* CAN Baudrate = 1MBps (CAN clocked at 30 MHz) */
  CAN_InitStructure.CAN_BS1 = CAN_BS1_6tq; //?è?¨?±????1??6???±??????????
  CAN_InitStructure.CAN_BS2 = CAN_BS2_8tq; //?è?¨?±????2??8???±??????????
  CAN_InitStructure.CAN_Prescaler = 2; //?è?¨???±?????????¤????2
  CAN_Init(CAN2, &CAN_InitStructure);


  CAN_FilterInitStructure.CAN_FilterNumber = 14; //???¨?????÷14  ?¨????????????±?????stm32????14???????¨????
  CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask; //?????÷???????? ±ê??·???±???????
  CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit; //1??32???????÷
  CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000; //?è?¨?????÷±ê??·?  ???ù?è???????÷???°????×?????????????????????
//???????è?????¨????±ê×???
  //CAN_FilterInitStructure.CAN_FilterIdHigh = x06DB<<5;//?ò??????×???11????±ê×???11????

CAN_FilterInitStructure.CAN_FilterIdLow = 0x0000; //?è?¨?????÷±ê??·?
  CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000; //?è?¨?????÷??±?±ê??·?
  CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000;  //?è?¨?????÷??±?±ê??·?
//?????è??????±???????????high??low???è????0xffff???°?????????????????¨?????·;
//CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xffff; //?è?¨?????÷??±?±ê??·?
  //CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xffff;  //?è?¨?????÷??±?±ê??·?
  CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0; //CAN_FilterFIFO0???ò?????÷14
  CAN_FilterInitStructure.CAN_FilterActivation = ENABLE; //?????????÷
  CAN_FilterInit(&CAN_FilterInitStructure);
  
  /* Transmit Structure preparation */
  TxMessage.StdId = 0x321; //?è?¨±ê??·?0x321//???????????á????????  ±¨??±ê?????????????à??????????????
  TxMessage.ExtId = 0x01; //?è?¨????±ê??·?0x01
  TxMessage.RTR = CAN_RTR_DATA; //??????
  TxMessage.IDE = CAN_ID_STD; //????±ê×?±ê??·?
  TxMessage.DLC = 1; //???????????¤????1
 


 // CAN_Transmit(&TxMessage);  //yj?í??
  /* Enable FIFO 0 message pending Interrupt */
  CAN_ITConfig(CAN2, CAN_IT_FMP0, ENABLE);


}

這里黃色部分是對發(fā)送的地方的標準進行配置,發(fā)送采用標準幀模式,標志符那個需要0x321的,這里的擴展符可有可無;因為后面有一個模式選擇;
紅色部分是對接收進行配置這里主要是對過濾器和過濾器屏蔽標志進行配置,他們兩個是配合使用的

附加的延時 
我們先研究數(shù)據(jù)幀吧。 
一,數(shù)據(jù)幀由7個不同位場組成。 
這里的位場,就是不同位的組合,這名字起的很爛,讓人看了感覺很抽象。我們來看看這些個不同的位場吧。 
一開始是一位幀起始,也叫SOF。它用顯性位表示,也就是0.它告訴我們,兩個線上有電壓差了,也就是有數(shù)據(jù)了。這個幀起始看起來只有一位,起始不簡單了。

為了讓所有的分站都同步于發(fā)送報文的發(fā)送站,好接收數(shù)據(jù),有很多要考慮的地方。 
然后下一個場是仲裁場。這個仲裁場是個難點。但是不要怕,有我在,你會很明白地搞定的。 這個仲裁很抽象,其實在這里就是為了解決一個問題。如果2個或2個以上的單元同時開始傳送報文,那么就會有總線訪問沖突。那么仲裁機制就是用來根據(jù)標識符優(yōu)先級來一個一個的去掉低級別的數(shù)據(jù)。我們可以詳細的描述這場生動的爭搶總線的戰(zhàn)斗。 
當總線處于空閑狀態(tài)時呈隱性電平,此時任何節(jié)點都可以向總線發(fā)送顯性電平作為幀的開始。2個或2個以上的節(jié)點同時發(fā)送開始爭搶總線,但是總線只能被一個人搶走。
總線只屬于一個他。這時候到底怎么決定誰留下,誰滾蛋呢。我們開始考慮,思索,我們以前定義了標識符,標識符有優(yōu)先級,它越小,它優(yōu)先級越高。那么怎么實現(xiàn)的呢。看下面把 首先搞明白兩點,一 下面的圖 低波形代表0,高波形代表1 二 當隱性碰到顯性,就變?yōu)轱@性。

關(guān)鍵字:stm32f4  can總線  學習心得 引用地址:stm32f4關(guān)于can總線的學習心得

上一篇:UCOSII在STM32F407上的移植
下一篇:STM32用IAR調(diào)試出現(xiàn)Error[Pe020]: identifier "FILE" is undefined 解決方法

推薦閱讀最新更新時間:2025-07-13 20:22

STM32F407IGHX與Ubuntu20.04虛擬串口通信
為了讓RobomasterC板(這塊板用的是STM32F407IGHX的芯片)能與上位機進行通訊。我最近翻了不少博客和CSDN文章,看到了很多文章存在一些問題,經(jīng)過了一下午試錯,我成功實現(xiàn)了STM32F407IGHX利用STM32CubeIDE進行配置并然后用HAL庫進行編程,與安裝有ROS的Ubuntu進行虛擬串口通信。 在翻看博客的時候我發(fā)現(xiàn),RM以及上下位機通信資料并不多,而且很多已有資料都只講述了實現(xiàn)原理,卻沒有講如何具體一步步實現(xiàn)某個功能,這就導(dǎo)致初學者可能在翻看過程中,越看越懵,反而寫不出一份能用的代碼。 所以這篇文章會盡可能詳細的講怎么實現(xiàn)串口通信,而盡量少講其原理,由于很多文章都已經(jīng)詳盡的寫出了串口通信的原
[單片機]
<font color='red'>STM32F4</font>07IGHX與Ubuntu20.04虛擬串口通信
用LPC2119芯片CAN總線和DSl8B20設(shè)計的智能超聲液位變送器
0 引言 現(xiàn)場總線是用于現(xiàn)場儀表與控制系統(tǒng)和控制室之間的一種全分散、全數(shù)字化、智能、雙向、互連、多變量、多點、多站的通信網(wǎng)絡(luò)。CAN(Controller Area Network,控制器局域網(wǎng))是德國Bosch公司在80年代初為解決現(xiàn)代汽車中大量的控制與測試儀器之間的數(shù)據(jù)交換而提出的一種串行數(shù)據(jù)通信協(xié)議。CAN總線是國際上應(yīng)用最廣泛的現(xiàn)場總線之一,由于采用了許多新技術(shù)以及獨特的設(shè)計,與一般的通信總線相比,CAN總線的數(shù)據(jù)通信具有突出的性能,且可靠性、實時性和靈活性強。 近些年來,隨著超聲技術(shù)研究的不斷深入,再加上其具有的高精度、無損、非接觸等優(yōu)點,超聲的應(yīng)用變得越來越普及。超聲波液位測量有許多優(yōu)點:檢測元件可以不與被測介質(zhì)接
[單片機]
用LPC2119芯片<font color='red'>CAN總線</font>和DSl8B20設(shè)計的智能超聲液位變送器
stm32f103與stm32f407的引腳復(fù)用與重映射
stm32f103的AFIO: stm32f103的AFIO寄存器如下,使用前都要打開AFIO時鐘: AFIO_MAPR:配置復(fù)用功能重映射 AFIO_EXTICRX:配置外部中斷線映射 AFIO_EVCR: 配置EVENTOUT事件輸出 只有使用了AFIO的事件控制寄存器、AFIO的重映射功能以及外部中斷(EXTI)控制寄存器才需要使用AFIO。 1、當使用外部中斷時,需要打開AFIO時鐘。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); 然后使用GPIO_EXTILineConfig函數(shù)進行掛載。例如: GPIO_EXTILineConfig(GPIO_PortSour
[單片機]
第10章 STM32F429的FLASH,RAM和棧使用情況(map和htm文件)
10.1 初學者重要提示 1、為了更好的學習本章知識點,可以看之前做的視頻教程第11章: http://www.armbbs.cn/forum.php?mod=viewthread&tid=15408 。 2、本章節(jié)以MDK為例進行說明,使用IAR同理。 10.2 MAP文件分析 通過map文件,可以方便的查看工程ROM/FLASH和RAM的占用情況,包括單個源文件,甚至具體到每個函數(shù)的rom大小都給出了,通過這些信息可以很好的進行代碼優(yōu)化。MAP文件的內(nèi)容可分為如下幾部分: Section Cross References Removing Unused input sections from the ima
[單片機]
第10章 <font color='red'>STM32F4</font>29的FLASH,RAM和棧使用情況(map和htm文件)
STM32F4學習筆記13——ADC part1
ADC 簡介 12 位 ADC 是逐次趨近型模數(shù)轉(zhuǎn)換器。它具有多達 19 個復(fù)用通道,可測量來自 16 個外部 源、兩個內(nèi)部源和 VBAT 通道的信號。這些通道的 A/D 轉(zhuǎn)換可在單次、連續(xù)、掃描或不連續(xù) 采樣模式下進行。ADC 的結(jié)果存儲在一個左對齊或右對齊的 16 位數(shù)據(jù)寄存器中。 ADC 具有模擬看門狗特性,允許應(yīng)用檢測輸入電壓是否超過了用戶自定義的閾值上限或下限。 ADC 主要特性 ● 可配置 12 位、10 位、8 位或 6 位分辨率 ● 在轉(zhuǎn)換結(jié)束、注入轉(zhuǎn)換結(jié)束以及發(fā)生模擬看門狗或溢出事件時產(chǎn)生中斷 ● 單次和連續(xù)轉(zhuǎn)換模式 ● 用于自動將通道 0 轉(zhuǎn)換為通道“n”的掃描模式 ● 數(shù)據(jù)對齊以保持內(nèi)置數(shù)據(jù)一致性 ●
[單片機]
<font color='red'>STM32F4</font>學習筆記13——ADC part1
STM32f407驅(qū)動hc-sr04超聲波測距模塊
最近完了一下測距模塊,本想挺簡單的一個東西,卻折騰了好長時間??偹闩昧耍N到這里和大家分享一下! HC-SR04超聲波測距模塊是一種被用爛了的傳感器,它的優(yōu)點是成本低,控制容易,但是掌握不好時序,還是會弄的人一頭霧水。 本模塊用使用方法如下: 一. 5v直流電壓供電,一般的單片機上自帶的VCC都能驅(qū)動 二. Trig引腳收到來自單片機時長大于等于20us的高點品后發(fā)出超聲波 三. Echo引腳接收Trig引腳發(fā)出的超聲波的回波,并且單片機開啟定時器記錄高電平時間 四. 高電平結(jié)束后,關(guān)閉定時器,從定時器寄存器中取出記錄值,換算成距離即可。 在做的過程中注意: 網(wǎng)上有好多代碼,但是大多數(shù)互相抄襲,而
[單片機]
STM32F429 >> 4. 使用固件庫點亮LED
本工程板級支持包文件適用于野火stm32f429 開發(fā)板。 在這一節(jié)的當中,最核心的內(nèi)容就兩點: 學會創(chuàng)建自己的項目; 學會創(chuàng)建板級支持包; STARTUP :放置啟動文件 STM32F4xx_StdPeriph_Driver 和CMSIS :放置庫文件,不需要改動 DOC :放置說明文件 USER :放置用戶創(chuàng)建或要進行改動的文件 bsp_led.h /** ****************************************************************************** * @file bsp_led.h * @author Waao * @version V1.0
[單片機]
<font color='red'>STM32F4</font>29 >> 4. 使用固件庫點亮LED
STM32F407_FreeRTOS_LwIP調(diào)試詳解一:Cube_MX生成工程
概要:本次使用的硬件平臺是STM32F407ZGT6的板子,外加一塊LAN8742A網(wǎng)絡(luò)模塊,先上一張全家福: 軟件平臺使用的是CubeMX V4.22及Keil V5.21.10軟件。 LwIP的架構(gòu) LwIP API的三種方式: 1、使用CubeMX新建工程,如下圖所示: 2、選擇芯片型號:本開發(fā)板使用的是STM32F407ZGT6芯片; 3、IO口選擇 3.1、選擇并使能RCC時鐘源為:HSE 3.2、選擇并使能ETH接口為:RMII類型接口,本次使用的是LAN8742A模塊,是RMII類型接口 3.3、選擇并使能LWIP協(xié)議棧: 3.4、選擇并使能FreeRTOS操作系
[單片機]
<font color='red'>STM32F4</font>07_FreeRTOS_LwIP調(diào)試詳解一:Cube_MX生成工程
小廣播
設(shè)計資源 培訓 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved