-
當(dāng)前位置:首頁 > 創(chuàng)意學(xué)院 > 營銷推廣 > 專題列表 > 正文
- can總線, i2c, isp,串口通信,這些通信相比較都有什么優(yōu)缺點(diǎn)?
- 請問CAN是串口嗎?
- stm32can通信和串口的區(qū)別
- can總線為什么比串口快?就是說各種總線速度不一樣,是由什么決定的,最關(guān)鍵的地方?
can與串口的區(qū)別(can與串口的區(qū)別是什么)
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于can與串口的區(qū)別的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。
開始之前先推薦一個(gè)非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,有小程序、在線網(wǎng)頁版、PC客戶端和批量生成器
問友Ai官網(wǎng):https://ai.de1919.com。
本文目錄:
can總線, i2c, isp,串口通信,這些通信相比較都有什么優(yōu)缺點(diǎn)?
最大區(qū)別:CAN-bus、串行通訊用于設(shè)備之間的通訊,IIC、SPI用于元件之間的通訊。請問CAN是串口嗎?
CAN是一種工業(yè)現(xiàn)場總線的名稱。一般普通計(jì)算機(jī)上沒有這個(gè)接口。它是串行通信方式,但不是一般說的串口。接口外觀可以是15針D型口,也可以RJ45接口,看用在什么場合了。
CAN的特點(diǎn):
1、網(wǎng)絡(luò)各節(jié)點(diǎn)之間的數(shù)據(jù)通信實(shí)時(shí)性強(qiáng):
CAN控制器工作于多種方式,網(wǎng)絡(luò)中的各節(jié)點(diǎn)都可根據(jù)總線訪問優(yōu)先權(quán)采用無損結(jié)構(gòu)的逐位仲裁的方式競爭向總線發(fā)送數(shù)據(jù)。
且CAN協(xié)議廢除了站地址編碼,而代之以對通信數(shù)據(jù)進(jìn)行編碼,這可使不同的節(jié)點(diǎn)同時(shí)接收到相同的數(shù)據(jù),這些特點(diǎn)使得CAN總線構(gòu)成的網(wǎng)絡(luò)各節(jié)點(diǎn)之間的數(shù)據(jù)通信實(shí)時(shí)性強(qiáng),并且容易構(gòu)成冗余結(jié)構(gòu),提高系統(tǒng)的可靠性和系統(tǒng)的靈活性。
2、開發(fā)周期短:
CAN節(jié)點(diǎn)在錯(cuò)誤嚴(yán)重的情況下具有自動(dòng)關(guān)閉輸出功能,以使總線上其他節(jié)點(diǎn)的操作不受影響,從而保證不會(huì)出現(xiàn)像在網(wǎng)絡(luò)中,因個(gè)別節(jié)點(diǎn)出現(xiàn)問題,使得總線處于“死鎖”狀態(tài)。
而且,CAN具有的完善的通信協(xié)議可由CAN控制器芯片及其接口芯片來實(shí)現(xiàn),從而大大降低系統(tǒng)開發(fā)難度,縮短了開發(fā)周期,這些是僅有電氣協(xié)議的RS-485所無法比擬的。
3、已形成國際標(biāo)準(zhǔn)的現(xiàn)場總線:
與其它現(xiàn)場總線比較而言,CAN總線是具有通信速率高、容易實(shí)現(xiàn)、且性價(jià)比高等諸多特點(diǎn)的一種已形成國際標(biāo)準(zhǔn)的現(xiàn)場總線。這些也是CAN總線應(yīng)用于眾多領(lǐng)域,具有強(qiáng)勁的市場競爭力的重要原因。
擴(kuò)展資料:
與一般的通信總線相比,CAN總線的數(shù)據(jù)通信具有突出的可靠性、實(shí)時(shí)性和靈活性。它在汽車領(lǐng)域上的應(yīng)用是最廣泛的,世界上一些著名的汽車制造廠商都采用了CAN總線來實(shí)現(xiàn)汽車內(nèi)部控制系統(tǒng)與各檢測和執(zhí)行機(jī)構(gòu)間的數(shù)據(jù)通信。
同時(shí),由于CAN總線本身的特點(diǎn),其應(yīng)用范圍已不再局限于汽車行業(yè),而向自動(dòng)控制、航空航天、航海、過程工業(yè)、機(jī)械工業(yè)、紡織機(jī)械、農(nóng)用機(jī)械、機(jī)器人、數(shù)控機(jī)床、醫(yī)療器械及傳感器等領(lǐng)域發(fā)展。CAN已經(jīng)形成國際標(biāo)準(zhǔn),并已被公認(rèn)為幾種最有前途的現(xiàn)場總線之一。
參考資料:百度百科-CAN總線
stm32can通信和串口的區(qū)別
一、簡介STM32F103ZET6有3個(gè)USART(通用同步和異步收發(fā)器) + 2個(gè)UART(通用異步收發(fā)器)
分別是USART1,USART2,USART3
和UART4,UART5
二、USART和UART有什么區(qū)別呢?
當(dāng)進(jìn)行異步通信時(shí),這兩者是沒有區(qū)別的。區(qū)別在于USART比UART多了同步通信功能,同步通信需要STM32提供時(shí)鐘來同步的,
這個(gè)同步通信功能可以把USART當(dāng)做SPI來用,比如用USART來驅(qū)動(dòng)SPI設(shè)備。同步通信的連接示例圖:
其中RX,TX,SCLK引腳的定義,在數(shù)據(jù)手冊上都可以找到:百為stm32開發(fā)板光盤芯片數(shù)據(jù)手冊數(shù)據(jù)手冊STM32F103xC STM32F103xD STM32F103xE.pdf
這個(gè)區(qū)別在初學(xué)STM32的時(shí)候我們不需要去深入研究,只要知道USART有很多功能,除了全雙工異步通信之外,還包括支持同步通信和單線半雙工通信,支持LIN(局部互連網(wǎng)),智能卡協(xié)議和IrDA紅外通信,以及調(diào)制解調(diào)器(CTS/RTS)等操作。
三、數(shù)據(jù)通信格式
我們用得最多的是全雙工異步通信功能,下面我們來研究下怎么通過串口1(USART1)來收發(fā)信息,和printf功能的實(shí)現(xiàn)。
通常串口通信的數(shù)據(jù)格式如下圖:
我們需要設(shè)置的數(shù)據(jù)有通信速率,數(shù)據(jù)字長,奇偶檢驗(yàn)位,停止位。一個(gè)典型的設(shè)置是115200波特率,8位數(shù)據(jù),無奇偶校驗(yàn),1位停止位。
這個(gè)設(shè)置在固件函數(shù)庫里面,我們是通過設(shè)置USART_InitStructure結(jié)構(gòu)體,然后調(diào)用USART_Init函數(shù)來實(shí)現(xiàn)的:
USART_InitStructure.USART_BaudRate = 115200; //設(shè)置通信波特率為115200
USART_InitStructure.USART_WordLength = USART_WordLength_8b; //設(shè)置通信數(shù)據(jù)格式為8位數(shù)據(jù)
USART_InitStructure.USART_StopBits = USART_StopBits_1; //設(shè)置停止位為1位
USART_InitStructure.USART_Parity = USART_Parity_No ; //設(shè)置為無奇偶校驗(yàn)
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //設(shè)置為無硬件流控制,即無CTS/RTS控制
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //設(shè)置發(fā)送使能,接收使能
USART_Init(USART1, &USART_InitStructure); //調(diào)用USART_Init,把上面的參數(shù)分別設(shè)置進(jìn)USART的控制寄存器USART1->CR1,USART1->CR2,USART1->CR3
USART_Cmd(USART1, ENABLE); //使能串口
大家發(fā)現(xiàn),在2.0固件庫的USART例程里并沒有看到USART1,因?yàn)槭撬肬SARTx宏代替的,
其中USARTx是platform_config.h里定義的,大概是這個(gè)樣子:
#ifdef USE_USART1
#define USARTx USART1
#define GPIOx GPIOA
#define RCC_APB2Periph_GPIOx RCC_APB2Periph_GPIOA
#define GPIO_RxPin GPIO_Pin_10
#define GPIO_TxPin GPIO_Pin_9
#endif
只有定義了USE_USART1,上面的#ifdef USE_USART1和#endif之間的內(nèi)容才會(huì)被編譯,所以在platform_config.h里也需要定義USE_USART1:
#define USE_USART1
這里GPIO_Pin_9是串口1的發(fā)送引腳,GPIO_Pin_10是串口1的接收引腳,也可以從百為STM32開發(fā)板的電路圖上看出來:
四、串口引腳配置
上面USART_Init函數(shù)配置了USART1的數(shù)據(jù)通信格式,但串口能工作的前提是需要配置相應(yīng)的TX,RX的引腳,這個(gè)是通過GPIO_Configuration函數(shù)來配置的:
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //打開USART1時(shí)鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //打開AFIO時(shí)鐘
/* 配置 USARTx_Tx 為復(fù)用推挽輸出 */
GPIO_InitStructure.GPIO_Pin = GPIO_TxPin;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOx, &GPIO_InitStructure);
/* 配置 USARTx_Rx 為輸入懸空 */
GPIO_InitStructure.GPIO_Pin = GPIO_RxPin;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOx, &GPIO_InitStructure);
}
五、收發(fā)數(shù)據(jù)
配置好USART1使用的引腳,數(shù)據(jù)通信格式,下面就可以收發(fā)數(shù)據(jù)了,
USART_GetFlagStatus函數(shù)可以讀取收發(fā)狀態(tài)等,讀取狀態(tài)標(biāo)志可以是以下幾個(gè):
發(fā)送數(shù)據(jù)示例:
USART_SendData(USART1, 'a'); //發(fā)送一個(gè)字符a
接收數(shù)據(jù)示例:
u16 RxData;
RxData = USART_ReceiveData(USART1); //從USART1接收數(shù)據(jù)到RxData變量
下面是串口通信printf程序里的主要功能,上電打印一串信息,把接收到的數(shù)據(jù)回顯到PC上:
/* 用printf打印一串信息到PC的超級終端或串口調(diào)試軟件上 */
printf("nrUSART Printf Example: retarget the C library printf function to the USARTnr");
while (1)
{
if(USART_GetFlagStatus(USARTx,USART_FLAG_RXNE)==SET) //判斷是否有數(shù)據(jù)要接收
{
i = USART_ReceiveData(USARTx); //接收數(shù)據(jù)
printf("%cnr",i&0xff); //回顯到PC的超級終端或串口調(diào)試軟件上
}
}
六、printf的實(shí)現(xiàn)
上面的printf是怎么實(shí)現(xiàn)的呢,這個(gè)是C標(biāo)準(zhǔn)庫里定義的函數(shù),我們是怎樣把它的輸出重定向到串口的呢?
我們知道printf是調(diào)用fputc函數(shù)來打印的,所以我們只要把fputc函數(shù)重定義就可以了:
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
PUTCHAR_PROTOTYPE
{
/* 調(diào)用USARTx發(fā)送一個(gè)字符*/
USART_SendData(USARTx, (u8) ch);
/* 等待發(fā)送完成 */
while(USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET)
{
}
return ch;
}
另外還要加上頭文件
#include "stdio.h"
還要注意的是,在工程里要勾上USE MicroLIB
can總線為什么比串口快?就是說各種總線速度不一樣,是由什么決定的,最關(guān)鍵的地方?
CAN總線在汽車上目前使用的比較多的有500K和250K的高速CAN、125K和62.5K的低速CAN,最高可做到1M,但這個(gè)1M是理論上的,實(shí)際上很難實(shí)現(xiàn),在工業(yè)上用的速率不太清楚。一樓的回答個(gè)人覺得不妥。
首先,在大多數(shù)情況下(總不能拿25K的CAN跟56K的串口進(jìn)行比較吧),CAN總線筆串口要快。CAN總線的出于安全性方面的額外開銷約占總數(shù)據(jù)的50%左右,即每發(fā)8個(gè)數(shù)據(jù)字節(jié),可能會(huì)同時(shí)產(chǎn)生8~9字節(jié)的額外開銷。
串口的最高速率為56k,額外開銷占30%多,及沒傳1個(gè)數(shù)據(jù)字節(jié)至少需要4個(gè)位的額外開銷。
所以,單純論點(diǎn)對點(diǎn)的通訊速率,串口是遠(yuǎn)不及CAN的。
各種總線的產(chǎn)生的歷史背景不一樣及所解決的需求不同導(dǎo)致了總線速度的不盡相同,因此總線的速率是由設(shè)計(jì)需求所決定的,最關(guān)鍵的地方從大的方面來說也是設(shè)計(jì)需求,從小的方面來說由不同總線的數(shù)據(jù)鏈路層決定的。
以上就是關(guān)于can與串口的區(qū)別相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。
推薦閱讀:
cad家具設(shè)計(jì)入門教程(cad家具設(shè)計(jì)入門教程圖片)
天正與cad有什么區(qū)別(天正cad和cad有什么區(qū)別)
計(jì)算機(jī)的CAM是什么(計(jì)算機(jī)的cam是什么意思)
vi設(shè)計(jì)軟件著作權(quán)(vi設(shè)計(jì)版權(quán)問題)