嵌入式单片机基础篇(二十七)之Stm32F103单片机给蓝牙模块发送AT指令程序

2023-10-27

Stm32F103单片机给蓝牙模块发送AT指令程序

#include "stm32f10x.h"
#include "string.h"
#include "stdio.h"
unsigned char UARTbuff[32];  
unsigned char AT1[32]="AT+PIN666666\r\n";
int k=0;
static unsigned char count=0;
void My_USART1_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStrue;
	USART_InitTypeDef USART_InitStrue;
	NVIC_InitTypeDef NVIC_InitStrue;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
	
	GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP;
	GPIO_InitStrue.GPIO_Pin=GPIO_Pin_9;
	GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;
  GPIO_Init(GPIOA,&GPIO_InitStrue);
	
	GPIO_InitStrue.GPIO_Mode=GPIO_Mode_IN_FLOATING;
	GPIO_InitStrue.GPIO_Pin=GPIO_Pin_10;
	GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;
  GPIO_Init(GPIOA,&GPIO_InitStrue);
	
	USART_InitStrue.USART_BaudRate=9600;
	USART_InitStrue.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
	USART_InitStrue.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;
	USART_InitStrue.USART_Parity=USART_Parity_No;
	USART_InitStrue.USART_StopBits=USART_StopBits_1;
	USART_InitStrue.USART_WordLength=USART_WordLength_8b;
	
	USART_Init(USART1,&USART_InitStrue);
	
	USART_Cmd(USART1,ENABLE);//使能串口1
	
	USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//开启接收中断
	
	NVIC_InitStrue.NVIC_IRQChannel=USART1_IRQn;
	NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE;
	NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=1;
	NVIC_InitStrue.NVIC_IRQChannelSubPriority=1;
	NVIC_Init(&NVIC_InitStrue);
	
	
}
void LED_Init(void)
{
 
 GPIO_InitTypeDef  GPIO_InitStructure;
 	
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);	 //使能PB,PE端口时钟
	
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;				 //LED0-->PB.5 端口配置
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHz
 GPIO_Init(GPIOB, &GPIO_InitStructure);					 //根据设定参数初始化GPIOB.5
 GPIO_SetBits(GPIOB,GPIO_Pin_5);						 //PB.5 输出高

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;	    		 //LED1-->PE.5 端口配置, 推挽输出
 GPIO_Init(GPIOE, &GPIO_InitStructure);	  				 //推挽输出 ,IO口速度为50MHz
 GPIO_SetBits(GPIOE,GPIO_Pin_5); 						 //PE.5 输出高 
}
void sendchars(unsigned char *UARTbuff)
{  
	
	
	
	unsigned char i = 0;
//	
//	i=strlen((const char*)UARTbuff);		//此次发送数据的长度
//	for(j=0;j<i;j++)							//循环发送数据
//	{
//	  while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET); //循环发送,直到发送完毕   
//		USART_SendData(USART1,UARTbuff[j]); 
	
while(UARTbuff[i]!= '\0')
{   

  while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET); 
	USART_SendData(USART1,UARTbuff[i]);
USART_ClearFlag(USART1,USART_FLAG_TC);
   i++;      
}

}


void USART1_IRQHandler(void)
{

	 if(USART_GetITStatus(USART1,USART_IT_RXNE))
 {
    

	
      USART_ClearITPendingBit(USART1, USART_IT_RXNE);     
       UARTbuff[count]= USART_ReceiveData(USART1); 
      count++;
			if(count>2)
         {
         count=0;
        USART_ITConfig(USART1,USART_IT_RXNE,DISABLE);
	       k=1;
           }
    } 
	 
	 
  }

 
 int main(void)
 {	
	 char a[15];
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	My_USART1_Init();
	LED_Init();
	 sendchars(AT1);
	 while(1)
{
	
	
if(k==1)
   {
    
    k=0;
   USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//开启接收中断
 sprintf(a,"%s",UARTbuff);
	if(UARTbuff[0]=='+'&&UARTbuff[1]=='P')
	{  GPIO_ResetBits(GPIOE,GPIO_Pin_5); 
	   GPIO_ResetBits(GPIOB,GPIO_Pin_5);	
	}		
else
	{  GPIO_SetBits(GPIOB,GPIO_Pin_5);	 
	   GPIO_SetBits(GPIOE,GPIO_Pin_5);	
	}
}
	 
 }
 }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入式单片机基础篇(二十七)之Stm32F103单片机给蓝牙模块发送AT指令程序 的相关文章

  • 三菱PLC快速写入

    通常的写入过程是把整个PLC的程序内存进行写入 然而大多编写程序往往并不需要写入全部内存 所以我们需要通过调整PLC内存容量达成只写入适量的步数程序 来避免不必要的写入时间 调整程序容量 如图打开工程栏的参数 双击PLC参数来到FX参数设置
  • 安全测试-django防御安全策略

    django安全性 django针对安全方面有一些处理 学习如何进行处理设置 也有利于学习安全测试知识 CSRF 跨站点请求伪造 Cross Site Request Forgery CSRF 是一种网络攻击方式 攻击者欺骗用户在自己访问的
  • OpenCV-C++——基本操作总结

    文章目录 基本图像操作 1 创建空图像 2 获取图像尺寸 3 图像读取与显示 3 图像镜像 旋转 画线 遍历图像 基本图像操作 1 创建空图像 在OpenCV中 图像的类型是cv Mat 而cv Mat可作为任意维度的数组使用 0对应黑 2
  • Xenserver6.2设置VM开机自动启动

    XenServer 6 2中的虚拟机默认是不会自动启动的 据说是为了防止在HA环境中出现某些异常 所以如果母鸡 宿主机 异常断电恢复启动后 所有的虚拟机均为关机状态 但如果只是单台XenServer跑若干独立虚拟机 还是有必要让虚拟机开机自

随机推荐

  • WIFI版本云音响设置教程阿里云平台版本

    文章目录 WIFI本云音响设置教程介绍 一 申请设备三元素 1 登录阿里云物联网平台 2 创建产品 3 设置产品参数 4 添加设备 5 获取三元素 二 设置设备三元素 1 打开MQTTConfigTools 2 计算MQTT参数 3 使用w
  • 存储类型auto,static,extern,register的区别

    变量和函数的属性包括数据类型和数据的存储类别 存储类别指数据在内存中存储方式 静态和动态 包含auto static register extern四种 内存中 具体点来说内存分为三块 静态区 堆区 栈区 外部变量和全局变量存放在静态区 局
  • MySQL进阶语句

    目录 引言 一 常用查询 1 1 order by按关键字排序 升序排序 降序排序 结合where进行条件过滤在排序 多字段排序 1 2 and or判断 and or使用 1 3 distinct查询不重复记录 1 4 GROUP BY对
  • 使用IDEA进行git进行协同开发

    使用IDEA进行git进行协同开发 步入公司的第一步就是掌握版本控制工具的使用 常见的版本控制工具有两种方式 git常见于一些小的创业公司 项目小人员少 svn使用的公司规模较大 这里介绍git使用的一些场景 假设小组中有两个人 组长 组员
  • 期货模板实例

    以下是期货专用的API 1 get symbol 获得主力连续合约的映射合约 我们在进行生成信号时 可以使用助理合约时间序列 但在下单时要使用具体的合约 若想得到当天的主力合约映射的具体合约符号时 则可以使用context get symb
  • vs2013中配置多线程的使用环境

    提供vs2013的产品密钥供激活 BWG7X J98B3 W34RT 33B3R JVYW9 1 在Visual Studio 2013中配置 2 pthreads w32 下载地址 这里下载最新版本pthreads w32 2 9 1 f
  • 你不知道的javascript之JS原型对象和原型链

    开篇 之前对js中的原型链和原型对象有所了解 每当别人问我什么是原型链和原型对象时 我总是用很官方 其实自己不懂 的解释去描述 有一句话说的好 如果你不能把一个很复杂的东西用最简单的话语描述出来 那就说明你没有真正的理解 最近正在读 Jav
  • 写给开发小白的---如何写前后端分离的API设计文档

    最近在进行一个公司内部可视化执行工具的开发 在过程中遇到的一些问题就总结一下了 我们知道 现在我们的开发基本都是前后端分离的 这样就可以方便后端开发人员全身心投入到后端逻辑实现的工作中 前端工程师全身心的为用户提供更好的使用体验上 前后端分
  • 吴恩达视频观后感一(相同的字母表达的意思可是不一样)

    我通过观看他的视频 揣摩他的思想 敲他布置的程序 反复测试和回味 发现了一些内容 比如 其中的就是指的同一张图片的不同像素 eg 一张图片的所有像素有1w个 那么x下标一直从1到1w 每一个w都是一个单独的行向量 这个w除了维数固定 内部数
  • (2022年) python3.10.4 安装dlib、face_recognition库

    按照官方的安装步骤 一步步安装 很快就能成功 有些人觉得安装VS C 没有用 占资源 所以利用Anaconda安装 但是Anaconda安装会重建一个新的虚拟环境 原来的虚拟环境下载 了这么多库怎么办 重新使用Anaconda里再建一次 没
  • 【笔记】更新Pytorch和torchvision,以及如何查看当前python版本

    最近Pytorch从v0 1 12更新到了v0 2 v0 3 支持了很多方法 如果大家想知道详细内容可以去Pytorch v0 2版本发布 高阶梯度 分布式PyTorch 广播 高级索引 新图层等 查看 以及Pytorch v0 3 0版本
  • C++静态库动态库区别

    C 源代码到可执行程序经历的过程有预处理 编译 汇编 链接 静态库在链接阶段与目标程序链接在了一起 作为一个整体载入内存然后执行 库比较小一般用这种方法 而动态库是程序运行过程中才去加载到内存中的 库比较大 想共享用这种方法 多个进程用到一
  • MATLAB导入EXCEL表格数据画散点图

    在处理一些实验数据时 通常要画散点图 本来EXCEL自带的散点图功能也很好 但是为了秀一下 我们也要用到MATLAB来画图 下面来介绍一下实现方法 如果你第一次使用MATLAB 那就要从头开始介绍了 首先来新建一个脚本 然后进入编辑器页面
  • 92-TCP三次握手及TCP四次挥手

    TCP三次握手及TCP四次挥手 1 tcp三次握手 1 tcp的特点 2 tcp三次握手发生在什么阶段 3 tcp协议报头 4 tcp三次握手的流程 2 tcp四次挥手 1 tcp四次挥手发生在什么阶段 2 tcp四次挥手的流程 3 能不能
  • 深入学习java源码之Integer.parseInt()与Integer.valueOf()

    深入学习java源码之Integer parseInt 与Integer valueOf 一般我们创建一个类的时候是通过new关键字 比如 Object obj new Object 但是对于 Integer 类 我们却可以这样 Integ
  • 基于Packet Tracer的校园网络设计与规划

    本文仅仅为本人课程要求而设计的方案 本文仅仅使用RIP动态路由协议 HSRP协议 浮动路由 静态路由 等价路由 DHCP地址分配 NAT技术 VLAN划分 如有问题请大佬们在本博客下留言 课程设计报告文件 资源链接 Packet Trace
  • CSRF简介

    一 CSRF是什么 CSRF Cross site request forgery 中文名称 跨站请求伪造 也被称为 one click attack session riding 缩写为 CSRF XSRF 二 CSRF可以做什么 你这可
  • 9. STM32——HC_SR04超声波测距

    STM32 HC SR04超声波测距 HC SR04 实物图 基本参数 工作原理 时序图 超声波测距步骤 1 使能GPIO时钟 定时器时钟 2 配置GPIO引脚 3 配置TIM定时器时钟 4 配置NVIC优先级 5 开启TIM4定时器 6
  • SQL数据库案例

    数据表 Navicat SQLite Data Transfer Source Server school Source Server Version 30808 Source Host 0 Target Server Type SQLit
  • 嵌入式单片机基础篇(二十七)之Stm32F103单片机给蓝牙模块发送AT指令程序

    Stm32F103单片机给蓝牙模块发送AT指令程序 include stm32f10x h include string h include stdio h unsigned char UARTbuff 32 unsigned char A