STM32常用通信——USART,IIC,SPI,CAN

STM32常用通信
CAN通信
CAN根據兩根線上電位差來判斷總線電平,總線電平分爲顯性電平和隱形電平,兩者必居其一,發送方通過控制總線電平發送信息給接收方。
顯性電平對應邏輯0,兩根線壓差2.5V左右,隱形電平對應邏輯1,壓差爲0。總線上可以掛很多單元,顯性電平具有優先權,一個單元
顯性電平,則總線爲顯性。CAN總線起止斷有120R的電阻,用於做阻抗匹配,減少回波反射。

CAN的位時序:
<同步段SS>SS
<傳播時間段PTS
相位緩衝段1   PBS1>BS1
<相位緩衝段2   PBS2>BS2
1位分爲四段,每段由若干Tq組成,
波特率=1/(Tq+TBS1+TBS2)
TBS1=Tq*(TS1[3:0]+1)
TBS2=Tq*(TS2[2:0]+1)
Tq=(BRP[9:0]+1)*TCLK
TCLK=APB時鐘週期
過濾器:
互聯型28個過濾器,增強型14個過濾器(ag:F103ZET6);
每個過濾器由兩個32位寄存器CAN_FxR1和CAN_FxR2組成。
期望收到的值:CAN_FxR1,必須關心的ID:CAN_FxR2;
控制寄存器:
CAN_MCR,INRQ位置1初始化,置零進入正常工作模式。
CAN_BTR,用於設置分頻係數BRP,TS1,TS2,決定CAN波特率
發送流程:
選擇空置郵箱,設置標識符ID,數據長度和發送數據,請求發送,掛號(等待成爲最高優先級),等待總線空閒,發送,空置郵箱
接收流程:
FIFO空,接受有效報文,掛號1(讀出,釋放郵箱),掛號2(讀出,釋放郵箱).......滿溢出,丟失信息。

SPI
四線通信,MOSI,MISO,CS,SCLK,串行通信,通過移位寄存器進行操作,所以讀的時候,需要發送空子節,引起主機發送,如果是
寫,則不需要考慮接收。
SPI主模塊和與之通信的外設備時鐘相位和極性應該一致。
32配置省略......
模擬SPI:
void Write_date ()//SPI寫模擬CPHA=1,CPOL=1操作的僞代碼
{
    片選CS置零選中;
 for(i=0;i<8;i++)//八位
 {    
  時鐘腳置爲零;
  if(dat&0x80)
     發送1;
  else
     發送0;
  時鐘置高;
  dat<<=1;//先發高位 
 }
    片選CS置高取消選中; 
}
IIC
IIC爲串行總線,三種類型信號
開始信號:SCL爲高電平時,SDA出現下降沿
結束信號:SCL爲高電平時,SDA出現上升沿
應答信號:接收數據的 IC 在接收到 8bit 數據後,向發送數據的 IC 發出特定的低電平脈衝,表示已收到數據CPU 向受控單元發出一個信號後,
等待受控單元發出一個應答信號, CPU 接收到應答信號後,根據實際情況作出是否繼續傳遞信號的判斷。若未收到應答信號,由判斷爲受控單元出現故障。
數據傳輸:
SCL高電平時,SDA數據寫入,所以要變化SDA值,需要在SCL低電平時。

USART
通過定時器產生,確定波特率,一般8位,起始,停止各一位,無奇偶校驗位,串行通信,RX,TX
不仔細詳談了


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章