Stm32标准库函数3——BlueTooth 蓝牙通讯测试 Stm32中继

news2025/2/3 9:35:37

//在使用本程序前,先将模块与手机端匹配成功,波特率38400
//串口1(A9、A10)接电脑,串口2(A2、A3)接蓝牙模块
//所有的波特率都为38400,蓝牙的供电为3.3-5v
//程序功能,转接蓝牙模块的指令到PC

#include "stm32f10x.h"    //在该头文件中默认定义系统时钟为72M
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "bluetooth.h"

u8 flag,data;

void USART1_IRQHandler(void)                    //串口1中断服务程序
{
  u8 dat;

  if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)    //若接收数据寄存器满
  {     
    dat = (u8)(USART_ReceiveData(USART1)&0xff);   //第2个字节才是接受到的数据
    data=dat;
    flag=1;
    USART2_SendData(dat);                                                                                                                    
  }

}

void USART2_IRQHandler(void)                    //串口1中断服务程序
{
  u8 dat;

  if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)    //若接收数据寄存器满
  {     
    dat = (u8)(USART_ReceiveData(USART2)&0xff);   //第2个字节才是接受到的数据
    data=dat;
    flag=2;
    USART1_SendData(dat);                                                                                                                    
  }

}

 int main(void)
 {    
    RCC_Configuration();    
    delay_init();             //延时函数初始化      
    NVIC_Configuration();      //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
    uart1_init(38400);     //串口初始化为9600
    uart2_init(38400);
     while(1)
    {
//    switch (flag)
//    {
//      case 1: USART2_SendData(data); flag=0; break;
//      case 2: USART1_SendData(data); flag=0; break;    
//      default: flag=0; break;
//    }
      //USART1_SendData('A');
      delay_ms(300);
    }    
 }

#include "stm32f10x.h"
#include "bluetooth.h"
#include "usart.h"

 void uart2_init(u32 bound)
{
 //GPIO端口设置
    GPIO_InitTypeDef GPIO_InitStructure;
    USART_InitTypeDef USART_InitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;
    
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);          //使能USART1,GPIOA时钟
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
     USART_DeInit(USART2);  //复位串口1
     //USART1_TX   PA.9
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PA.9
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;    //复用推挽输出
    GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA9
   
    //USART1_RX      PA.10
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
    GPIO_Init(GPIOA, &GPIO_InitStructure);  //初始化PA10


   //USART 初始化设置

    USART_InitStructure.USART_BaudRate = bound;//一般设置为9600;
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
    USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
    USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;    //收发模式

    USART_Init(USART2, &USART_InitStructure); //初始化串口
    //#if EN_USART1_RX          //如果使能了接收  
   //Usart1 NVIC 配置
    NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;        //子优先级3
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;            //IRQ通道使能
    NVIC_Init(&NVIC_InitStructure);    //根据指定的参数初始化VIC寄存器
   
    USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启中断
    //#endif
    USART_Cmd(USART2, ENABLE);                    //使能串口
}

void  USART2_SendData(unsigned char SendData)
{
USART_SendData(USART2, SendData);
while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET); //Tansmit Data Register empty interrupt
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/103765.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Discrete Optimization课程笔记(4)—混合整数规划

目录​​​​​​​ 1.MIP介绍(Mixed Integer Program) Case1: Warehouse Location Case2: Knapsack Problem(Branch and Bound) 2.MIP模型(modeling) Case3: Coloring Problem(Big-M Transformation) 3.割平面法(Cutting planes) 4.多面体切割(Polyhedral Cuts) Cas…

前端工程化VUE-cli

六 前端工程化vue-cli Vue是渐近式框架,你可以用它一个功能,也可以用全家桶。前面的章节中,我们是在html中引入vue.js,只用它核心的数据绑定功能。但基于vue的扩展还有很多,比如vueRouter,axios&#xff0…

Base64编码剖析

文章目录Base64编码概述Base64原理索引表如何转换?Java实操Java代码实现Base64参考文章Base64编码概述 百度百科中对Base64有一个很好的解释:“Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来…

【面试题】5年前端 - 历时1个月收获7个offer

大厂面试题分享 面试题库 前端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 前言 省流:最终拿到了58、UMU、便利蜂、虾皮、快手、腾讯、字节的offer。 金三银四面试的, 这次整体面试通过率还挺高的, …

深入解读云场景下的网络抖动

一、网络抖动背景 延时高,网络卡,卡住了美好! 应用抖,业务惊,惊扰了谁的心? 当你在观看世界杯梅西主罚点球突然视频中断了几秒钟 当你在游戏中奋力厮杀突然手机在转圈圈无法响应 当你守候多时为了抢一…

数据结构与算法-二叉树

什么树 树是 n(n>0)个有限集。n0是空树,在n>1的非空树中有且仅有一个根节点作为树根,其他结构分散在根节点下形成一个个子树。各个子树互不相交。在实际的编码环节中,我们可以用链表和数组来模拟树结构。 为什么…

【计算机考研408】进程运行的流程

由程序段(进程运行的程序的代码)、相关数据段、和PCB(进程存在的唯一标志)三个部分构成了进程实体,也称作进程映像。 注:(引入线程后)进程只作为cpu外的系统资源的分配单元。 注&a…

DOM算法系列007-判定给定节点是否为空白节点

UID: 20221220141216 aliases: tags: source: cssclass: created: 2022-12-20 空白节点 什么是空白节点? 当一个节点的节点值为空文本值时,这个节点就是空白节点。 节点值: 即节点的 nodeValue 属性值: 实际上,节点值…

程序员必看:一款巨好用的免费简历“神器”(据说有了它,再也不发愁找工作啦!)

先说地址:https://cvmaker.greedyai.com/ 相比于前两年,今年大家的求职热情依然不减,但市场却泼了一盆“冰水”。 无论是从后台收到的留言,还是各种各样的新闻报道,以及今年的各大平台招聘数据来看,总结…

java多线程 下

目录 线程的生命周期 线程的同步 Synchronized的使用方法 同步机制中的锁 同步的范围 单例设计模式之懒汉式(线程安全) 线程的死锁问题 Lock(锁) synchronized 与 Lock 的对比 线程的通信 JDK5.0 新增线程创建方式 新增方式一:实现Callable接口 新增方式二…

利用LSTM识别显式篇章关系实战 可作为毕设

1.显式篇章关系分类概述 案例知识点: 任务描述:篇章关系分析是自然语言中处理篇章级基础语言分析任务,其目的是利用规则或机器学习等计算机处理手段判别篇章各组成成分之间的修辞逻辑关系,从而从整体上理解篇章。其中论元之间有连接词连接的此类关系称为显式篇章关系。本教…

RabbitMQ实战教程

RabbitMQ实战教程1.什么是RabbitMQ1.1 MQ(Message Queue)消息队列1.1.1 异步处理1.1.2 应用解耦1.1.3 流量削峰1.2 背景知识介绍1.2.1 AMQP高级消息队列协议1.2.2 JMS1.2.3 二者的联系1.2.4 Erlang语言1.3 为什么选择RabbitMQ1.4 RabbitMQ各组件功能2.怎…

【springboot 2.5.14 +jsp】打jar包,超详细,亲测可用,带源码

【springboot 2.5.14 jsp】打jar包&#xff0c;案例文档目录截图文件配置文件pom.xmlapplication.xmljspindex.jspjavaSpringbootJspApplication.javaHelloController.java打包方式运行源码地址文档目录截图 文件 配置文件 pom.xml <?xml version"1.0" encodi…

VEML6075的驱动代码

VEML6075的驱动代码VEML6075简介VEML6075相关参数VEML6075IIC读写相关时序VEML6075IIC读写驱动代码VEML6075IIC读写串口打印总结VEML6075简介 VEML6075是一种紫外线&#xff08;UV&#xff09;光传感器&#xff0c;它可以测量紫外线强度。它通常用于各种应用&#xff0c;包括环…

【云原生 | Kubernetes 实战】15、K8s 控制器 Daemonset 入门到企业实战应用

目录 一、DaemonSet 控制器&#xff1a;概念、原理解读 1.1 DaemonSet 概述 1.2 DaemonSet 工作原理&#xff1a;如何管理 Pod &#xff1f; 1.3 Daemonset 典型的应用场景 1.4 DaemonSet 与 Deployment 的区别 二、DaemonSet 资源清单文件编写技巧 三、DaemonSet …

零基础如何自学Python编程?

零基础如何系统地自学Python编程&#xff1f;绝大多数零基础转行者学习编程的目的就是想找一份高薪有发展前景的工作&#xff0c;哪个编程语言就业前景好越值得学习。零基础的同学学Python是一个不错的选择。 对于零基础的初学者最迷茫的是不知道怎样开始学习&#xff0c;建议…

基础背包问题--0 1背包与完全背包

&#x1f389;&#x1f389;&#x1f389;写在前面&#xff1a; 博主主页&#xff1a;&#x1f339;&#x1f339;&#x1f339;戳一戳&#xff0c;欢迎大佬指点&#xff01; 目标梦想&#xff1a;进大厂&#xff0c;立志成为一个牛掰的Java程序猿&#xff0c;虽然现在还是一个…

JS基于base64编码加密解密文本和图片

JS基于base64编码加密解密文本和图片 ​ 密码学&#xff0c;体系太庞大了&#xff0c;常见的加密解密算法很多&#xff0c;我仅了解了一下&#xff0c;这里仅介绍采用实现base64加密解密的方法。 严格地说base64不是加密算法&#xff0c;他只是一种编码方式&#xff0c;是一…

企业经营管理的核心是什么?

一、企业经营管理是什么&#xff1f; 企业经营管理通常是指&#xff0c;企业为了满足自身生存发展&#xff0c;通过对企业内部成员的经营活动进行计划、组织、协调、指挥、控制。企业经营管理主要目的是为了让企业在面向市场和用户是时&#xff0c;可以充分利用企业自身优势和…

excel日期函数:如何计算项目的开始和完成日期

制定工作计划是我们平时工作中经常会遇到的一类事务&#xff0c;例如某个项目&#xff0c;需要分成七个阶段来完成&#xff0c;已知项目的开始日期和每个项目需要的时间&#xff08;以天为单位&#xff09;&#xff0c;就可以做出一个项目的工作计划表&#xff1a; 需要重点强调…