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

STM32單片機(jī)(九)USART串口----第四節(jié):USART串口實(shí)戰(zhàn)練習(xí)(串口發(fā)送+接收)

這篇具有很好參考價(jià)值的文章主要介紹了STM32單片機(jī)(九)USART串口----第四節(jié):USART串口實(shí)戰(zhàn)練習(xí)(串口發(fā)送+接收)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

?? 專欄簡(jiǎn)介:本專欄記錄了從零學(xué)習(xí)單片機(jī)的過程,其中包括51單片機(jī)和STM32單片機(jī)兩部分;建議先學(xué)習(xí)51單片機(jī),其是STM32等高級(jí)單片機(jī)的基礎(chǔ);這樣再學(xué)習(xí)STM32時(shí)才能融會(huì)貫通。
?? 專欄適用人群 :適用于想要從零基礎(chǔ)開始學(xué)習(xí)入門單片機(jī),且有一定C語言基礎(chǔ)的的童鞋。
??專欄目標(biāo):實(shí)現(xiàn)從零基礎(chǔ)入門51單片機(jī)和STM32單片機(jī),力求在玩好單片機(jī)的同時(shí),能夠了解一些計(jì)算機(jī)的基本概念,了解電路及其元器件的基本理論等。

?? 專欄主要內(nèi)容: 主要學(xué)習(xí)STM32單片機(jī)的功能、各個(gè)模塊、單片機(jī)的外設(shè)、驅(qū)動(dòng)等,最終玩好單片機(jī)和單片機(jī)的外設(shè),全程手敲代碼,實(shí)現(xiàn)我們所要實(shí)現(xiàn)的功能。
?? 專欄說明 :如果文章知識(shí)點(diǎn)有錯(cuò)誤的地方,歡迎大家隨時(shí)在文章下面評(píng)論,我會(huì)第一時(shí)間改正。讓我們一起學(xué)習(xí),一起進(jìn)步。
??專欄主頁:http://t.csdn.cn/HCD8v

本學(xué)習(xí)過程參考:https://space.bilibili.com/383400717

STM3單片機(jī)安裝軟件、各種資料以及源碼的路徑:
鏈接:https://pan.baidu.com/s/1snD0uuTfMhchFqOMWvAiHA?pwd=asdf#list/path=%2F
提取碼:asdf

鏈接里壓縮包的解壓密碼:32

本大節(jié)主要學(xué)習(xí)USART的相關(guān)知識(shí),包含九小節(jié):
第一小節(jié)主要學(xué)習(xí)USART串口協(xié)議的理論基礎(chǔ)知識(shí)
第二小節(jié)主要學(xué)習(xí)USART串口外設(shè)的理論基礎(chǔ)知識(shí)
第三小節(jié)是對(duì)第一、二小節(jié)的內(nèi)容寫一個(gè)串口發(fā)送程序進(jìn)行練習(xí)
第四小節(jié)是對(duì)第一、二小節(jié)的內(nèi)容再寫一個(gè)串口發(fā)送+接收的程序進(jìn)行練習(xí)
第五小節(jié)主要學(xué)習(xí)USART串口數(shù)據(jù)包的理論基礎(chǔ)知識(shí)
第六小節(jié)是對(duì)第五小節(jié)的內(nèi)容寫一個(gè)串口收發(fā)HEX數(shù)據(jù)包程序進(jìn)行練習(xí)
第七小節(jié)是對(duì)第五小節(jié)的內(nèi)容再寫一個(gè)串口收發(fā)文本數(shù)據(jù)包程序進(jìn)行練習(xí)
第八小節(jié)主要了解FlyMcu串口下載的知識(shí)
第九小節(jié)主要了解STLINK Utility串口下載的知識(shí)
最終附上所有的源代碼;

本小節(jié)主要是對(duì)前面學(xué)習(xí)的串口理論知識(shí)再次進(jìn)行實(shí)戰(zhàn)練習(xí):寫一個(gè)串口發(fā)送+接收的程序進(jìn)行練習(xí)。

一、本節(jié)目標(biāo)

目標(biāo):串口發(fā)送+接收

寫一個(gè)串口模塊,通過串口通信,把一些數(shù)據(jù)發(fā)到電腦上的串口助手來顯示,

該程序的功能是判斷單片機(jī)是否收到數(shù)據(jù),如果收到數(shù)據(jù),則讀取數(shù)據(jù),并將數(shù)據(jù)回傳到電腦同時(shí)在OLED上進(jìn)行顯示;

把STM32的串口引腳,接到電腦上,如下圖所示:
STM32單片機(jī)(九)USART串口----第四節(jié):USART串口實(shí)戰(zhàn)練習(xí)(串口發(fā)送+接收)
之后電腦端打開串口助手軟件,按如下圖進(jìn)行配置,并打開串口
STM32單片機(jī)(九)USART串口----第四節(jié):USART串口實(shí)戰(zhàn)練習(xí)(串口發(fā)送+接收)
在發(fā)送區(qū)寫一個(gè)數(shù)據(jù)41,點(diǎn)擊發(fā)送,可以看到OLED上顯示了接受到的數(shù)據(jù)為41,并且串口工具的接收區(qū),也接收到了41這個(gè)數(shù)據(jù);
STM32單片機(jī)(九)USART串口----第四節(jié):USART串口實(shí)戰(zhàn)練習(xí)(串口發(fā)送+接收)

此時(shí)如果我們把接收模式換成文本模式,再發(fā)送,可以看到,串口助手收到的信息為字符文本A了,這就是數(shù)據(jù)41對(duì)應(yīng)的字符文本A了,如下圖所示:

STM32單片機(jī)(九)USART串口----第四節(jié):USART串口實(shí)戰(zhàn)練習(xí)(串口發(fā)送+接收)

二、練習(xí)2:串口發(fā)送+接收

2.1 接線圖

STM32單片機(jī)(九)USART串口----第四節(jié):USART串口實(shí)戰(zhàn)練習(xí)(串口發(fā)送+接收)

  • 最下面是USB轉(zhuǎn)串口模塊,跳線帽要插在VCC和3V3這兩個(gè)引腳上(圖中黃色小塊兒),選擇通信的TTL電平為3.3;然后通信引腳TXD和RXD要接在STM3的PA9和PA10口,選擇這兩個(gè)引腳的原因是引腳定義表中USART1的TX是PA9,RX是PA10;然后USB轉(zhuǎn)串口的負(fù)極和STM32的負(fù)極接在一起進(jìn)行共地;
  • USB轉(zhuǎn)串口模塊和JLINK都是要插在電腦的USB口;

硬件電路如下所示:
STM32單片機(jī)(九)USART串口----第四節(jié):USART串口實(shí)戰(zhàn)練習(xí)(串口發(fā)送+接收)
然后打開電腦設(shè)備管理器,確認(rèn)串口端口正常鏈接沒問題:

STM32單片機(jī)(九)USART串口----第四節(jié):USART串口實(shí)戰(zhàn)練習(xí)(串口發(fā)送+接收)

2.2 源碼

  • STM32入門教程資料\程序源碼\STM32Project\9-2 串口發(fā)送+接收\(chéng)User
  • STM32入門教程資料\程序源碼\STM32Project\9-2 串口發(fā)送+接收\(chéng)Hardware
  • STM32入門教程資料\程序源碼\STM32Project\9-2 串口發(fā)送+接收\(chéng)System

2.2.1 代碼思路

STM32單片機(jī)(九)USART串口----第四節(jié):USART串口實(shí)戰(zhàn)練習(xí)(串口發(fā)送+接收)
整個(gè)代碼的流程參考以上結(jié)構(gòu)圖:

  • 第一步,開啟時(shí)鐘;把需要用到的USART和GPIO的時(shí)鐘打開;
  • 第二步,GPIO初始化,把TX配置成復(fù)用輸出,RX配置成復(fù)用輸入;
  • 第三步,配置USART,直接使用一個(gè)結(jié)構(gòu)體,就可以把以上框圖中所有參數(shù)配置好;
  • 第四步,如果只需要發(fā)送功能,就直接開啟USART,初始化就結(jié)束了;如果需要接收功能,那可能還需要配置中斷;那就在開啟USART之前,再加上ITConfig和NVIC的代碼;
  • 初始化完成后,如果要發(fā)送數(shù)據(jù),就調(diào)用發(fā)送函數(shù);如果如果要接收數(shù)據(jù),就調(diào)用就收的函數(shù);如果要獲取發(fā)送和接收的狀態(tài),就調(diào)用獲取標(biāo)志位的函數(shù);

2.2.2 具體代碼及解釋

這里的代碼注釋我僅注釋了相較于上一小節(jié)多出的部分,即接收的部分;
至于關(guān)于發(fā)送部分的注釋,可以參考上一小節(jié)(STM32單片機(jī)(九)USART串口----第三節(jié):USART串口實(shí)戰(zhàn)練習(xí)(串口發(fā)送)),注釋比較完整,代碼也差不多;

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "Serial.h"

uint8_t RxData;

int main(void)
{
	OLED_Init();
	OLED_ShowString(1, 1, "RxData:");
	
	Serial_Init();
	
	while (1)
	{
		if (Serial_GetRxFlag() == 1)//使用查詢的方式讀取收到的數(shù)據(jù),即該標(biāo)志位置1說明有收到數(shù)據(jù)
		{
			RxData = Serial_GetRxData();
			Serial_SendByte(RxData);
			OLED_ShowHexNum(1, 8, RxData, 2);
		}
	}
}

Serial.c:文章來源地址http://www.zghlxwxcb.cn/news/detail-498661.html

#include "stm32f10x.h"                  // Device header
#include <stdio.h>
#include <stdarg.h>

uint8_t Serial_RxData;
uint8_t Serial_RxFlag;

void Serial_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
	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;//設(shè)置Pin_10口,接收口
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	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;//模式設(shè)置為發(fā)送和接收
	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);
	
	USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
	
	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);
}

void Serial_SendByte(uint8_t Byte)
{
	USART_SendData(USART1, Byte);
	while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
}

void Serial_SendArray(uint8_t *Array, uint16_t Length)
{
	uint16_t i;
	for (i = 0; i < Length; i ++)
	{
		Serial_SendByte(Array[i]);
	}
}

void Serial_SendString(char *String)
{
	uint8_t i;
	for (i = 0; String[i] != '\0'; i ++)
	{
		Serial_SendByte(String[i]);
	}
}

uint32_t Serial_Pow(uint32_t X, uint32_t Y)
{
	uint32_t Result = 1;
	while (Y --)
	{
		Result *= X;
	}
	return Result;
}

void Serial_SendNumber(uint32_t Number, uint8_t Length)
{
	uint8_t i;
	for (i = 0; i < Length; i ++)
	{
		Serial_SendByte(Number / Serial_Pow(10, Length - i - 1) % 10 + '0');
	}
}

int fputc(int ch, FILE *f)
{
	Serial_SendByte(ch);
	return ch;
}

void Serial_Printf(char *format, ...)
{
	char String[100];
	va_list arg;
	va_start(arg, format);
	vsprintf(String, format, arg);
	va_end(arg);
	Serial_SendString(String);
}

uint8_t Serial_GetRxFlag(void)
{
	if (Serial_RxFlag == 1)
	{
		Serial_RxFlag = 0;
		return 1;
	}
	return 0;
}

uint8_t Serial_GetRxData(void)
{
	return Serial_RxData;
}

void USART1_IRQHandler(void)
{
	if (USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
	{
		Serial_RxData = USART_ReceiveData(USART1);
		Serial_RxFlag = 1;
		USART_ClearITPendingBit(USART1, USART_IT_RXNE);
	}
}

到了這里,關(guān)于STM32單片機(jī)(九)USART串口----第四節(jié):USART串口實(shí)戰(zhàn)練習(xí)(串口發(fā)送+接收)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(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)文章

  • 【單片機(jī)】基于STM32的UART串口通信

    【單片機(jī)】基于STM32的UART串口通信

    簡(jiǎn)單講解一下UART通信協(xié)議,以及UART能夠?qū)崿F(xiàn)的一些功能,還有有關(guān)使用STM32CubeMX來配置芯片的一些操作。實(shí)驗(yàn)內(nèi)容基于 正點(diǎn)原子精英板 開發(fā)板,單片機(jī)芯片為 STM32F103ZET6 。 在后面我會(huì)以我使用的STM32F429開發(fā)板來舉例講解(其他STM32系列芯片大多數(shù)都可以按照這些步驟來操作

    2024年01月17日
    瀏覽(96)
  • USART HMI串口屏+單片機(jī)通訊上手體驗(yàn)

    USART HMI串口屏+單片機(jī)通訊上手體驗(yàn)

    ??本文采用淘晶馳4.3寸IPS串口屏實(shí)物驗(yàn)證,HMI串口屏經(jīng)簡(jiǎn)單配置即可快速實(shí)現(xiàn),串口通訊效果。串口屏上手簡(jiǎn)單,有獨(dú)立的開發(fā)套件,容易上手,驅(qū)動(dòng)顯示和功能代碼獨(dú)立。本文僅針對(duì)串口調(diào)試信息顯示實(shí)現(xiàn)做介紹,不涉及復(fù)雜功能實(shí)現(xiàn)。 ??打印輸出效果: ??模擬類似于

    2024年02月03日
    瀏覽(23)
  • 【STM32】單片機(jī)模式配置&FlyMcu串口下載固件&STLINK Utility

    【STM32】單片機(jī)模式配置&FlyMcu串口下載固件&STLINK Utility

    目錄 1 單片機(jī)模式配置 1.1 存儲(chǔ)器映像 1.2 啟動(dòng)配置 1.3 啟動(dòng)模式選擇 1.4?硬件展示 1.4.1 BOOT引腳配置: 1.4.2 USB轉(zhuǎn)TTL 2 FlyMcu串口下載固件 ????????2.1軟件配置方式 ????????2.2 選項(xiàng)字節(jié) 3 STLINK Utility 3.1 簡(jiǎn)介 3.2 下載程序流程 通過 設(shè)置選擇管腳 ,對(duì)應(yīng)到各種啟動(dòng)模式的不

    2024年01月20日
    瀏覽(94)
  • 基于STM32單片機(jī)BOOTLOADER通過串口升級(jí)程序IAP——APP方案

    基于STM32單片機(jī)BOOTLOADER通過串口升級(jí)程序IAP——APP方案

    ????????????????????????此方法前提是你得有一個(gè)EEPROM ? ? ? ? 我用的單片機(jī)是STM32F103ZET6 , 此單片機(jī)FLASH容量為512KB; 在此單片機(jī)里面FLASH的起始地址是0X8000000,BOOT作為引導(dǎo)加載程序一般都是從這個(gè)地址開始,單片機(jī)一上點(diǎn)默認(rèn)會(huì)從這個(gè)地址開始運(yùn)行,所以將自己

    2024年02月04日
    瀏覽(96)
  • 使用DMA傳輸實(shí)現(xiàn)單片機(jī)高效串口轉(zhuǎn)發(fā)——以STM32系列為例

    使用DMA傳輸實(shí)現(xiàn)單片機(jī)高效串口轉(zhuǎn)發(fā)——以STM32系列為例

    Date Author Version Note 2023.08.06 Dog Tao V1.0 1. 完成了文檔的撰寫。 2023.08.23 Dog Tao V1.1 1. 增加了STM32F103-USART2的DMA傳輸配置示例。 2. 增加了STM32F103與F407單片機(jī)的DMA控制器介紹并更改了第一章節(jié)的結(jié)構(gòu)。 應(yīng)用場(chǎng)景 在許多現(xiàn)實(shí)應(yīng)用場(chǎng)景中,例如工業(yè)自動(dòng)化控制、嵌入式通信設(shè)備等領(lǐng)域,

    2024年02月14日
    瀏覽(91)
  • STM32+ESP-01s+EMQX實(shí)現(xiàn)單片機(jī)MQTT協(xié)議傳輸數(shù)據(jù)上云(二)STM32F103與ESP-01s的Usart通信,實(shí)現(xiàn)STM32連接上網(wǎng)上云

    STM32+ESP-01s+EMQX實(shí)現(xiàn)單片機(jī)MQTT協(xié)議傳輸數(shù)據(jù)上云(二)STM32F103與ESP-01s的Usart通信,實(shí)現(xiàn)STM32連接上網(wǎng)上云

    單片機(jī):STM32F103c8t6 WiFi模塊:ESP8266-01s EMQX:自身服務(wù)器上搭載emq服務(wù)器或者借用emqx window 版本? USB TO TTL模塊:CH340 因?yàn)镃H340不能給ESP-01s供3.3V的電,所以測(cè)試時(shí)需要外加供電 ? ? ? ? ? 本章中涉及到的技術(shù)原理主要為ESP01S wfi模塊的AT指令通信,我在上一篇文章給大家提到了

    2024年02月16日
    瀏覽(26)
  • K_A19_002 基于STM32等單片機(jī)采集水位檢測(cè)傳感數(shù)據(jù) 串口與OLED0.96雙顯示

    K_A19_002 基于STM32等單片機(jī)采集水位檢測(cè)傳感數(shù)據(jù) 串口與OLED0.96雙顯示

    單片機(jī)型號(hào) 測(cè)試條件 模塊名稱 代碼功能 STC89C52RC 晶振11.0592M 水位檢測(cè)傳感模塊 STC89C52RC驅(qū)動(dòng)水位檢測(cè)傳感模塊 串口與OLED0.96雙顯示 STM32F103C8T6 晶振8M/系統(tǒng)時(shí)鐘72M 水位檢測(cè)傳感模塊 STM32F103C8T6驅(qū)動(dòng)水位檢測(cè)傳感模塊參數(shù) 串口與OLED0.96雙顯示 其他資料目錄 直戳跳轉(zhuǎn) 工作電壓:

    2024年02月07日
    瀏覽(26)
  • K_A16_001 基于STM32等單片機(jī)驅(qū)動(dòng)HX711稱重模塊 串口與OLED0.96雙顯示

    K_A16_001 基于STM32等單片機(jī)驅(qū)動(dòng)HX711稱重模塊 串口與OLED0.96雙顯示

    單片機(jī)型號(hào) 測(cè)試條件 模塊名稱 代碼功能 STC89C52RC 晶振11.0592M HX711稱重模塊 STC89C52RC驅(qū)動(dòng)HX711稱重模塊 串口與OLED0.96雙顯示 STM32F103C8T6 晶振8M/系統(tǒng)時(shí)鐘72M HX711稱重模塊 STM32F103C8T6驅(qū)動(dòng)HX711稱重模塊參數(shù) 串口與OLED0.96雙顯示 其他資料目錄 直戳跳轉(zhuǎn) HX711參數(shù) 1.兩路可選擇差分輸入

    2023年04月27日
    瀏覽(28)
  • K_A12_033 基于STM32等單片機(jī)驅(qū)動(dòng)TCS34725顏色傳感 串口與OLED0.96雙顯示

    K_A12_033 基于STM32等單片機(jī)驅(qū)動(dòng)TCS34725顏色傳感 串口與OLED0.96雙顯示

    單片機(jī)型號(hào) 測(cè)試條件 模塊名稱 代碼功能 STC89C52RC 晶振11.0592M TCS34725顏色傳感 模塊 STC89C52RC驅(qū)動(dòng)TCS34725顏色傳感模塊串口與OLED0.96雙顯示 STM32F103C8T6 晶振8M/系統(tǒng)時(shí)鐘72M TCS34725顏色傳感模塊 STM32F103C8T6驅(qū)動(dòng)TCS34725顏色傳感模塊串口與OLED0.96雙顯示 其他資料目錄 直戳跳轉(zhuǎn) 工作電壓:

    2024年02月06日
    瀏覽(30)
  • K_A16_003 基于STM32等單片機(jī)采集薄膜壓力傳感器參數(shù)串口與OLED0.96雙顯示

    K_A16_003 基于STM32等單片機(jī)采集薄膜壓力傳感器參數(shù)串口與OLED0.96雙顯示

    單片機(jī)型號(hào) 測(cè)試條件 模塊名稱 代碼功能 STM32F103C8T6 晶振8M/系統(tǒng)時(shí)鐘72M 薄膜壓力傳感器模塊 STM32F103C8T6驅(qū)動(dòng)薄膜壓力傳感器模塊 串口與OLED0.96雙顯示 其他資料目錄 直戳跳轉(zhuǎn) 厚度 :0.4mm 樣式 :薄片狀,柔性 觸發(fā)力 :20g,默認(rèn)電阻值小于 200kΩ 時(shí)觸發(fā) 壓力感應(yīng)范圍 :20g~6kg

    2024年02月05日
    瀏覽(42)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包