IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 小白入门STM32----手机蓝牙控制STM32单片机点亮LED -> 正文阅读

[嵌入式]小白入门STM32----手机蓝牙控制STM32单片机点亮LED

引言导读

  1. 本文适合小白简单入门,大神请绕行。想讲的尽量透彻,所以篇幅啰嗦,介意的绕行。

  2. 蓝牙模块基本是通用的,所以看这一篇教程,如果你的蓝牙模块与我的不一样,也不要担心,原理是通的。

  3. 蓝牙是通信的一种,故想要学好STM32与蓝牙连接,掌握一点点基本通信知识是需要的。

  4. 本次涉及到的硬件包括STM32F103C8T6最小系统板(其实其他版本都是可以的)和蓝牙模块买的是集芯微的BLE5.0(这家挺便宜,就是资料少,JDY-31,HC-06等都可以),此外还需要面包板和杜邦线若干。

  5. 买的蓝牙模块没有焊接排针,而且竟然是小号排针,又手残焊接不好。最后,买了锡膏和热风机焊接,小号排针用网线代替了(网线也可以当作杜邦线用)。不过锡膏有毒,所以焊接时候注意通风,使用时最好带手套或者之类的,具体自动百度或者bilibili。

一、通信基础知识

1.1 通信到底传输的是什么?

在逻辑层面,通信传输的是比特也就是二进制数。在物理层面上,当线路为电路时,发送方发送一个个持续小段时间的电压信号来表示这些二进制数,比如双方约定一个0.001秒的0V代表数字0,5V代表数字1,发送方发送先后发送两个持续0.001秒的0V和一个0.001秒的5V,就是相当于发送了001。这种持续一段时间的电压信号就是码元。当线路为无线电波时,码元就是一份份的电波了。由于电信号是一种波,所以可以认为我们在线路上传输了一个个波。

1.2 比特率和波特率

通信速度有多快呢?在逻辑层面上,用比特率(Bitrate)来衡量,它代表单位时间内传输的bit数量,单位是bit/s。在物理层面上,使用波特率(Baudrate),它表示单位时间内传输的码元(即,波)数量,码元就是上面的提到的电平信号,所以叫做波特率。通常下一个码元代表一个二进制数,这时比特率和波特率是相等。也有不等的时候,比如用0V表示0,2V表示1,4V表示2,6V表示3,这时候一个码元代表一个四进制数,则比特率是波特率的二倍。

习题

开放题目,言之成理即可,只考虑一般情形,不考虑特殊情况。

  1. 比特率和波特率的区别和联系?

1.1 双工和单工

通信类似于AB市通车,码元类似于一辆辆汽车。

名词定义例子
单工通信通信线路是单向,从始至终都是发送方和接收方是固定的车子只能从A市到B市,B市的车子不能开往A市。
双工通信线路是双向,数据可以从A流向B,也可以从B流向A,即通信双方都可以发信息给对方,又可以分为半双工和全双工A市的车可以开到B市,B市的车子也可以到A市。
全双工线路全时段对双方开放,任何时间任何一方都可以发送信息给对方AB市之间路很宽,两市间车子可以自由来往
半双工线路只能在某段时间内对某方开放,双方轮流使用线路,即指某时间内,只能一方发送一方接受。AB两个城市间公路很窄,只能容纳一辆车通行,AB两方约定8点-9点是车子只能从A市到B,9-10点是B市到A市,这样轮流交替。

单工和双工是对应的,按照线路是双向的还是单向的进行划分。
全双工和半双工是成对,他们是按照线路是否全时间段对双方开放使用。

全双工比半双工要复杂,效率高,发送数据多,成本更高。半双工要简单,双方需要约定好时间,不然会撞车

习题

开放题目,言之成理即可,只考虑一般情形,不考虑特殊情况。

  1. 两人交谈属于哪种通信?
  2. 校会上,校长发言属于哪种通信?
  3. 两人吵架属于哪种通信?
  4. 上课传纸条属于哪种通信?

1.2 串行和并行

并行通信指双方之间通过多根信息线(8根以上)传输数据,数据可以并行传输,即公路很宽能够容纳多辆车并行行驶。
串行通信指双方之间通过很少根信息线(8根及以下)传输数据,数据犹如被一根线串起来的珍珠,所以叫做串行。

串行通信抗干扰能力强,线路铺设费用低,速率低。

1.3 异同通信和同步通信

为什么要有同步和异步,或者它们是怎么来的?要想回答这个问题,我们需要考虑一个场景:如何传输大量数据?这个问题是没有完美解决方法的,但是最优方法是:当传输线路等硬件既定时,在线路满负荷下可以最快完成数据传输,也就是说:发送方马不停蹄地发送数据,接收方也及时接收信息,同时为了尽可能保证数据传输安全性,接受方接受一个信息后要给一个是否成功接收的状态,发送方在接受这个状态后才能发送下一个信息。实现这种马不停蹄,最简单是双方按同一套时间步调一致发送、接收和检验信息,就像生产线一样,每个人在规定的时间内步调一致地完成各自的动作,以达到效率最高。这就是同步通信过程。

异步通信则是为了完成小数据量传输,比如操控遥控车,这种场景下通常发送方不定时地发送少量信息,接收方接收后无需回复。相比于同步通信这是不安全的,但是这无所谓,可以通过其他方式来修正这种不安全。比如:遥控汽车,因为某个因素,汽车没有接受到转向,那么人会再次操作一遍转向操作,问题不大。异步通信就不要求双方在同一套时间下进行同步操作,只要它们是相近的时间就好。但是,双方要有相同的波特率。

这里的时间,其实就是时钟周期,类似于人把时间分为年月周日时分秒,时钟周期是把1秒分为很多份,是芯片设备的时间。

习题

  1. 在异步通信中,为什么通常情况下,双方要保持一样的波特率?

二、连接STM32单片机

下面进入正题

2.1 编程环境

  1. CubeIDE
  2. 面包板和连接线

2.2 硬件接线

下面给出了接线图,

2.2.1 接线图

在这里插入图片描述

2.2.1 硬件介绍和设置

買的蓝牙模块如下图,其VDD GND是接输入电源的正负极,他要求输入3.3V电压,我用的STM32板子上的电源。RXD TXD是用于连接STM32板子的,RXDreceive external data引脚,用于接收来自单片机的信息,TXD引脚用于向单片机发送信息。买的板子一般都附赠规格说明书,比如引脚、电压和波特率等。
在这里插入图片描述
STM32是通过USART连接蓝牙模块,UART属于异步全双工通信,包含两根线单向通信线,分别接上述提到的两个引脚。我用的是STM32F103C8T6芯片,它自带有三组USART,这里选用USART1,CubeIDE会自动选择PA10和PA9两个引脚与蓝牙进行通信。具体如下图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3 编码

在这里添加如下代码:

  uint8_t rx = 0; // 定义一个无符号整形数,用于接收蓝牙发送的数据。
  while (1)
  {
      /* USER CODE END WHILE */
      // 用于接受来自蓝牙发来的数据。
      // &huart1 是一个封装好的结构体,代表那两个引脚,HAL_UART_Receive函数会自动识别使用PA10进行接受数据。
      // &rx,接收蓝牙信息放到rx中,由于rx是整形数字,直接传递给函数,传过去的只是副本,所以要传递其引用。
      // 1,表示接受一个字节(8个二进制)。
      // HAL_MAX_DELAY 表示接受一个蓝牙信号后,单片机就停下来死等下次接收蓝牙信息。
      HAL_UART_Receive(&huart1, &rx, 1, HAL_MAX_DELAY);
      
      // rx == '1', 蓝牙传输过来的是一个字符1而不是数字。
	  if (rx == '1'){
	      HAL_GPIO_WritePin(GPIOA, LED_Pin, GPIO_PIN_SET); # 输出高电平,灯亮
      }else{
	      HAL_GPIO_WritePin(GPIOA, LED_Pin, GPIO_PIN_RESET); # 输出低电平,灯灭
	  }
    /* USER CODE BEGIN 3 */
  }

在这里插入图片描述
编译代码并下载到单片机上。

2.3 手机控制二极管

  1. 搜索下载一款手机蓝牙调试助手,我用的是BLE调试助手这款APP。
  2. 按照蓝牙名字,搜索并连接上蓝牙,然后给蓝牙发送"1", 即可灯亮,发送其他则灯灭。
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:50:48  更:2022-10-17 12:52:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 2:21:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计