正点原子探索者(STM32F407),非正点HC05蓝牙点灯代码

本文介绍了一个使用STM32F407进行非正点蓝牙串口通信的基础实验。通过硬件连接PB10和PB11分别对应蓝牙模块的RX和TX,利用杜邦线和探索者板进行连接。软件部分使用SPP蓝牙助手,并在STM32中实现了串口3的初始化和中断处理,当接收到'a'时点亮红灯,收到'b'时熄灭红灯。实验代码详细展示了如何处理串口接收中断和数据解析,为后续的开发提供了基础。
摘要由CSDN通过智能技术生成

实验准备:

1:非正点蓝牙串口 我用的是六脚的

2:杜邦线4根

3:探索者板子或者最小核心板STM32F407

硬件连接:

PB10(TX)接蓝牙模块RX

PB11(RX)接蓝牙模块TX

VCC接单片机5V GND接32GND

软件准备:

SPP蓝牙助手

int main(void)
{ 

	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
	delay_init(168);		//延时初始化 
	usart3_init(9600);	//串口初始化波特率为115200
	
	LED_Init();		  		//初始化与LED连接的硬件接口  
	while(1)
	{
		if(USART3_RX_STA&0x8000)
		 {

			if( hc_05_test[0]==0x61)
			 {
			  LED0=0;
			 }
			 if( hc_05_test[0]==0x62)
			 {
			  LED0=1;
			 }

			 USART3_RX_STA=0;
		 }
		
		  LED1=!LED1; 
		 delay_ms(100);
	 }

//**************************************下面是串口3初始化
#include "sys.h"
#include "usart3.h"
u8 USART3_RX_BUF[USART3_REC_LEN]; //数组用来存储接收到的数据,而USART3_REC_LEN为最多能接收的字节限度
u16 USART3_RX_STA=0;         		//接收状态标记	 0-14位为接收字节数,15位接收完成标志位

u8 hc_05_test[2];
void usart3_init(u32 bound)
{ 
	  GPIO_InitTypeDef GPIO_InitStructure;
	  NVIC_InitTypeDef NVIC_InitStructurea;
	  USART_InitTypeDef USART_InitStruct;
	 
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);//使能串口3
		RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
	
	  USART_DeInit(USART3);//串口3复位 不是必要的一步
	
	  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
	  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10|GPIO_Pin_11;
		GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
	  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
		GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
	  GPIO_Init(GPIOB,&GPIO_InitStructure);    //PB10设置为复用推挽输出
	
	
		GPIO_PinAFConfig(GPIOB,GPIO_PinSource10,GPIO_AF_USART3);
		GPIO_PinAFConfig(GPIOB,GPIO_PinSource11,GPIO_AF_USART3);
		
	  NVIC_InitStructurea.NVIC_IRQChannel=USART3_IRQn;
	  NVIC_InitStructurea.NVIC_IRQChannelCmd=ENABLE;
	  NVIC_InitStructurea.NVIC_IRQChannelPreemptionPriority=2;
	  NVIC_InitStructurea.NVIC_IRQChannelSubPriority=2;
	  NVIC_Init(&NVIC_InitStructurea);          //串口3中断的设置
	
	  USART_InitStruct.USART_BaudRate=bound;//串口波特率
		USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//无硬件数据流控制
		USART_InitStruct.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;//收发模式
		USART_InitStruct.USART_Parity=USART_Parity_No;//无奇偶校验位
		USART_InitStruct.USART_StopBits=USART_StopBits_1;//一个停止位
		USART_InitStruct.USART_WordLength=USART_WordLength_8b;//字长为8位数据格式
	  USART_Init(USART3,&USART_InitStruct);                 //串口3的一些参数设置
		
		USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);//串口3中断使能和中断类型设置
		USART_Cmd(USART3,ENABLE);//串口3使能
		USART3_RX_STA=0;     
}
void USART3_IRQHandler()//串口3的中断
{ 
	 u8 res;//暂时缓存接收的数据
   if(USART_GetITStatus(USART3,USART_IT_RXNE)!=RESET)//判断是否为串口3接收中断
	 {
			res=USART_ReceiveData(USART3);//接收到数据放进res
		   if((USART3_RX_STA&0x8000)==0)//接收未完成
		{


				hc_05_test[0]=res;

				
				USART3_RX_STA|=0x8000;//串口3接收完成			
				

		}   		 
		 
		 USART_ClearITPendingBit(USART3,USART_IT_RXNE);//清除接收中断标志
		   }
	  }

*********************************串口三的头文件
#ifndef USART3_H_
#define USART3_H_
#include "sys.h"
#include <stdio.h>	
#define USART3_REC_LEN  200  	//定义最大接收字节数 200
extern u8  USART3_RX_BUF[USART3_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节
extern u16 USART3_RX_STA;   
extern u8 hc_05_test[2];//接收状态标记	 0-14位为接收字节数,15位接收完成标志位
void usart3_init(u32 bound);
#endif


发送a 红灯亮 b红灯灭

总结:虽然这是一个很简单的实验,但是可以作为开发的基础,大家可以进一步拓展,例如调用其他函数之类的。希望能帮到大家

另外大家可以自己拓展,例如不识别一个字符而是用strcmp()函数识别字符串。

  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值