串口通讯———蓝牙模块控制LED亮灭

串口的发送与中断接收简单应用

前言

一、串口通信

       (1)含义

       (2)硬件接线

       (3)参数

二、硬件接线图

1.引脚连接

2.代码部分

三、蓝牙模块控制LED亮灭现象

总结


前言

本文为作者在复习串口通信协议后进行的知识总结,希望在分享自己对串口通信理解的同时,能够对各位读者有所帮助,谢谢。


一、串口通信

(1)含义

串口通信是一种设备与设备之间常用的全双工通信协议。大部分使用都是异步通信,若需要同步通信,可以添加时钟线实现。

(2)硬件接线

USART通信常由4根线组成,分别是VCC电源线、GND地线、RXD接收线以及TXD发送线。需要注意的是,两个设备的RXD要连接TXD,TXD要连接RXD。若两个设备都有独立电源供电,那么VCC电源线即可除去。

(3)参数

以下是串口通信的参数

波特率:串口通信的速率,单位是bps,即每秒传输多少位数据。倘若通信双方由于通信速率不同,则可能导致接收数据发生错误。

起始位:标志着某一数据帧的开始,在空闲状态时数据线为高电平,起始位会将其拉低为低电平,标志着开始传输数据帧。

数据位:用于承载数据,有 “0” 和 “1”两种表示状态,在数据帧中通常有8位。

停止位:在传输完数据位后,会再传输一位停止位,固定为高电平,使得方便接收下一数据帧。

校验位:用于校验数据是否传输正确,串口通信采用的是奇偶校验法。

二、硬件接线图

(1)引脚连接

RX----PA2

TX----PA3

GND---GND

VCC---5V

(2)代码部分

main.c 

uint16_t RX_DATA;//串口接收数据

#define LED_ON  GPIO_ResetBits(GPIOB, GPIO_Pin_5) //打开LED灯
#define LED_OFF GPIO_SetBits(GPIOB, GPIO_Pin_5)   //关闭LED灯

int main(void)
{
    LED_Init();
	Bluetooth_Init();//蓝牙模块初始化
	OLED_Init();
	while(1)
	{
		
	}
}

//蓝牙中断服务函数
void USART2_IRQHandler(void)
{
	OLED_Init();
	
	if (USART_GetITStatus(USART2, USART_IT_RXNE) == SET)
	{	
		RX_DATA=USART_ReceiveData(USART2);
		
		if(RX_DATA==0x30)
		{
		 LED_ON;	
     OLED_ShowString(0, 0, "LED ON", OLED_8X16);
     OLED_Update();			
		}	
		
		if(RX_DATA==0X31)
		{
		 LED_OFF;   	
     OLED_ShowString(0, 0, "LED OFF", OLED_8X16);
     OLED_Update();	
		}
     OLED_ShowHexNum(0, 16, RX_DATA, 4, OLED_8X16);
     OLED_Update();
		 USART_ClearITPendingBit(USART2, USART_IT_RXNE);
	}
}

Bluetooth.c

void Bluetooth_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
	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_3;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_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(USART2, &USART_InitStructure);
	
	USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	
	NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
	NVIC_Init(&NVIC_InitStructure);
	
	USART_Cmd(USART2, ENABLE);
}

三、蓝牙模块控制LED亮灭现象

 


总结

本文仅介绍了串口通讯的基本概念以及简单应用,串口打印还可用于程序调试中,是个很好的调试工具,希望本文对各位读者有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值