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

STM32通過串口發(fā)送指令控制LED燈亮滅OLED并顯示命令

這篇具有很好參考價值的文章主要介紹了STM32通過串口發(fā)送指令控制LED燈亮滅OLED并顯示命令。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

先來看看程序運行的結果吧:

stm32串口控制燈亮滅,STM32,stm32,嵌入式硬件,單片機,proteus,F103C8T6

stm32串口控制燈亮滅,STM32,stm32,嵌入式硬件,單片機,proteus,F103C8T6

接下來就不說廢話了,自己看源代碼吧!每一行我都做了注釋:

首先是主函數(shù)main.c文件:

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

int main(void)
{
	OLED_Init();       //oled  屏幕初始化
	Serial_Init();      //串口初始化
	LED_Init();        //LED燈初始化
	
	while(1)
	{
		if(Rx_Flag)                                         //如果接收到數(shù)據(jù)
		{
			if(strcmp(Rx_Data, "LED_ON") == 0)                  //如果接收到的數(shù)據(jù)是LED_ON
			{
				OLED_ShowString(1,1,"                ");            //OLED顯示16個空格,清屏
				LED_ON();                                           //執(zhí)行開燈函數(shù)
				OLED_ShowString(1,1,Rx_Data);                       //OLED顯示LED_ON
				Send_String("LED    ON");                           //串口發(fā)送LED    ON,反饋控制者燈已經打開
			}
			else if(strcmp(Rx_Data, "LED_OFF") == 0)            //如果接收到的數(shù)據(jù)是LED_OFF
			{
				OLED_ShowString(1,1,"                ");            //OLED顯示16個空格,清屏
				LED_OFF();                                          //執(zhí)行關燈函數(shù)
				OLED_ShowString(1,1,Rx_Data);                       //OLED顯示LED_OFF
				Send_String("LED    OFF");                          //串口發(fā)送LED    OFF,反饋控制者燈已經關閉
			}
			Rx_Flag=0;                                      //接收到數(shù)據(jù)標志位置0,為下次接收字符串做準備
		}
		Delay_ms(1000);                                      //延時50毫秒,不用那么快
	}
}

接下來是LED.h文件:

#ifndef __LED_H
#define __LED_H



void LED_Init(void);
void LED_ON(void);
void LED_OFF(void);

#endif

接下來是LED.c文件:

#include "stm32f10x.h"                  // Device header

//  LED燈初始化函數(shù)
void LED_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;                 //創(chuàng)建GPIOA初始化的結構體
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;      //推挽輸出模式
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5;             //引腳5
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;     //頻率50MHz
	GPIO_Init(GPIOA, &GPIO_InitStruct);                //GPIOA初始化
	GPIO_SetBits(GPIOA, GPIO_Pin_5);                   //引腳5設置高電平,防止LED燈初始化后亮
}


// 打開LED燈的函數(shù)
void LED_ON(void)
{
	GPIO_ResetBits(GPIOA, GPIO_Pin_5);  //引腳5置低電平
}

// 關閉LED燈的函數(shù)
void LED_OFF(void)
{
	GPIO_SetBits(GPIOA, GPIO_Pin_5);   //引腳5置高電平
}

記下來是串口相關的Serial.h文件:

#ifndef __SERIAL_H
#define __SERIAL_H

extern char Rx_Data[];
extern uint8_t Rx_Flag;

void Serial_Init(void);
void Send_Byte(uint8_t Byte);
void Send_String(char *str);

#endif

接下來就是最后一個serial.c文件了:

#include "stm32f10x.h"                  // Device header

char Rx_Data[100];                 //創(chuàng)建接收字符串的變量能盛放100個字節(jié),閑小可以擴大
uint8_t Rx_Flag = 0;               //創(chuàng)建接收到字符串的標志位。1表示接收到了字符串,0表示沒有接收到字符串


//串口初始化函數(shù)
void Serial_Init(void)
{
	//1:RCC
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);   //開始串口1時鐘
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);    // 開啟GPIOA的時鐘
	//2:GPIO_init
	GPIO_InitTypeDef GPIO_InitStruct;                        //創(chuàng)建GPIO初始化的結構體
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;             // GPIO的模式為推挽輸出
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;                   //GPIO的引腳9
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;           //GPIO的頻率50MHz
	GPIO_Init(GPIOA, &GPIO_InitStruct);                      //GPIO初始化
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;               //GPIO的模式為上拉輸入
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;                  //GPIO引腳10
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;           //GPIO的頻率50MHz
	GPIO_Init(GPIOA, &GPIO_InitStruct);                      //GPIO初始化
	//3:USART_Init
	USART_InitTypeDef USART_InitStruct;                                          //創(chuàng)建串口初始化的結構體
	USART_InitStruct.USART_BaudRate = 9600;                                      // 波特率為9600
	USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // 沒有硬件流控制
	USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;                 // 串口1的接收和發(fā)送模式
	USART_InitStruct.USART_Parity = USART_Parity_No;                             // 串口無校驗
	USART_InitStruct.USART_StopBits = USART_StopBits_1;                          // 串口停止位1位
	USART_InitStruct.USART_WordLength = USART_WordLength_8b;                     // 串口數(shù)據(jù)位長度:8位
	USART_Init(USART1, &USART_InitStruct);                                       // 串口初始化
	//4:NVIC_Init
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);        //NVIC的分組選擇2組                       
	NVIC_InitTypeDef NVIC_InitStruct;                      //NVIC初始化的結構體
	NVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn;          //通道選擇串口1
	NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;            //NVIC串口通道使能
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;  //NVIC搶占優(yōu)先級:1
	NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;          //NVIC響應優(yōu)先級:1
	NVIC_Init(&NVIC_InitStruct);                            //NVIC初始化
	//5:USART_Cmd
	USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);          //開啟串口1的接收數(shù)據(jù)中斷
	USART_Cmd(USART1, ENABLE);                           //串口1使能
}


// 發(fā)送字節(jié)的函數(shù)(參數(shù):8位的一個字節(jié))
void Send_Byte(uint8_t Byte)
{
	USART_SendData(USART1, Byte);                                //發(fā)送1個字節(jié)
	while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);     //等待發(fā)送完成的標志位置1,是0時就等待
	USART_ClearFlag(USART1, USART_FLAG_TXE);                         //發(fā)送完成的標志位置0,為下次發(fā)送做準備
}


// 發(fā)送字符串函數(shù)(參數(shù)char類型的指針)
void Send_String(char *str)
{ 
	while(*str)         //如果解引用指針內容不是0就循環(huán)
	{
		Send_Byte(*str);      //發(fā)送字節(jié)當前指針所指向的內容
		str++;                // 指針++,指向下一個字節(jié)的內容
	}
}


// 串口1中斷函數(shù)
void USART1_IRQHandler(void)
{
	static uint8_t state =0;        // 定義接收狀態(tài)碼
	static uint8_t i=0;                 //定義接收數(shù)組的下標
	uint8_t Dat;                                    //定義每次進中斷接收當前字節(jié)的變量
	if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE))  //如果接收標志置位了
	{
		Dat = USART_ReceiveData(USART1);           // 變量接收當前收到的字節(jié)
		if(state == 0)                      // 如果狀態(tài)碼是0
		{
			if(Dat == '@')                            //如果收到的字節(jié)是@
			{
				state = 1;                            //狀態(tài)碼置1
			}
		}
		else if(state == 1)             // 如果狀態(tài)碼是1
		{
			if(Dat == '$')                      //如果收到的字節(jié)是$
			{
				state = 2;                            //狀態(tài)碼置2
			}
			else                       //否則
			{
				Rx_Data[i]=Dat;                 //接收數(shù)組的第i個下標賦值為當前接收的字節(jié) 
				i++;                            //下標++,移到數(shù)組下一個位置,準備下次接收
			}
		}
		else if(state == 2)          // 如果狀態(tài)碼是2
		{
			if(Dat == '&')                    //如果收到的字節(jié)是&
			{
				state = 0;                              //狀態(tài)碼置0   結束這次的接收
				i = 0;                                  //小標置0    這一串字符串接收完畢,下串從頭覆蓋
			}
		}
		
	}
	Rx_Flag = 1;                               // 接收標志位置1, 證明這段字符串接收完畢
	USART_ClearFlag(USART1, USART_FLAG_RXNE);  // 清除接收標志位

}


所有文件在工程中的目錄為:

stm32串口控制燈亮滅,STM32,stm32,嵌入式硬件,單片機,proteus,F103C8T6

工程編譯后下載到單片機就能實現(xiàn)串口控制LED燈的亮滅了。文章來源地址http://www.zghlxwxcb.cn/news/detail-853024.html

到了這里,關于STM32通過串口發(fā)送指令控制LED燈亮滅OLED并顯示命令的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • stm32按鍵控制LED燈亮滅(中斷法)

    stm32按鍵控制LED燈亮滅(中斷法)

    用按鍵控制STM32上的LED燈亮滅,可以采用輪詢法和中斷法。輪詢法需要不斷檢測按鍵的狀態(tài),消耗MCU;而中斷法只是在按下的那一刻觸發(fā)中斷,控制燈亮滅。輪詢法相對于更常規(guī),容易操作。因此我們這里講的用中斷法。關于中斷的概述,這里不作介紹,只講操作,分析代碼

    2024年02月07日
    瀏覽(22)
  • FPGA通過一個按鍵控制三個LED燈亮滅(狀態(tài)機法)

    FPGA通過一個按鍵控制三個LED燈亮滅(狀態(tài)機法)

    FPGA型號:Cyclone IV EPFCE10F17C8? ? 開發(fā)工具:Quartus13.0專業(yè)版? Modelsim 10.1d 文章目錄 狀態(tài)機 一、設計思路 二、代碼設計 1.頂層代碼 2.測試代碼 三、仿真 狀態(tài)機由狀態(tài)寄存器和組合邏輯電路構成,能夠根據(jù)控制信號按照預先設定的狀態(tài)進行狀態(tài)轉移,是協(xié)調相關信號動作、完成

    2024年02月02日
    瀏覽(24)
  • 十、stm32-ESP8266(串口透傳、MCU透傳、控制LED亮滅)

    十、stm32-ESP8266(串口透傳、MCU透傳、控制LED亮滅)

    見博客:stm32f103c8t6新建固件庫模板(可自取) 固件庫模板 MDK5開發(fā)環(huán)境 stm32參考手冊 UART串口協(xié)議 stm32中斷概念 ESP8266模塊資料 利用固件庫模板點燈工程(下面第三行,手動狗頭) CH340 USB→TTL模塊 ESP8266模塊 手機軟件 實驗程序已經發(fā)布到百度網盤,本文末有鏈接可以自取

    2023年04月19日
    瀏覽(26)
  • STM32入門筆記10_USART串口通信+案例:上位機控制LED亮滅(USART串口通信、TIM定時器、EXTI綜合案例)

    STM32入門筆記10_USART串口通信+案例:上位機控制LED亮滅(USART串口通信、TIM定時器、EXTI綜合案例)

    通信的目的: 將一個設備的數(shù)據(jù)傳送到另一個設備, 擴展硬件系統(tǒng) 通信協(xié)議: 制定通信的規(guī)則, 通信雙方按照協(xié)議規(guī)則進行數(shù)據(jù)收發(fā) 名稱 引腳 雙工 時鐘 電平 設備 USART TX、RX 全雙工 異步 單端 點對點 I2C SCL、SDA 半雙工 同步 單端 多設備 SPI SCLK、MOSI、MISO、CS 全雙工 同步 單端

    2024年02月09日
    瀏覽(25)
  • stm32----串口通訊,通過串口控制LED燈

    stm32----串口通訊,通過串口控制LED燈

    1.初始化LED燈(根據(jù)原理圖修改pin和gpio): 2.初始化串口 3.編譯中斷函數(shù): 以下是完整代碼: 效果如下

    2024年02月11日
    瀏覽(29)
  • STM32通過串口控制LED閃爍或者呼吸效果

    目錄 STM32通過串口控制LED閃爍或者呼吸效果 1、準備工作 2、思路分析 3、實際操作 4、小結 1.首先我們需要準備32的最小系統(tǒng)板或者開發(fā)板。 2.準備一個LED燈(如果使用板子上的燈來實現(xiàn)則不需要,下面我是使用最小系統(tǒng)板上的LED燈來實現(xiàn))。 3.若干杜邦線。 4.軟件方面的準備

    2024年02月08日
    瀏覽(13)
  • 設計分享|單片機獨立按鍵控制4個LED燈亮滅

    設計分享|單片機獨立按鍵控制4個LED燈亮滅

    目錄 具體實現(xiàn)功能 設計介紹 51單片機簡介 設計思路 設計內容 仿真圖(protues8.7) 程序(Keil5) 具體實現(xiàn)功能 單片機四個按鍵分別控制四個LED的亮滅! 設計介紹 51單片機簡介 51單片是一種低功耗、高性能CMOS-8位微控制器,具有8K可編程Flash存儲器,使得其為眾多嵌入式控制應

    2024年02月06日
    瀏覽(22)
  • STM32驅動串口屏,STM32F103C8T6串口發(fā)送指令控制HMI串口屏

    STM32驅動串口屏,STM32F103C8T6串口發(fā)送指令控制HMI串口屏

    串口屏是一個集成了單片機的屏幕模塊,采用的是TTL串口協(xié)議,可以直接通過對應指令控制屏幕, 本文采用的串口屏是陶晶馳T0系列的基本型,目的是通過單片機的串口來控制串口屏 上面僅是一部分常用的基礎指令,更多更仔細的指令或者函數(shù)可以訪問陶晶馳資料官網。 硬

    2024年02月13日
    瀏覽(29)
  • HC-05藍牙模塊與STM32控制led燈亮詳解

    HC-05藍牙模塊與STM32控制led燈亮詳解

    HC-05模塊是一種基于藍牙協(xié)議的簡單無線通信設備,共有6個引腳,其中兩個引腳通過stm32的兩個含TX和RX的接口與之進行通信,一般用于無線控制,智能家居等。 VCC:用于供電 GND:用于供電 TX(發(fā)送):與單片機某一RX口進行通信 RX(接收):與單片機某一TX口進行通信 一句話

    2024年02月08日
    瀏覽(56)
  • 畢業(yè)設計 基于51單片機的手機藍牙控制8位LED燈亮滅設計

    畢業(yè)設計 基于51單片機的手機藍牙控制8位LED燈亮滅設計

    選題之前,同學們要弄明白一件事情,做畢業(yè)設計是干什么用的! 這里我告訴大家,畢業(yè)設計對于你來說,不是讓你去搞研究,掌握運用所學知識的,也不是讓你去比誰做的畢業(yè)設計多么牛逼,多么厲害。 說白點,它的作用就是一個,讓你順利畢業(yè),能夠拿到學位證,畢業(yè)

    2024年02月07日
    瀏覽(99)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領取紅包

二維碼2

領紅包