国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

串口通信-發(fā)送和接收數(shù)據(jù)

這篇具有很好參考價(jià)值的文章主要介紹了串口通信-發(fā)送和接收數(shù)據(jù)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

通信方式

硬件電路

軟件部分

USART外設(shè)(同步/異步收發(fā)器)

波特率

引腳復(fù)用

初始化基本流程

發(fā)送

接收

語(yǔ)言簡(jiǎn)述

常用的函數(shù)

使用的結(jié)構(gòu)體

引腳模式

打印數(shù)據(jù)的三種方法

使用printf


在實(shí)際的串口中,只能發(fā)送二進(jìn)制數(shù),也就是十六進(jìn)制的最直接數(shù)據(jù)。如果想發(fā)送字符,就需要一個(gè)數(shù)據(jù)->字符的映射表(如ASCII表)

通信方式

全雙工:兩根線,數(shù)據(jù)的發(fā)送和接收互不影響。

半雙工:一根線,一發(fā)一收。

單工:數(shù)據(jù)只能從一個(gè)設(shè)備到另一個(gè)設(shè)備。

舉例子->

全雙工:打電話。半雙工:對(duì)講機(jī)。單工:廣播

有時(shí)鐘線,同步通信

無(wú)時(shí)鐘線,異步,甚至需要添加幀頭幀尾使數(shù)據(jù)對(duì)齊。

單端信號(hào)(電平):它們引腳的高低電平都是對(duì)GND的電壓差,所以單端通信的雙方都必須共地,就是把GND接到一起。

而差分信號(hào)則不用。

硬件電路

串口收發(fā),stm32學(xué)習(xí)筆記,stm32,單片機(jī),學(xué)習(xí)

TX、RX、GND是必須要接的,而VCC若兩個(gè)設(shè)備都有獨(dú)立供電,可以不接。?

串口收發(fā),stm32學(xué)習(xí)筆記,stm32,單片機(jī),學(xué)習(xí)使用TTL電平。

軟件部分

?倆種形式

串口收發(fā),stm32學(xué)習(xí)筆記,stm32,單片機(jī),學(xué)習(xí)

?有校驗(yàn)位就是9位數(shù)據(jù)位,沒(méi)有就是8位。

串口收發(fā),stm32學(xué)習(xí)筆記,stm32,單片機(jī),學(xué)習(xí)

?數(shù)據(jù)低位先行

預(yù)發(fā)送數(shù)據(jù) 0x0f? ? (H)0000 1111(L)

L->H

檢驗(yàn)位采用奇偶校驗(yàn)的方法(如果數(shù)據(jù)錯(cuò)了可以丟棄或者重傳)

????????校驗(yàn)3法 : 無(wú)校驗(yàn) 奇校驗(yàn) 偶校驗(yàn)

  1. 無(wú)校驗(yàn) 如1幀10位 沒(méi)有校驗(yàn)位
  2. 奇校驗(yàn) 包括校驗(yàn)位會(huì)出現(xiàn)奇數(shù)個(gè)1
  3. 偶校驗(yàn) 包括校驗(yàn)位會(huì)出現(xiàn)偶數(shù)個(gè)1

如 奇校驗(yàn) 0000 1111 總共4個(gè)1,于是校驗(yàn)位就會(huì)補(bǔ)一個(gè)1,保證其是奇數(shù)。

奇偶校驗(yàn)只能保證一定程度上的驗(yàn)出率,更高級(jí)還是得了解CRC校驗(yàn)。

USART外設(shè)(同步/異步收發(fā)器)

【注意】USART1是掛在APB2總線上的,而其他是在APB1總線上的。

STM32F103C8T6 USART資源 :USART1(APB2)、USART2、USART3(APB1)

開(kāi)啟時(shí)鐘的時(shí)候需要控制。

波特率

波特率發(fā)生器就是分頻器,APB時(shí)鐘進(jìn)行分頻,得到發(fā)送和接收移位的時(shí)鐘。

USART1掛載在APB2【中文參考手冊(cè)---系統(tǒng)架構(gòu)】,所以就是PCLK2的時(shí)鐘,一般是72M。其余的是APB1,也就是36M。

然后進(jìn)行分頻。晶振除以一個(gè)USARTDIV的分頻系數(shù),分頻完之后還要再除以16

串口收發(fā),stm32學(xué)習(xí)筆記,stm32,單片機(jī),學(xué)習(xí)

引腳復(fù)用

串口收發(fā),stm32學(xué)習(xí)筆記,stm32,單片機(jī),學(xué)習(xí)

? 串口收發(fā),stm32學(xué)習(xí)筆記,stm32,單片機(jī),學(xué)習(xí)?

初始化基本流程

參考中文手冊(cè)USART部分

串口收發(fā),stm32學(xué)習(xí)筆記,stm32,單片機(jī),學(xué)習(xí)

發(fā)送

串口收發(fā),stm32學(xué)習(xí)筆記,stm32,單片機(jī),學(xué)習(xí)

接收

串口收發(fā),stm32學(xué)習(xí)筆記,stm32,單片機(jī),學(xué)習(xí)

語(yǔ)言簡(jiǎn)述

  1. 開(kāi)啟外設(shè),開(kāi)啟時(shí)鐘,把需要用的USART和GPIO的時(shí)鐘打開(kāi)
  2. GPIO初始化,把TX配置成復(fù)用輸出,RX配置成輸出
  3. 配置USART,直接使用一個(gè)結(jié)構(gòu)體
  4. 如果只需要發(fā)送功能,直接開(kāi)啟USART初始化就結(jié)束了。如果還需要接收還需要開(kāi)啟中斷。在開(kāi)啟中斷之前,再加上ITConfig和NVIC的代碼。

常用的函數(shù)

使用的結(jié)構(gòu)體

USART_InitTypeDef、

串口收發(fā),stm32學(xué)習(xí)筆記,stm32,單片機(jī),學(xué)習(xí)

USART_ClockInitTypeDef【同步時(shí)鐘,但是我們一般使用的是異步通信,所以不怎么用】

串口收發(fā),stm32學(xué)習(xí)筆記,stm32,單片機(jī),學(xué)習(xí)

串口收發(fā),stm32學(xué)習(xí)筆記,stm32,單片機(jī),學(xué)習(xí)

串口收發(fā),stm32學(xué)習(xí)筆記,stm32,單片機(jī),學(xué)習(xí)

引腳模式

????????TX是USART外設(shè)控制輸出腳,所以選擇復(fù)用推挽輸出(GPIO_Mode_AF_PP);

????????RX是USART外設(shè)數(shù)據(jù)輸入腳,所以選擇輸入模式。輸入模式并不分什么普通輸入、復(fù)用輸入,一根線只能有一個(gè)輸出,但可以有多個(gè)輸入。所以輸入腳外設(shè)、GPIO都可以使用。RX一般是浮空輸入or上拉輸入。因?yàn)榇诓ㄐ慰臻e狀態(tài)是高電平,所以不采用下拉輸入。

void USART_Config(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	//GPIO配置控制
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;		//TX
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;		//RX
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	//USART配置控制
	USART_InitTypeDef USART_InitStructure;
	USART_InitStructure.USART_BaudRate = 9600;
	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
	USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
	USART_InitStructure.USART_Parity = USART_Parity_No;
	USART_InitStructure.USART_StopBits = USART_StopBits_1;
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;
	USART_Init(USART1, &USART_InitStructure);
	
	//接收使能,接受不為空的時(shí)候產(chǎn)生中斷
	USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);	
	
	//NVIC配置控制
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	
	NVIC_InitTypeDef NVIC_InitStructure;
	NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
	NVIC_Init(&NVIC_InitStructure);
	
	USART_Cmd(USART1, ENABLE);

}

ctrl+alt +space 開(kāi)啟聯(lián)想

打印數(shù)據(jù)的三種方法

? ? ? ? 1、printf

? ? ? ? 2、sprintf

? ? ? ? 3、封裝sprintf(進(jìn)階學(xué)習(xí)--->C語(yǔ)言可變參數(shù))

使用printf

串口收發(fā),stm32學(xué)習(xí)筆記,stm32,單片機(jī),學(xué)習(xí)

?還要進(jìn)行重定向?qū)?stdio.h

printf->單。意思是只有一個(gè)串口可以使用。

sprintf->多??梢灾付ù蛴∥恢?,不涉及重定向的東西。

串口收發(fā),stm32學(xué)習(xí)筆記,stm32,單片機(jī),學(xué)習(xí)

格式+內(nèi)容。?

?MicroLIB是keil為嵌入式平臺(tái)優(yōu)化的精簡(jiǎn)庫(kù),在keil里面使用printf函數(shù)要使用這個(gè),然后還需要重定向,將怕printf函數(shù)打印的東西輸出到串口。先include ->stdio.h,然后重寫(xiě)fputc(這個(gè)是printf的底層)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-528909.html

到了這里,關(guān)于串口通信-發(fā)送和接收數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 最詳細(xì)STM32,cubeMX串口發(fā)送,接收數(shù)據(jù)

    最詳細(xì)STM32,cubeMX串口發(fā)送,接收數(shù)據(jù)

    這篇文章將詳細(xì)介紹 串口 發(fā)送數(shù)據(jù),接受數(shù)據(jù)。 實(shí)驗(yàn)開(kāi)發(fā)板:STM32F103C8T6。 所需軟件:keil5 , cubeMX 。 實(shí)驗(yàn)?zāi)康模毫私?串口的基礎(chǔ)知識(shí),掌握串口如何發(fā)送,接收數(shù)據(jù) 。 實(shí)驗(yàn):串口發(fā)送數(shù)據(jù)點(diǎn)亮 led。 如果想了解串口的基礎(chǔ)知識(shí)可以參考我之前的文章: STM32Cube串口USART發(fā)送

    2024年02月04日
    瀏覽(126)
  • STM32實(shí)現(xiàn)三個(gè)串口同時(shí)開(kāi)啟發(fā)送接收數(shù)據(jù)

    STM32實(shí)現(xiàn)三個(gè)串口同時(shí)開(kāi)啟發(fā)送接收數(shù)據(jù)

    ????????實(shí)現(xiàn)STM32開(kāi)通三個(gè)串口,每個(gè)串口都可以實(shí)現(xiàn)接收和發(fā)送數(shù)據(jù)。 ???????? 編程時(shí),嚴(yán)禁在中斷函數(shù)中寫(xiě)入發(fā)送串口數(shù)據(jù)代碼,否則會(huì)出錯(cuò),具體原因不清楚(有大佬知道的話幫我指出),可能原因是DR寄存器沖突導(dǎo)致。 ? ? ? ? RX,TX連接到A9,A10使用串口1,使

    2024年04月13日
    瀏覽(89)
  • 【STM32】STM32F103C8T6串口通信,實(shí)現(xiàn)3個(gè)串口收發(fā)數(shù)據(jù)

    串口通信(Serial Communications)實(shí)現(xiàn)單片機(jī)與電腦或者其它外設(shè)進(jìn)行通信,通信時(shí)只需兩根線(TX,RX)就可以實(shí)現(xiàn)數(shù)據(jù)傳輸。STM32f103有三個(gè)串口,分別為串口1(RX PA10, TX PA 9),串口2(RX PA3,TX PA2),串口3(RX PB11,TX PB10)。 以下代碼是配置三個(gè)串口: usart.c usart.h main.c 注意,

    2024年02月12日
    瀏覽(28)
  • 【江科大】STM32:串口HEX/文本數(shù)據(jù)接收和發(fā)送(代碼部分)(下)

    【江科大】STM32:串口HEX/文本數(shù)據(jù)接收和發(fā)送(代碼部分)(下)

    串口收發(fā)HEX數(shù)據(jù)包 2. 將跳線帽置在boot1 按復(fù)位鍵,點(diǎn)擊開(kāi)始編程即可。 由于該單片機(jī)只有串口1支持串口燒錄。因此連接線連在串口1的所在的引腳上。 程序加載到bootloader完成后,再將跳線帽換到boot0,按復(fù)位鍵 為什么可以使用串口下載? 原理是實(shí)現(xiàn)程序的自我更新,即利用

    2024年04月22日
    瀏覽(21)
  • Stm32f103之串口發(fā)送數(shù)據(jù),只接收到00的原因

    Stm32f103之串口發(fā)送數(shù)據(jù),只接收到00的原因

    1、時(shí)鐘選擇的對(duì)不對(duì), 2、GPIO口的TX引腳應(yīng)該設(shè)置為“復(fù)用推挽輸出” 3、中斷初始化函數(shù)也不可加 ? 4、硬件方面RXT、TXD電路接反。一直出現(xiàn)00的時(shí)候就要懷疑是不是線接反了。 總結(jié):大概率是代碼的問(wèn)題一定要仔細(xì)檢查

    2024年02月11日
    瀏覽(43)
  • 【STM32筆記】STM32的串口數(shù)據(jù)收發(fā)基礎(chǔ)(四)(USART DMA模式)

    【STM32筆記】STM32的串口數(shù)據(jù)收發(fā)基礎(chǔ)(四)(USART DMA模式)

    ? ?? 在STM32中編寫(xiě)串口通信數(shù)據(jù)收發(fā)有三種方式: 輪詢模式 (阻塞方式), 中斷模式 (非阻塞方式)以及 DMA模式 。 ? ?? 打開(kāi)STM32CubeMX,前部分配置流程如串口數(shù)據(jù)收發(fā)基礎(chǔ)(三)節(jié)里一樣。配置好USART1的基本參數(shù),開(kāi)啟定時(shí)器中斷后,接下來(lái)就要開(kāi)啟USART1的DMA。

    2024年02月03日
    瀏覽(17)
  • STM32使用三種方式(阻塞、中斷、DMA)實(shí)現(xiàn)串口發(fā)送和接收數(shù)據(jù)

    STM32使用三種方式(阻塞、中斷、DMA)實(shí)現(xiàn)串口發(fā)送和接收數(shù)據(jù)

    記錄下學(xué)習(xí)STM32開(kāi)發(fā)板的心得的和遇見(jiàn)的問(wèn)題。 板卡型號(hào):STM32F405RGT6 軟件:STM32CubeMX、IAR STM32串口外設(shè)提供了3種接收和發(fā)送方式:阻塞、中斷、DMA,主要給大家分享中斷方式接收不定長(zhǎng)數(shù)據(jù)和DMA使用空閑中斷接收不定長(zhǎng)數(shù)據(jù)。 阻塞發(fā)送: 阻塞接收: 兩個(gè)函數(shù)需要注意的就

    2024年02月03日
    瀏覽(26)
  • 極度優(yōu)雅的用stm32串口接收并分析不定長(zhǎng)數(shù)據(jù)的方法(可用于發(fā)送和接收浮點(diǎn)數(shù))

    極度優(yōu)雅的用stm32串口接收并分析不定長(zhǎng)數(shù)據(jù)的方法(可用于發(fā)送和接收浮點(diǎn)數(shù))

    我準(zhǔn)備電賽的時(shí)候參加了學(xué)校為了準(zhǔn)備電賽而舉辦的的積分賽,隊(duì)友通過(guò)樹(shù)莓派用給stm32發(fā)送執(zhí)行指令,而我在隊(duì)里作為寫(xiě)單片機(jī)的就需要分析數(shù)據(jù)包,每一個(gè)數(shù)據(jù)包都比較大也比較復(fù)雜,而且不定長(zhǎng),用傳統(tǒng)的一個(gè)字節(jié)一個(gè)字節(jié)接收數(shù)據(jù)的方式收串口在代碼層面上就顯得和

    2024年02月04日
    瀏覽(26)
  • 嵌入式學(xué)習(xí)筆記——STM32的USART收發(fā)字符串及串口中斷

    嵌入式學(xué)習(xí)筆記——STM32的USART收發(fā)字符串及串口中斷

    上一篇中,介紹了串口收發(fā)相關(guān)的寄存器,通過(guò)代碼實(shí)現(xiàn)了一個(gè)字節(jié)的收發(fā),本文接著上面的內(nèi)容,通過(guò)功能函數(shù)實(shí)現(xiàn)字符串的收發(fā),然后引入中斷解決收發(fā)過(guò)程中while()死等的問(wèn)題。 根據(jù)昨天的字符發(fā)送函數(shù),只需要稍作修改即可實(shí)現(xiàn)發(fā)送函數(shù)了,一個(gè)字符串的結(jié)尾會(huì)有一

    2024年02月03日
    瀏覽(36)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包