文章目录

  • 引言导读
  • 一、通信基础知识
    • 1.1 通信到底传输的是什么?
    • 1.2 比特率和波特率
      • 习题
    • 1.1 双工和单工
      • 习题
    • 1.2 串行和并行
    • 1.3 异步通信和同步通信
      • 习题
  • 二、连接STM32单片机
    • 2.1 编程环境
    • 2.2 硬件接线
      • 2.2.1 接线图
      • 2.2.1 硬件介绍和设置
    • 2.3 编码
    • 2.3 手机控制二极管
  • 习题答案

引言导读

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

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

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

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

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

  6. 硬件电路设计的原则是“简单、可靠和价格低廉”,所以就是有更优秀的方案,不一定能够使用。越简单,零件越少,出错概率越低,当然价格也越低。

一、通信基础知识

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", 即可灯亮,发送其他则灯灭。

习题答案

  1. 比特率和波特率的区别和联系?
    波特率和比特率都可以用来描述通信速度,波特率指的是物理层面传输速度,比特率指逻辑层面传输速度。波是信号的载体,比特描述一个波可以表示信息量的多少。比特率是波特率的N倍。

  2. 两人交谈属于哪种通信?
    两人交谈,双方都可以说话和倾听,所以是双工。一方说完另一方才会说,故是半双工。每个人的音色不同,可以认为是线路不同,所以并行通信。

  3. 校会上,校长发言属于哪种通信?
    单工,一条线路故串行。

  4. 两人吵架属于哪种通信?
    双方同时说话全双工;两人音色不同故并行;异步。

  5. 上课传纸条属于哪种通信?
    异步;串行;半双工;

  6. 在异步通信中,为什么通常情况下,双方要保持一样的波特率?
    波特率代表发送信号的频率,通信双方需要按照约定的波特率来解码对方的信息。显然,双方不在同样的波特率时,设计软件或者硬件成本更高,所以约定一样的波特率,通信成本低。

小白入门STM32(1)----手机蓝牙控制STM32单片机点亮LED相关推荐

  1. 手机蓝牙控制51单片机实现对led灯的开关

    根据蓝牙模块通过手机蓝牙实现对51单片机led灯的控制. 1.器材 2.连线说明 3.源码 4.操作过程 5.成果展示 1.器材 51单片机,本人选用的为亚博的51单片机,不同的单片机在引脚的定义上有 ...

  2. 零基础DIY四轴飞行器超级详细保姆级教程(STM32F407ZGT6主控、WIFI图传、陀螺仪平衡、气压计/超声波定高、手机蓝牙控制等功能)

    前言 大四毕业后暑假没事做就花了一点DIY了一个四轴飞行器,是比较大的那种F450机架,不是那种PCB板做机架的小四轴,因为我也是从零基础开始做的四轴,现在就想把自己的过程写成博客分享在网上.下面我会 ...

  3. 毕业论文 | 基于安卓手机蓝牙控制的智能小车设计(源代码)

    博主github:https://github.com/MichaelBeechan 博主CSDN:https://blog.csdn.net/u011344545 预告:源代码.论文.电路图设计链接 ...

  4. android智能小车 论文,基于安卓手机蓝牙控制的智能小车设计毕业设计(论文).doc...

    编 号: 审定成绩: 毕业设计(论文) 设计(论文)题目: 学院:学 生 姓 名 :专 业 :班 级 :学 号 :指 导 教 师 :答辩组 负责人 : 填表时间:年月 摘 要 随着物联网的兴起,And ...

  5. 第一节:C#工业控制编程基础--点亮LED灯实验

    第一节:C#工业控制编程基础–点亮LED灯实验 文章目录 第一节:C#工业控制编程基础--点亮LED灯实验 一.实验目的: C#入门基础学习. 二.实验内容: 用C#控制LED的亮灭. 三.实验步骤: ...

  6. 蓝牙控制STM32平衡车(一,硬件和程序实现)

    一 硬件结构和原理 1.器件选型 主控芯片是F1系列的MCU 电机的话最好是那种精度较高的编码电机,当然淘宝那种霍尔的编码电机也是可以实现的: 电机驱动的话推荐TB6612驱动,带两个电机没有问题,并 ...

  7. HC-05(ZS-040)蓝牙模块使用详情(蓝牙模块配置、手机蓝牙控制单片机、蓝牙与蓝牙之间的通信)含51、32程序

    HC-05是一款主从一体化的蓝牙模块,因此其使用起来比较方便,只需要进行简单的配置即可. 本文就手把手的介绍小白入手模块后如何使用. 对于模块使用:1.蓝牙配置→2.手机与蓝牙的传输→3.手机通过蓝牙 ...

  8. esp32 Micropython bluetooth手机蓝牙控制板子自带灯熄灭

    参考:https://doc.itprojects.cn/0006.zhishi.esp32/02.doc/index.html#/c03.servo.ble from machine import ...

  9. 蓝牙控制esp-32单片机(四)

    编程环境 vs-code.电路板.手机APP:spp蓝牙串口 基本内容操作 本次是基于前两篇文章相结合所得到的应用 使用vs-code将蓝牙链接和单片机开关控制简单的结合 测试代码如下 #includ ...

最新文章

  1. RocketMQ(六):namesrv再探
  2. _thread_in_vm_Java Thread类的静态void sleep(long time_in_ms,int time_in_ns)方法,带示例
  3. Qt工作笔记-QCustomPlot让曲线动起来
  4. 为什么大厂都在造车?原因找到了
  5. leetcode @python 120. Triangle
  6. 甘肃省智慧教育云平台实名认证_“好分数”甘肃行,人工智能助力教育均衡
  7. centos5.5 下面 lnmp环境遇到的小问题
  8. SharePoint 2010 整合Sil“.NET研究”verlight 4应用 - 任务管理
  9. 声道测试音频_功率放大器测试方法
  10. TensorFlow :HelloWorld
  11. Alex and broken contest (字符串)CodeForces - 877A
  12. SQL Server从入门到精通(二)
  13. c 转时间戳php,php日期转时间戳,指定日期转换成时间戳 筋斗云网络
  14. PHP 高并发秒杀解决方案
  15. 模糊控制洗衣机MATLAB模型,洗衣机的模糊控制MATLAB仿真
  16. 华为服务器串号官网查询系统,查询服务器序列号
  17. Flash播放器常用参数设置_应用技巧
  18. 关于win10访问u盘被拒绝,显示没有权限访问问题的解决方案
  19. 深入linux设备驱动程序内核机制(第三章) 读书笔记
  20. HTTP3 RFC标准正式发布,QUIC会成为传输技术的新一代颠覆者吗?

热门文章

  1. 11.0_[Java 继承]-继承/重写/抽象类/抽象方法/ final 修饰符
  2. ABAP 使用MODIF ID实现动态选择屏幕示例
  3. 聚焦2018爱思唯尔-环球科学卓越科研论坛
  4. 马云回国后,四年前的事情又被翻出来了
  5. 数字城市天津防汛应急平台用户痛点分析【软件测试与工程】
  6. 基于C语言控制台程序的简易MP3音乐播放器
  7. “拼多多”惊爆重大 Bug!程序员的眼泪,羊毛党的狂欢
  8. (重磅!价值一千元的R代码送给你)芯片探针序列的基因组注释 芯片没有注释信息 从头基因组比对gtf文件开始atcg 只有探针核苷酸序列的首先探针核苷酸序列需要比对到参考基因组然后比对后的文件
  9. 国内外主要搜索引擎登录入口
  10. 模拟输入H.264流,输出封装格式文件