STM32的串口通信——HAL库

news2024/9/22 5:26:57

TTL串口

TTL串口仅仅需要两根数据线就可以进行串口通信:

①一条是从A设备发送的IO口连接到B设备的接收IO口

②一条是从B设备发送的IO口连接到A设备的接收IO口

③共地(GND)是两个设备通信的前提(保证他们的电平标准一致)

操作步骤:

①新建文件——命名为serial

②找到USART2,将串口模式改为TTL模式——即Asynchronous(异步模式)

③配置小灯的GPIO口:

④生成代码后:我们可以看到初始化串口的函数

编写代码:

因为我们在串口发送的时候需要发送字符,因此我们要加上头文件:

代码:

 MX_GPIO_Init();
  MX_USART2_UART_Init();
  /* USER CODE BEGIN 2 */
  //char message[]="Hello World!";
  uint8_t receiveData[2];

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	  //HAL_UART_Transmit(&huart2, (uint8_t*)message, strlen(message), 100);
	  //HAL_Delay(1000);
	  HAL_UART_Receive(&huart2, receiveData, 2, HAL_MAX_DELAY);
	  HAL_UART_Transmit(&huart2, receiveData, 2, 100);
	  GPIO_PinState state =GPIO_PIN_SET;
	  if(receiveData[1]=='0')
	  {
		  state = GPIO_PIN_RESET;
	  }
	  else if(receiveData[1]=='1')
	  {
		  state = GPIO_PIN_SET;
	  }
	  if(receiveData[0]=='R')
	  {
          HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, state);
	  }
	  else if(receiveData[0]=='G')
	  {
          HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, state);
	  }
	  else if(receiveData[0]=='B')
	  {
          HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, state);
	  }
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

 定义串口接收缓冲区,数组大小为2

// 串口接收缓冲区
uint8_t rx_data[2];

代码详解:

1. while (1)
这是一个无限循环,代码会一直在这个循环内运行。常用于嵌入式系统中,确保程序不断执行。

2. HAL_UART_Receive(&huart2, receiveData, 2, HAL_MAX_DELAY);
该行代码通过UART接收2个字节的数据,将其存储到 `receiveData` 缓冲区中。
HAL_MAX_DELAY表示函数将一直阻塞,直到接收到2个字节的数据。

3. HAL_UART_Transmit(&huart2, receiveData, 2, 100);
该行代码将接收到的数据通过UART原样发送回去,用于回显

4. GPIO_PinState state = GPIO_PIN_SET;
这里定义了一个 `GPIO_PinState` 类型的变量 `state`,初始值为 `GPIO_PIN_SET`(高电平)。

5. if(receiveData[1]=='0')
该行代码检查 `receiveData[1]` 是否等于字符 '0'。如果是,将 `state` 设置为 `GPIO_PIN_RESET`,即低电平。这表示如果接收到的第二个字节是 `'0'`,LED灯将被关闭。

6. else if(receiveData[1]=='1')
该行代码检查 `receiveData[1]` 是否等于字符 '1'。如果是,将 `state` 设置为 `GPIO_PIN_SET`,即高电平。这表示如果接收到的第二个字节是 '1',LED灯将被打开。

7. if(receiveData[0]=='R')
该行代码检查 receiveData[0]是否为字符 'R',如果是,表示控制红色LED灯。
HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, state);`根据前面设置的 `state` 值,控制红色LED引脚的状态(高电平点亮,低电平熄灭)。

调试:

使用B站UP主keysking写的波特律动 串口助手

网址:

波特律动 串口助手 (baud-dance.com)

编写时遇到的问题:

芯片自锁:STlink烧录一次后就无法在进行烧录,这种情况一般为芯片自锁

解决方法详细参考这篇文章:

STlink烧录一次后就无法在进行烧录解决办法_stm32烧录一次后便无法烧录-CSDN博客

与此同时:在问题解决之后,我们最好是把SYS中Debug配置为Serial Wire

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

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

相关文章

使用css如何获取最后一行的元素?使用css解决双边框问题

一、项目场景: 在小程序上需要实现一个如下图的ui效果图 需要满足以下条件 一行放不下 自动换行最后一行或者只有一行时,文字底部不能有线 二、初版实现 按照上面的要求,最开是的实现代码如下 我是给每一个元素都添加了一个下边框&#x…

Python酷库之旅-第三方库Pandas(095)

目录 一、用法精讲 406、pandas.DataFrame.index属性 406-1、语法 406-2、参数 406-3、功能 406-4、返回值 406-5、说明 406-6、用法 406-6-1、数据准备 406-6-2、代码示例 406-6-3、结果输出 407、pandas.DataFrame.columns属性 407-1、语法 407-2、参数 407-3…

楼顶气膜羽毛球馆:城市健身新空间—轻空间

随着城市化进程的加快,城市土地资源愈发紧张,如何高效利用有限的空间成为一大挑战。楼顶气膜羽毛球馆作为一种创新的体育场馆建设方式,凭借其独特的优势,逐渐成为城市健身的新宠。它不仅有效利用了楼顶闲置空间,还为市…

新160个crackme - 039-eKH.1

运行分析 需要破解Name和Serial,写出注册机 PE分析 - Delphi程序,32位,无壳 静态分析&动态调试 ida搜索关键字符串,跳转到关键代码 静态分析,修改变量如上,关键在于sub_427A20函数返回值需要大于等于1…

“双指针”算法下篇

WeChat_20240806081335 对双指针这一思想在OJ 里面的相关应用,感兴趣的友友们,可以看下此篇博客 https://blog.csdn.net/X_do_myself/article/details/141291451?spm1001.2014.3001.5502 目录 一盛最多水的容器 1题目链接:盛最多水的容器…

EmguCV学习笔记 VB.Net 6.5 凸包和凸缺陷

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

sgsegse

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话: 知不足而奋进,望远山而前行&am…

货车制造5G智能工厂工业物联数字孪生平台,推进制造业数字化转型

货车制造5G智能工厂工业物联数字孪生平台,推进制造业数字化转型。随着5G技术的飞速发展与工业物联网的深度融合,货车制造5G智能工厂工业物联数字孪生平台应运而生,它不仅重新定义了生产模式,更以强大的技术驱动力,推动…

开放世界目标检测:检测区分出未知物体

开放世界目标检测:检测区分出未知物体 01 Abstract 开放世界目标检测旨在识别未见过类别的目标,并在提供注释后逐步识别这些目标。与传统的只限于预定义类别的范式不同,这种设置承诺通过使用与类别无关的信息来持续且通用地估计目标性。然而…

Java码农35岁之后只能送外卖?

声明:此篇为 ai123.cn 原创文章,转载请标明出处链接:https://ai123.cn/2208.html Hey,Java界的小伙伴们,有没有感受到互联网行业这一场没有硝烟的“代际战争”?🤖💥 关于“35岁后只…

配电房挂轨机器人巡检系统的主要优点包括

背景 配电房是724h工作的封闭环境,人工巡检无法在时间上和空间上对配电室进行全量监控。有限的巡检时间,必然带来设备运转的黑盒时间,设备故障和隐患无法及时监控与消缺。因而不可避免存在漏检、误检的情况,不仅容易隐藏电力系统…

AI Agent产品经理血泪史:一年来我摸过的那些石头【Tools篇】

前几天刚好看到一篇关于GPT-6的报道,才想起来还有这麽回事情,于是赶紧把草稿捞出来改改交个任务。 至于为什麽贴这张图,以及为什麽血泪史从Tools开篇。 那是因为你看,即使到了GPT-6的时代,Tools仍然是AI Agent落地的…

ElementPlus下拉框输入框对齐问题

1.问题 2.解决方法 2.1label-width 说明:el-form中label-width设置为auto 2.2 label-wdith固定值 说明:如果在el-form-item里面设置了label-width"100px";采用宫格布局。 .demo-one{display: grid;grid-template-columns: repe…

C++:vector篇

前言: 本篇仅介绍vector中常用的函数接口,如果需要详细的请到官网查看。 vector是一种动态数组,能够自动调整大小。与数组类似,vector使用连续内存来存储元素,允许高效访问,但可以动态增加容量。为了应对容…

买了服务器后如何正确挂载数据盘|什么是系统盘,什么是数据盘

一、前言 我们买了服务器后,一般会再买一个数据盘,如果没有数据盘,万一服务器系统出现问题后数据丢失就完了,什么数据都没了,所以为了避免意外的发生,我们通常会再买一个数据盘 如上图,我就在…

差一点通关某公司面试靶场

没有web4和web8,web2的4没做出来。 web1 国光ssrf改版靶场 1 直接读取flag 3 使用file协议读取hosts IP为172.18.240.5 dict探针内网主机开启常见端口 172.18.240.1:80 172.18.240.5:3306 172.18.240.1:3306 172.18.240.5:80 172.18.240.5:8080 172.18.240.1:…

RocketMQ Dashboard

rocketmq-dashboard是一个可视化查看和管理RocketMQ消息队列的工具 官方地址:RocketMQ Dashboard | RocketMQ 1、点击下载源码 2、下载并解压,切换至源码目录rocketmq-dashboard-1.0.0 3、修改配置文件 4、编译 rocketmq-dashboard打成jar包 &#xf…

【2024最新】注册Github账号图文教程

GitHub 是一个全球最大的开源代码托管平台,它提供了基于 Git 的版本控制和协作功能,使开发者能够共享、管理和协作开发项目。用户可以创建、克隆、编辑代码,并通过分支、合并请求等工具进行协同工作。GitHub 还提供社区交流、项目管理和代码审…

qt圆环饼状图,非常小的窗口都能显示

非常小的窗口都能显示 QT core gui charts#include <QtCharts> using namespace QtCharts;//创建饼状图 void MainWindow::createpieSewies() {//饼状图QPieSeries * my_pieSeries new QPieSeries();//中间圆与大圆的比例my_pieSeries->setHoleSize(0.35);//…

Spring MVC、Spring Boot和Spring Cloud

一、Spring MVC 主要特点 传统的基于Servlet的Web框架: 需要手动配置Servlet、Filter等。 配置灵活: 可以使用XML或Java类来定义Bean和依赖关系。 依赖于Web容器: 需要部署到外部Web容器&#xff08;如Tomcat、Jetty&#xff09;中运行。 视图技术支持: 支持JSP、Thymelea…