stm 32 串口通信 蓝牙篇

1. HC-05蓝牙

1.1蓝牙模块使用介绍

蓝牙HC05是主从一体的蓝牙串口模块,简单的说,当蓝牙设备与蓝牙设备配对连接成功后,我们可以忽视蓝牙内部的通信协议,直接将将蓝牙当做串口用。当建立连接,两设备共同使用一通道也就是同一个串口,一个设备发送数据到通道中,另外一个设备便可以接收通道中的数据。

1.2蓝牙模块使用注意

hc-05支持从4800bps~1382400bps间的标准波特率,使用时波特率一定要匹配,vcc接3.3 或者 5V GND 接GND TX接单片机上的RX RX接TX。

2.Stm32F1串口通信

2.1串口通信介绍

STM32F103ZET6 最多可提供 5 路串口,

2.2串口通信算法思路

  1. 串口时钟使能,GPIO 时钟使能
  2. 串口复位
  3. GPIO 端口模式设置
  4. 串口参数初始化
  5. 开启中断并且初始化 NVIC(如果需要开启中断才需要这个步骤)
  6. 使能串口
  7. 编写中断处理函数

2.3步骤详解

1.串口时钟使能,使用哪个串口查手册使能哪个时钟,还有IO口时钟使能
2.串口复位。当外设出现异常的时候可以通过复位设置,实现该外设的复位,然后重新配置 这个外设达到让其重新工作的目的。一般在系统刚开始配置外设的时候,都会先执行复位该外设的操作。
复位的是在函数 USART_DeInit()中完成:

void USART_DeInit(USART_TypeDef* USARTx);//串口复位

复位很重要,根据情况选择
3.GPIO 端口模式设置 。在这可能很多人不知道,在中文手册110页有,对应着来就行

4.串口参数初始化
波特率,字长,停止位,奇偶校验位, 硬件数据流控制,模式(收,发)。我们可以根据需要设置这些参数,这里需要是你在串口助手或者说用别的设备通信时让两者保持一致就行。
5 .开启中断并且初始化 NVIC
这里推荐使用中断,使用中断好处是可以控制串口通信在代码中的优先级。
5.1 NVIC 中断使用
1.STM32 将中断分为 5 个组,组 0~4。
2.0 111 0: 4 0 位抢占优先级, 4 位响应优先级
1 110 1: 3 1 位抢占优先级, 3 位响应优先级
2 101 2: 2 2 位抢占优先级, 2 位响应优先级
3 100 3: 1 3 位抢占优先级, 1 位响应优先级
4 011 4: 0 4 位抢占优先级, 0 位响应优先级
3. 数值越小所代表的优先级就越高。
4.:第一,如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行;
第二,高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。而抢占优先级相同的中断,高优先级的响应优先级不可以打断低响应优先级的中断。
6.使能串口
这个没啥说的,不使能你死活用不了。
7.开启串口中断
比如在接收到数据的时候(RXNE 读数据寄存器非空),我们要产生中断,那么我 们开启中断的方法是:
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启中断,
我们在发送数据结束的时候(TC,发送完成)要产生中断,那么方法是: USART_ITConfig(USART1,USART_IT_TC,ENABLE);
8.获取相应中断状态。
当我们使能了某个中断的时候,当该中断发生了,就会设置状态寄 存器中的某个标志位。
比如我们使能了串口发送完成中断,那么当中断发生了, 我们便可以在中断处理函数中调用这 个函数来判断到底是否是串口发送完成中断,方法是:
USART_GetITStatus(USART1, USART_IT_TC)
((IT) == USART_IT_PE) || ((IT) == USART_IT_TXE) ||
((IT) == USART_IT_TC) || ((IT) == USART_IT_RXNE) ||
返回值是 SET,说明是串口发送完成,中断发生。
7.编写中断函数
!!!!这个很重要,一点一点慢慢讲
中断函数一般格式是
void USART1_IRQHandler(void)
使用串口一就要写成T1,2就是T2。
发送
STM32 库函数操作 USART_DR 寄存器发送数据的函数是:
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);
通过该函数向串口寄存器 USART_DR 写入一个数据。
读取
STM32 库函数操作 USART_DR 寄存器读取串口接收到的数据的函数是:
uint16_t USART_ReceiveData(USART_TypeDef* USARTx);
通过该函数可以读取串口接受到的数据

     Res=USART_ReceiveData(USART1);//接受数据Res=对用串口发送的数据b=Res;USART_SendData(USART1,b);//发送数据,发送数据b

发送和读取都要建立在判别串口状态的基础上
这里介绍下串口状态
RXNE(读数据寄存器非空),当该位被置 1 的时候,就是提示已经有数据被接收到了,并 且可以读出来了。
TC(发送完成),当该位被置位的时候,表示 USART_DR 内的数据已经被发送完成了。

例如我们要判断读寄存器是否非空(RXNE),操作库函数的方法是: USART_GetFlagStatus(USART1, USART_FLAG_RXNE);
我们要判断发送是否完成(TC),
操作库函数的方法是:
USART_GetFlagStatus(USART1, USART_FLAG_TC);
判定他们是否为零来确定串口状态。

总结

1.参考正点原子的教程
2.讲解的不好,配置有一个可用的用蓝牙控制跑马灯的基础调试代码
!!!!

补充

手机蓝牙发送 a 模式非Hex
实际上是0x61 ‘a’
经过调试发现,有时候发送的是乱码,把模式调成非Hex就好了

发送的是1 收到0x31 我把代码传上去供有需要的朋友下载
。。。。
本人比较懒,最近会一直更新些32的使用,,,至于之前没写完的,,,以后有时间补充,32写完打算再写个树莓派舵机控制的飞思卡尔小车

不知道为啥。。。。F4就不会乱码,,,这个我也很纳闷。。。
F4代码请看我之前的蓝牙篇

欢迎各位一起来讨论

Stm32 基于蓝牙的串口通信 详细篇相关推荐

  1. 基于串口助手的STM32与计算机进行串口通信

    基于串口助手的STM32与计算机进行串口通信 序 言 一. 串口通信概述 二.项目说明 三.实战过程 1)实现stm32向上位机发送字符 2)实现stm32发和收 3)Keil中针对stm32系统进行 ...

  2. STM32平台的USART串口通信

    本文目的是编写stm32串口通信程序,实现stm32上电自动循环发送hello LYJ!!!,并可通过上位机控制stm32串口发送与否.通过亲自做一下USART串口通信实验,学习如何使用stm32平台 ...

  3. Matlab 与stm32单片机之间的串口通信

    Matlab 与stm32单片机之间的串口通信 在我们用stm32做信号处理时,我时常需要用到Matlab对我们采集的数据进行分析,拟合.按照传统的方法,我们一般都会先将数据通过串口助手打印出来,再导 ...

  4. 基于FPGA Uart串口通信实验

    基于FPGA Uart串口通信实验 首先需要了解uart串口通信协议,根据个人专业需求不同,了解的层面可以不同. UART简介 通用异步收发传输器(Universal Asynchronous Rec ...

  5. Android 蓝牙BLE串口通信之高低位转换、16进制字符串转换float浮点型

    蓝牙技术的普及与发展,为传统设备提供了一种低成本无线通信的方式.串口作为一种使用广泛的通信接口,通过串口转蓝牙,进行无线通信传输的需求逐渐展现出来. 蓝牙串口模块是嵌入式设备上的常用模块,它可以方便地 ...

  6. 基于Windows的蓝牙虚拟串口通信

    一.枚举本地蓝牙设备 /******************************************************************************\ 枚举本地所有蓝牙 ...

  7. stm32中断方式的串口通信——上位机控制串口收发

    文章目录 前言 一.什么是串口通信 二.什么是中断--STM32 1.中断的概念 2.STM32下NVIC的介绍 3.中断优先级的介绍 4.外部中断的介绍 三.串口通信keil工程文件 1.新建工程模 ...

  8. 基于VC++开发串口通信的方法

    串行通信中的关键是串行通信设备的初始化.数据的发送和接收及其实现方式. 在Dos环境下,用户可以直接对通信设备编程,可以通过查询中断的方式使用通信设备.但是Windows不提倡应用程序直接控制硬件,而 ...

  9. STM32CubeIDE开发(二十二), stm32的RS485/232串口通信开发要点

    一.stm32串口通信 stm32串口通信一般是指通过UART(Universal Asynchronous Receiver/Transmitter)通用异步收发传输器传输数据,UART 作为异步串 ...

  10. STM32常用协议之串口通信详解

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.相关理论概念 1.1 通信基本概念 1.1.1 串行/并行 1.1.2 单工/半双工/全双工 1.1.3 同步/异 ...

最新文章

  1. Python_编写UDP通信编解码类、文件的上传、远程执行命令、黏包
  2. Spring MVC 常用Jar包官方下载地址(官方Maven仓库)
  3. 表头合并_多个Excel表格合并数据麻烦?试试Power Query轻松帮你解决
  4. Python 一键转 Java?“Google 翻译”你别闹
  5. 年化收益17.1%!这个看基本面长线炒股的AI有点厉害
  6. vue 大概流程(未完)
  7. python计数循环,python - Python中的密码求解器循环计数 - SO中文参考 - www.soinside.com...
  8. matlab如何动态输出很长的图片,Qt实现长图片的放大缩小以及动态显示
  9. 【Python爬虫】获取全国客运列车车次及起讫站点位置信息
  10. CodeForces比赛规则
  11. 用python扑克随机发牌_python:扑克牌发牌程序
  12. 微信 css3动画失效,css3 动画效果在微信中无效
  13. 【转】艺术设计、数字媒体、环艺、影视动画、摄影、广编专业…等…视频、教程、资讯、图库、作品汇总大全
  14. 华三模拟器启动设备失败【启动设备MSR36-20_1失败】
  15. 关于我使用校园网电脑被限速成10M宽带的悲惨教训
  16. LBS 是什么服务?
  17. TiDB+TiSpark部署--安装,扩缩容及升级操作
  18. 新程序猿如何度过试用期
  19. Nexus 07 制品库制品晋级实践
  20. Matlab 定点化函数fi

热门文章

  1. matlab cplex使用
  2. 硬件nat关闭还是开启_今天才发现,路由器中的硬件NAT加速能提升20%网络带宽
  3. 程序员面试宝典及Java面试题解析2021年
  4. onlinephototool免费在线图片处理器
  5. python-万年历
  6. 软件项目投标流程及注意事项
  7. 联想e470锁定计算机,thinkpad如何锁定键盘_联想thinkpad键盘锁怎么操作-win7之家
  8. ANDROID框架揭秘pdf
  9. “程序员的理财计划”-待完善
  10. 踩坑记录——ProxyServer删除问题经验分享