STM32CubeMX学习记录——串口通信(含蓝牙通信)

news2024/9/23 11:14:53

文章目录

  • 一、学习目的
  • 二、CubeMX配置
  • 三、代码编写

一、学习目的

        串口通信是一种简单且广泛应用的通信方式。本文的学习目标是通过CubeMX工具配置串口通信,并编写相应代码,以实现串口助手打印信息以及蓝牙通信等功能。

二、CubeMX配置

(1)首先打开CubeMX软件,新建工程。有关软件使用以及新建工程的相关操作在之前的文章中已经有过记载,有需要可以查看以下文章:蓝桥杯嵌入式学习记录——点亮第一个LED(含软件的使用)_蓝桥杯嵌入式led-CSDN博客

(2)进入如下界面后,先点击System Core > RCC时钟选项,如图步骤所示打开高速时钟设置

(3)再点击SYS >Debug ,选择串口通信方式

(4)接着按照下图步骤修改时钟参数,以下提供修改后的参数图:

(5)接下来就可以开始配置串口信息了,点击进入左侧的Connectivity > USART2,选择模式为Asynchronous,设置波特率为9600(可以根据需要自行设置)

(6)如图所示,打开串口中断设置

至此,CubeMX上的串口配置已经完成,接下来按照以下步骤生成工程文件代码即可

(1)给工程文件命名 > 选择编辑器

(2)选择生成文件类型 > 生成文件

三、代码编写

        CubeMX的配置完成之后,就可以打开工程文件进行代码编写了

(1)串口输出

        例如最常见的,printf输出到串口,就需要将fputc里面的输出指向串口(重定向),即将以下代码添加到自动生成的usart.c中就行

#include "stdio.h"

//标准库需要的支持函数                 
struct __FILE 
{ 
	int handle; 
}; FILE __stdout;  
     
//定义_sys_exit()以避免使用半主机模式    
void _sys_exit(int x) 
{ 
	x = x; 
} 
//重定义fputc函数 

int fputc(int ch, FILE *f)
{      
	while((USART2->SR&0X40)==0);//循环发送,直到发送完毕   
    USART2->DR = (uint8_t) ch;      
	return ch;
}

        需要注意的是,一定不要忘记添加stdio.h库,添加完以上代码后,在主函数中添加usart.h和stdio.h库后就可以直接通过printf函数打印串口信息了

(2)串口接收

        例如通过蓝牙控制(串口助手同理)时,希望单片机接收到我们发送的信息并执行相应操作,这时需要开启串口中断(也有别的办法,这里暂时只记录串口中断),可以通过以下函数开启串口中断:

#define rxDataLen 1 //接收一个字节的数据
char rxBuffer[rxDataLen]; // 存储接收到的数据的数组

HAL_UART_Receive_IT(&huart2, (uint8_t *)rxBuffer, rxDataLen); //使能串口中断

        注意别忘记定义接收的字节变量和储存变量的数组哈,开启串口中断之后就可以编写中断服务函数(回调函数),模板如下:

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) 
{
    if(huart == &huart2) // 如果是串口2
    {
			if(rxBuffer[0] == '1')
			{
				  //操作1
			}
			if(rxBuffer[0] == '2')
			{
				  //操作2
			}
          //返回接收的信息
//        HAL_UART_Transmit_IT(&huart2, (uint8_t *)rxBuffer, rxDataLen); 
    }
    // 使用HAL_UART_Receive_IT()时,只会进入一次中断。因此需要在回调函数内再次调用该函数
    HAL_UART_Receive_IT(&huart2, (uint8_t *)rxBuffer, rxDataLen);
}


至此,关于CubeMX的串口配置就记录完成了

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

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

相关文章

docker容器常用指令,dockerfile

docker:容器,主要是解决环境迁移的问题,将环境放入docker中,打包成镜像。 docker的基本组成:镜像(image),容器(container),仓库(repository)。镜像相当于类,容器相当于类的实例对象…

0基础深度学习项目12:基于TensorFlow实现彩色图片分类

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 目录 一、创建环境二、前期准备2.1 设置GPU2.2 导入数据2.2.1 在TensorFlow框架中导入CIFAR-10数据集2.2.2 数据归一化 2.3数据可视化 三、构建简单的CNN网络&…

kubernetes集群部署oracle 11g数据库服务

背景: 因业务上线需要,研发中心要求在kubernetes测试集群部署一个oracle 11g的数据库,用于业务功能调试。 一、实施部署oracle 11g数据库: 1、拉取oracle 11g的镜像: [rootharbor-02 ~]# docker pull registry.cn-h…

Java之MySQL

1、数据库三大范式 每个字段不可再分,不冗余 非主键字段完全依赖于主键 2、drop 删除整张表,不可回滚;delete删除部分数据行;truncate保留表 删除所有数据 3、innodb存储引擎 支持行级锁、表级锁 支持事务 支持异常奔溃后的安…

拓普壹的选品师项目怎么操作更好?

在拓普壹的选品师项目中,成功的关键在于精细化的操作和系统化的策略。这不仅要求选品师具备深厚的自身能力,还需要明智的选择平台和有效利用新技术。本文将从这三个方面探讨如何更好地操作拓普壹选品师项目。 1. 自身能力培养 选品师的核心任务是从众多商…

SPRING07_自动装配如何加强、@Autowired注解debug分析、总结

文章目录 ①. Spring启动一行代码:②. ApplicationContex增强功能③. 自动装配如何装配进来④. Autowired自动注入细节xml版⑤. Autowired注解版分析⑥. 总结一下 ①. Spring启动一行代码: ①. 创建一个IOC容器,传入容器的xml配置文件,Spring在整个创建容器的过程中全部都准备…

Docker安装达梦数据库详细教程

达梦数据库(DM,Dameng Database)是中国自主研发的关系型数据库管理系统。它由武汉达梦数据库有限公司开发,最早可以追溯到1982年,至今已有几十年的发展历史。达梦数据库在中国市场上具有较高的知名度和市场占有率,特别是在政府、金融、电信、能源等行业有广泛的应用。 自…

深度学习——神经网络(neural network)详解(一). 带手算步骤,步骤清晰0基础可看

深度学习——神经网络(neural network)详解(一). 带手算步骤,步骤清晰0基础可看 我将以最简单,基础的形式说明神经网络的训练过程。 搭配以下文章进行学习: 深度学习——卷积神经网络&#xf…

Day18 Linux系统编程学习--文件

文件 (file) 是程序设计中一个重要的概念。所谓“文件”一般指存储在外部介质上数据的集合。C语言把文件看作是一个字符(字节)的序列,即由一个一个字符(字节)的数据顺序组成。根据数据的组织形式,可分为 AS…

【森气随笔】python绘图找不同,揭秘不同函数绘图差异。

【森气随笔】python绘图找不同,揭秘不同函数绘图差异。 准备了两组图片,运用了不同绘图函数绘制。然而,令人无语的是,有人竟直言不讳地表示难以察觉其中的差别。非常好奇,是差异太小还是不愿意承认呢?感兴趣…

Linux-服务器硬件及RAID配置实验

系列文章目录 提示:仅用于个人学习,进行查漏补缺使用。 1.Linux介绍、目录结构、文件基本属性、Shell 2.Linux常用命令 3.Linux文件管理 4.Linux 命令安装(rpm、install) 5.Linux账号管理 6.Linux文件/目录权限管理 7.Linux磁盘管理/文件系统 8.Linu…

利用shell脚本一键查询ceph中bucket桶的占用大小

在 Ceph 对象存储中(例如使用 RADOS Gateway 提供的 Swift 或 S3 接口),你可能需要了解某个桶(bucket)的占用大小。 以下是如何在 Ceph 中查看桶的占用大小的方法: 1. 使用 radosgw-admin 工具 radosgw-a…

2024最新整理Python基础知识点汇总(可下载)期末复习必备!

前言 由于篇幅限制,我把所有的Python基础知识点和实战代码全部打包上传至CSDN官方认证的微信上,需要的同学可以自取!下载保存在你自己的电脑上(保证100%免费) 1 变量和简单数据类型 变量命名格式:变量名 …

Linux-Shell管道命令及脚本调试-06

上一章我们讲了一半的管道命令,今天把剩下的讲完 1、管道命令 字符转换命令 tr, col, join, paste, expand 1.1 tr 一种可将字符进行替换、压缩、删除,可以将一组字符转换成另一组字符 格式; tr [-parameter] [string1] [string2] 参数: 参数说…

vs2019 QtConcurrent多线程使用方法

QtConcurrent::run(xxx) 1.打开QT Project Setting-》点击Qt Modules 2.头文件包含&#xff1a; #include <QtConcurrent/QtConcurrent> 3.使用方法&#xff1a; QFuture<void> future1 QtConcurrent::run(this, &auto_pack_line_demo::UpdateVisionComm)…

漏洞复现-Apache Kafka Clients JNDI注入漏洞 (CVE-2023-25194)

1.漏洞描述 Apache Kafka 是一个开源分布式事件流平台&#xff0c;被数千家公司用于高性能数据管道、流分析、数据集成和任务关键型应用程序。 在版本3.3.2及以前&#xff0c;Apache Kafka clients中存在一处JNDI注入漏洞。如果攻击者在连接的时候可以控制属性sasl.jaas.conf…

今是科技携手福瑞莱,共筑环境微生物检测技术创新与发展

近日&#xff0c;成都今是科技有限公司&#xff08;以下简称“今是科技”&#xff09;与福瑞莱环保科技&#xff08;深圳&#xff09;股份有限公司&#xff08;以下简称“福瑞莱”&#xff09;正式宣布达成深度战略合作。此次合作旨在将双方的优势资源与技术力量相结合&#xf…

再见,Midjourney | FLUX 彻底改变了 AI 图像游戏

Flux 刚发布一周&#xff0c;大家都疯了&#xff01; 因为真的是分不清是AI还是真实啊&#x1f3f4;‍☠️ Flux生成 Flux生成 FLUX 彻底改变了 AI 图像游戏。 02 黑深林 Black Forest Labs由Stable Diffusion模型的原班人马创立&#xff0c;旨在开发并开源高质量的图像和…

无字母数字_$ webshell之命令执行

题解分析&#xff1a; 代码案例 当然&#xff0c;这道题的限制&#xff1a; webshell长度不超过35位 不包含字母数字&#xff0c;还不能包含$和_ 所以&#xff0c;如何解决这个问题&#xff1f; shell下可以利用.来执行任意脚本 Linux文件名支持用glob通配符代替 第一点.…

Java语言程序设计基础篇_编程练习题**16.19(控制一组风扇)

**16.19&#xff08;控制一组风扇&#xff09; 编写一个程序&#xff0c;在一组中显示三个风扇&#xff0c;有控制按钮来启动和停止整组风扇&#xff0c;如图16-44所示。 习题分析 要完成这道题目&#xff0c;需要将16.18中的代码变成一个自定义面板(继承自BorderPane)&#…