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

歷史上的今天

今天是:2024年12月07日(星期六)

2020年12月07日 | STM32 —— LIN

發布者:代碼律動 來源: elecfans關鍵字:STM32  LIN  總線 手機看文章 掃描二維碼
隨時隨地手機看文章

/*

  LIN 總線的主要特性有

    單主機 多從機概念

    基于普通 UART/SCI 接口的低成本硬件實現 低成本軟件或作為純狀態機

    從機節點不需要石英或陶瓷諧振器可以實現自同步

    保證信號傳輸的延遲時間

    低成本的單線設備

    速度高達 20kbit/s


  總線的通訊由單個主機控制 每個報文幀都用一個分隔信號起始 ,一個同步場和一個標識符場 .


  這些都由主機任務發送 從機任務則是發回數據場和校驗場


       報文路由 報文的內容由識別符命名 識別符不指出報文的目的地 但解釋數據的含義 最大的

  標識符數量是 64 其中 4 個保留用于專用的通訊 譬如軟件升級或診斷


  多播 由于引入了報文濾波的概念 任何數目的節點都可以同時接收報文 并同時對此報文做出反應


  位速率

    最大的波特率是 20kbit/s 它是由單線傳輸媒體的 EMI 限制決定 最小的波特率是 1kbit/s 可以避免

  和實際設備的超時周期沖突,為使用低成本的 LIN 器件 建議使用下面的位速率


    建議的位速率

    低速      中速      高速

    2400 bit/s  9600 bit/s  19200 bit/s


  單主機 無仲裁

    只有包含主機任務的控制器節點可以傳輸報文頭,一個從機任務對這個報文頭作出響應,由于沒有仲

  裁過程,如果多于一個從機回應,則將產生錯誤.這種情況下的錯誤界定可由用戶按照應用要求指定.


  安全性

    錯誤檢測

      監控 發送器比較總線 應當 的值和 現在 的值

      數據場的校驗和以 256 為模并取反 將 MSB 的進位加到 LSB 上

      標識符場的雙重奇偶校驗保護


  連接

    LIN 網絡節點的最大數量不僅由標識符的數量限制 見上面的信息路由 也由總線的物理特性限制

    建議 LIN 網絡的節點數量不應超過 16 否則 節點增加將減少網絡阻抗 會導致環境條件變差

    禁止無錯誤的通訊 每一個增加的節點都可以減少約 3 的網絡阻抗 30k || 1k

    網絡中總的 電 線 通訊導線 長度應少于或等于 40m

    主機節點的總線端電阻典型值是 1k 從機節點是 30k


  總線值

    總線有兩個互補的邏輯值 顯性 或 隱性 相應的位值和電壓值

      表 2.2 邏輯和物理總線值

    邏輯值    位值  總線電壓

    顯性      0     地

    隱性      1     電池


  應答

      正確接收報文后的應答過程在 LIN 協議中沒有定義 主機控制單元檢查由主機任務初始化的報文

    和由它自己的從機任務接收的報文的一致性 如果不一致 例如 丟失從機響應 校驗和不正確等等 主

    機任務可以改變報文的進度表

    如果從機檢測到不一致 從機控制器將保存這個信息并將它用診斷信息的形式向主機控制單元請求

    診斷信息可按普通報文幀的形式進行發送


    每個報文幀都由一個同步間隔 SYNCH BREAK 起始 接著是同步場 SYNCH FIRLD 這個同

  步場在幾倍的位定時長度中包含了 5 個下降沿 即 隱性 到 顯性 的轉換


  一個報文幀 是由一個主機節點發送的報文頭和一個主機或從機節點發送的響應組成

  報文幀的報文頭包括一個同步間隔場 SYNCH BREAK FIELD,一個同步場 SYNCH FIELD,和一個標識符場


    報文幀的響應 RESPONSE 則由 3 個到 9 個字節場組成 2 或 4 或 8 字節的數據場 DATA FIELD

  和一個校驗和場 CHECKSUM FIELD


    字節場的格式 通常的 SCI 或 UART 串行數據格式 8N1 編碼 每個字節場

  的長度是 10 個位定時 BIT TIME 起始位 START BIT 是一個 顯性 位 它標志著字節場的開始

  接著是 8 個數據位 首先發送最低位 停止位 STOP BIT 是一個 隱性 位 它標志著字節場的結束


  報文頭場 HEADER fields

  同步間隔 SYNCHRONISATION BREAK

    為了能清楚識別報文幀的開始 報文幀的第一個場是一個同步間隔 SYNCH BREAK 同步間隔場

  SYNCH BREAK FIELD 是由主機任務發送.它使所有的從機任務與總線時鐘信號同步


    同步間隔場有兩個不同的部分,第一個部分是由一個持續 T SYNBRK 或更長時間 即最小是

  T SYNBRK 不需要很嚴格 的顯性總線電平 接著的第二部分是最少持續 T SYNDEL 時間的隱性電平

  作為同步界定符 第二個場允許用來檢測下一個同步場 SYNCH FIELD 的起始位最大的間隔和界定

  符時間沒有精確的定義 但必須符合整個報文頭 T HEADER_MAX 的總體時間預算


  同步場 SYNCH FIELD

  同步場 SYNCH FIELD 包含了時鐘的同步信息 同步場 SYNCH FIELD 的格式是 0x55 表

  現在 8 個位定時中有 5 個下降沿 即 隱性 跳變到 顯性 的邊沿 見圖 3.4


  標識符場 IDENTIFIER FIELD

  標識符場 ID-FIELD 定義了報文的內容和長度 其中 內容是由 6 個標識符 IDENTIFIER 位和

  兩個 ID 奇偶校驗位 ID PARITY bit 表示 見圖 3.5 標識符位的第 4 和第 5 位 ID4 和 ID5 定義了

  報文的數據場數量 N DATA 見表 3.2 這將把 64 個標識符分成 4 個小組 每組 16 個標識符 這些標識

  符分別有 2 4 和 8 個數據場


  響應場 RESPONSE field

  數據場 DATA FIELD 和  校驗和場 CHECKSUM FIELD

  數據場通過報文幀傳輸 由多個 8 位數據的字節場組成 傳輸由 LSB 開始


  校驗和場 CHECKSUM FIELD

  校驗和場是數據場所有字節的和的反碼和按 帶進位加 ADDC 方式計算 每個進位

  都被加到本次結果的最低位 LSB 這就保證了數據字節的可靠性,所有數據字節的和的補碼與校驗和字節之加的和必須是 0xFF

*/



#include "lin.h"

#include "lin_queue.h"

#include "lin_handle.h"

#include "target.h"

 

#define LIN_CHANNEL         UART4

#define RCC_LIN_APB         RCC_APB1PeriphClockCmd

#define RCC_LIN_CLK         RCC_APB1Periph_UART4

#define LIN_BOAURATE        19200

#define LIN_IRQ             UART4_IRQn

#define LIN_INT_FUNC        UART4_IRQHandler

 

#define LIN_PORT            GPIOC

#define LIN_TX_PIN          GPIO_Pin_10

#define LIN_RX_PIN          GPIO_Pin_11

#define LIN_TX_CONFIG()     GPIOConfig(LIN_PORT, LIN_TX_PIN, GPIO_Mode_AF_PP)

#define LIN_RX_CONFIG()     GPIOConfig(LIN_PORT, LIN_RX_PIN, GPIO_Mode_IN_FLOATING)

 

#define LIN_CS_PORT         GPIOC

#define LIN_CS_PIN          GPIO_Pin_12

#define LIN_CS_CONFIG()     GPIOConfig(LIN_CS_PORT, LIN_CS_PIN, GPIO_Mode_Out_PP)

#define LIN_CS_ENABLE()     GPIO_SetBits(LIN_CS_PORT, LIN_CS_PIN)

 

static void lin_gpio_init(void)

{

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);

 

  LIN_TX_CONFIG();

  LIN_RX_CONFIG();

  LIN_CS_CONFIG();

  LIN_CS_ENABLE();

}

 

static void lin_nvic_init(void)

{

  NVIC_InitTypeDef NVIC_InitStructure;

 

  NVIC_InitStructure.NVIC_IRQChannel = LIN_IRQ;

  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;

  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  NVIC_Init(&NVIC_InitStructure);

}

 

static void lin_uart_init(void)

{

  USART_InitTypeDef USART_InitStructure;

 

  RCC_LIN_APB(RCC_LIN_CLK, ENABLE);

 

  USART_InitStructure.USART_BaudRate = LIN_BOAURATE;

  USART_InitStructure.USART_WordLength = USART_WordLength_8b;

  USART_InitStructure.USART_StopBits = USART_StopBits_1;

  USART_InitStructure.USART_Parity = USART_Parity_No ;

  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

  USART_Init(LIN_CHANNEL, &USART_InitStructure);

 

  USART_LINBreakDetectLengthConfig(LIN_CHANNEL, USART_LINBreakDetectLength_11b);

  USART_LINCmd(LIN_CHANNEL, ENABLE);

  USART_Cmd(LIN_CHANNEL, ENABLE);

 

  USART_ITConfig(LIN_CHANNEL, USART_IT_RXNE, ENABLE);

  USART_ITConfig(LIN_CHANNEL, USART_IT_TXE, DISABLE);

  USART_ITConfig(LIN_CHANNEL, USART_IT_LBD, ENABLE);

}

 

void LINInit(void)

{

  lin_gpio_init();

  lin_nvic_init();

  lin_uart_init();

}

 

void LINSendChar(uint8_t ch)

{

  USART_SendData(LIN_CHANNEL, ch);

  while(!USART_GetFlagStatus(LIN_CHANNEL, USART_FLAG_TXE));

}

 

void LINSendBreak(void)

{

  USART_SendBreak(LIN_CHANNEL);

}

 

#define BIT(A,B)       ((A >> B) & 0x01)

 

uint8_t LINCalID(uint8_t id)

{

  uint8_t parity, p0, p1;

 

  parity = id;

  p0 = (BIT(parity, 0) ^ BIT(parity, 1) ^ BIT(parity, 2) ^ BIT(parity, 4)) << 6;

  p1 = (!(BIT(parity, 1) ^ BIT(parity, 3) ^ BIT(parity, 4) ^ BIT(parity, 5))) << 7;

 

  parity |= (p0 | p1);

 

  return parity;

}

 

uint8_t LINCalChecksum(uint8_t id, uint8_t *data)

{

  uint32_t sum = id;

  uint8_t i;

 

  for(i = 0; i < 8; i++)

  {

    sum += data[i];

    if(sum & 0xFF00)

    {

      sum = (sum & 0x00FF) + 1;

    }

  }

 

  sum ^= 0x00FF;

 

  return (uint8_t)sum;

}

 

//========================================================================================================

void LIN_INT_FUNC(void)

{

  uint8_t ret;

 

  if(USART_GetITStatus(LIN_CHANNEL, USART_IT_RXNE))

  {

    USART_ClearITPendingBit(LIN_CHANNEL, USART_IT_RXNE);

    ret = USART_ReceiveData(LIN_CHANNEL);

    //LINQueuePush(&lin_recv, ret);

  }

 

  if(USART_GetITStatus(LIN_CHANNEL, USART_IT_LBD))

  {

    USART_ClearITPendingBit(LIN_CHANNEL, USART_IT_LBD); // 檢測到同步間隔場

    //LinStatusSet(SYNCH);

  }

 

  if(USART_GetFlagStatus(LIN_CHANNEL, USART_FLAG_ORE) == SET) // 溢出

  {

    USART_ClearFlag(LIN_CHANNEL, USART_FLAG_ORE);

    USART_ReceiveData(LIN_CHANNEL);

  }

}


關鍵字:STM32  LIN  總線 引用地址:STM32 —— LIN

上一篇:STM32 —— 多路ADC采集
下一篇:STM32f103 —— timer

推薦閱讀

12月7日上午消息,在安裝了剛剛推送的watchOS 5.1.2更新之后,美國的Apple Watch Series 4用戶現在可以通過把手指放在表冠上來檢測自己的心電圖了。  通過這次更新,Apple Watch Series 4可以對用戶的心臟進行實時監測,可以識別心房顫動以及心律不規律等問題。在對2000人進行臨床研究后,蘋果公司在今年9月份獲得了美國食品和藥物管理局FDA的認...
示波器是一種常用的電子測量儀器,主要針對于各種電信號的檢測,被廣泛的應用于工業、醫學、軍事、科研等領域中都有一定的應用。本文首先介紹了示波器怎么連接電腦_示波器與計算機連接方法,其次闡述了示波器與電腦連接數據傳輸的方法,最后例舉了計算機如何對示波器進行遠程控制,具體的跟隨小編一起來了解一下。1、把示波器用RS232電纜線和電腦連接2、打...
華為已正式宣布,將于 12 月 16 日舉行鴻蒙 OS 2.0 手機開發者 Beta 活動。如無意外,鴻蒙 OS 2.0 Beta 將是此次活動的主要亮點。華為于 9 月在公司的2020年開發者大會上首次發布了鴻蒙 OS 2.0。鴻蒙 OS 2.0 首次融合了智能手機的兼容性,華為當時透露將于年底推出面向開發人員的智能手機 Beta 測試版。后來,有消息稱該新操作系統...
據彭博社報道,蘋果公司已經通知了一些零部件供應商,在假期到來之前,對iPhone 13機型的需求正在放緩。?iPhone 13?和13 Pro的交付預期已經開始改善,這些設備可以在圣誕節前發貨。由于全行業芯片短缺,蘋果在10月份將2021年iPhone 13的產量削減了多達1000萬部。蘋果原計劃在2021年生產9,000萬部?iPhone 13?機型,但博通和德州儀器無法交付足夠的...

史海拾趣

問答坊 | AI 解惑

533MHz處理器S3C2443布線指南

同樣適用S3C2450. S3C2443的BGA間距為0.5mm,比起S3C2410和S3C2440的0.8mm,要求的PCB工藝高很多,需要做盲孔. …

查看全部問答∨

xilinx 和altera兩者目前應用情況?

XILINX 給我感覺價格高,應用通信等高端應用。 ALTERA 價格便宜,應用工業和消費電子。…

查看全部問答∨

win ce5.0,怎么做中文版本的內核?

我用PB5.0做了一個內核,但是顯示的是英文版本,我在訂制時選擇過了international->chinese還有在setting->local->中文。但做出來的內核中文卻顯示為————(橫杠)…

查看全部問答∨

關于屏保得問題

我在我使用的虛擬機里面怎么沒有找到屏保相關的設置啊?…

查看全部問答∨

什么是5v容忍?

                                 5v容忍的管腳是不是可以直接接到5v的電源,還可以不壞?不是5v容忍的管腳,可不可以串入一電阻然后接到5v電源(利用 ...…

查看全部問答∨

c8051F350 定時中斷死機?

void Timer0_Init(void){     TH0 = 0x0B;           // Init Timer0 High register   TL0 = 0xDC ;           / ...…

查看全部問答∨

【設計工具】ChipScope Pro 使用指南----附帶代碼和測試波形

      通過一個具體的實例介紹如何使用ChipScope Pro,給出了全程的代碼,及ModelSim仿真結果,我照著本例程實驗過,確實可以得到想要的結果,所以在這里推薦給大家,希望對想要學習ChipScope Pro的朋友有一點幫助.   …

查看全部問答∨

SEED-EXP430F5529 上的仿真器可以仿其他系列嗎

我還有一個149的仿真器壞了 如果可以仿的話就不修了…

查看全部問答∨

msp430開發板怎么用USB下載方式將程序下進去?

說明書上介紹有這種方式,但是我用USB線連接筆記本之后進行DOWNLOAD AND DEBUG 還是沒反應,是不是缺少其他硬件和軟件設置? …

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

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

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

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 额尔古纳市| 特克斯县| 仁怀市| 安乡县| 临湘市| 砀山县| 安宁市| 尚志市| 温泉县| 汕尾市| 通道| 怀远县| 大足县| 轮台县| 龙井市| 凤翔县| 岳普湖县| 永春县| 惠安县| 阜南县| 常州市| 东明县| 阜阳市| 东宁县| 额济纳旗| 汶上县| 即墨市| 枝江市| 吉安市| 寿光市| 乌兰县| 尉犁县| 霞浦县| 东城区| 都江堰市| 卓资县| 安西县| 旬阳县| 济源市| 黄梅县| 喀什市|