STM32+CubeMX零基础串口收发全攻略

系列文章目录

第一章:初学单片机,使用STM32进行点灯



前言

本文主要是解决简单的串口通信


提示:以下是本篇文章正文内容,下面案例可供参考

一、使用到的装置和软件

本案例主要涉及到的装置和软件有:
1.一块STM32F103ZET6的开发板(也可使用其它板子)
2.ST-LINKV2(有钱的也可使用J-link等)一个与杜邦线若干
3.涉及到的软件有三个分别是:STM32CubeMX(用于生成文件),Keil uVision5(用于编程),XCOM V2.2(用于查看数据)

在这里插入图片描述

4.USB TO TTL(USB转TTL串口)
在这里插入图片描述

二、串口收发

1.STM32CubeMX配置

基本配置和第一章点灯案例一样(需要的可以在系列文章目录里面查看第一章),这里主要是对串口的配置:
串口配置如图所示:
在这里插入图片描述
Connectivity中UART(通用异步收/发器)、USART(通用同步/异步收/发器),从名字上可以看出,USART在UART基础上增加了同步功能,即USART是UART的增强型。

我这里使用的是USART1(由于本案例选择的是异步串口,所以选择UART也可),在选择好了Mode之后一般会自动选择引脚A10(RX)和A9(TX)(注意在连接单片机和计算机时,单片机的RXD接计算机的TXD,单片机的TXD接计算机的RXD)

在选好之后我们看下面协议的配置:
在这里插入图片描述
Baud Rate 波特率:如果想要稳定一点的话可以选择9600这些,想要快一点就可以选择115200
Word Length 字长(数据位和校验位的长度之和)
Panity 校验位:None是无校验,Even是偶校验,Odd是奇校验
Stop Bits 停止位

可以点击GPIO Settings查看是否是自己要配的串口:
在这里插入图片描述
我这里是PA9和PA10,如果要选择其它的串口可以鼠标左键单击右边芯片上的对应引脚进行选择。
然后我们就可以点击生成文件了

2.keil5的使用

(1)阻塞式收发

在main.c文件中写入代码:
在这里插入图片描述

		HAL_UART_Transmit(&huart1,(uint8_t*)"Hello",5,0xFFFF);//阻塞式发送函数,第一个参数存放串口一的所有数据,
		HAL_Delay(1000);

然后运行程序没有报错就使用USB TO TTL 将单片机与电脑连接并烧录程序

打开XCOM V2.2软件对数据进行监控
在这里插入图片描述
串口选择:一般会自动分配到所在串口,如果可以打开设备管理器查看:
在这里插入图片描述
在串口选择下面的选项要与前面在STM32CubeMX里设置的内容相同,然后打开串口,就可以接收到数据了(每隔一秒就会发送一句 Hello )。
在这里插入图片描述

使用printf()进行输出

还是在main.c文件中引入头文件
在这里插入图片描述

#include<stdio.h>

重写fputc()这个c标准库函数(printf()在c标准库函数实质是一个宏,实际是调用fputc()函数):
在这里插入图片描述

int fputc(int c,FILE *stream)
{
	uint8_t ch[1]={c};
	HAL_UART_Transmit(&huart1,ch,1,0xFFFF);
	return c;
}

先注释掉原来的语句,使用printf()输出
在这里插入图片描述
然后编译,没有报错就进行烧录。烧录完成之后就可以打开XCOM查看数据了:
在这里插入图片描述
如果此时查看不到,经检查没有出现硬件以及未复位的问题,就打开魔法棒,点击Target,勾选如下图所示选项:

在这里插入图片描述
然后重新进行烧录就能查看到结果了

发送数据

还是在main.c文件中写入代码:
在这里插入图片描述

uint8_t buf[5];
		HAL_UART_Receive(&huart1,buf,3,0XFFFF);
		HAL_UART_Transmit(&huart1,buf,3,0xFFFF);

然后重新进行烧录,点击XCOM,打开串口,在发送窗口输入要发送的字符串,然后点击右边的发送按钮,在接收窗口就能看见单片机返回的字符串。
在这里插入图片描述

(2)中断式收发

要使用中断式收发,先要在stm32cubemx里面将串口中断打开:
在这里插入图片描述
然后再重新生成代码

将数组定义成全局变量:
在这里插入图片描述

uint8_t buffer[5];

再写一个回调函数,将接收到的数组发送回去并开启下一次的接收:
在这里插入图片描述

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	HAL_UART_Transmit_IT(&huart1,buffer,3);
	HAL_UART_Receive_IT(&huart1,buffer,3);
	
}

将第一次触发中断的语句放在while(1)之前
在这里插入图片描述

HAL_UART_Receive_IT(&huart1,buffer,3);

后续的串口操作都是由中断来进行的,此时while(1)中没有其它函数,我们可以在while(1)中编写其它的逻辑,基本不受串口影响。
对程序进行运行和烧录,我们打开串口随便发送三个字符,可以看到字符成功的被返回回来了。
在这里插入图片描述


总结

以上便是串口的使用攻略了,除此之外还可以使用MDA方式进行收发,这里就暂时不进行讲解了。

  • 25
    点赞
  • 137
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
STM32CubeMX中进行串口通信接收的步骤如下: 1. 打开XCOM V2.2软件并选择串口:一般情况下,软件会自动分配到所在串口。你也可以打开设备管理器查看串口分配情况。 2. 在串口选择下面的选项要与之前在STM32CubeMX中设置的内容相同。 3. 打开串口,这样你就可以接收到数据了。每隔一秒钟,你会收到一句 "Hello"。 4. 使用printf()函数进行输出。 在串口通信中,数据是按位发送和接收的。尽管串口通信速度较慢,但是它可以同时使用一根线发送数据和另一根线接收数据。串口通信协议规定了数据包的内容,包括起始位、主体数据、校验位和停止位。双方需要约定一致的数据包格式才能正常收发数据。常用的串口通信协议包括RS-232、RS-422和RS-485。\[2\] 在STM32CubeMX中,你可以使用HAL_UART_Transmit()函数来发送数据。该函数的参数包括UART_HandleTypeDef结构体指针、数据指针、数据大小和超时时间。\[3\] #### 引用[.reference_title] - *1* [STM32+CubeMX零基础串口收发全攻略](https://blog.csdn.net/qq_59509843/article/details/130269882)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [基于stm32CubeMX(Hal库)的stm32串口通信](https://blog.csdn.net/weird_j/article/details/120985941)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [STM32CubeMX实现串口通信](https://blog.csdn.net/qq_45945548/article/details/120984961)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值