最详细STM32,cubeMX串口发送,接收数据

这篇具有很好参考价值的文章主要介绍了最详细STM32,cubeMX串口发送,接收数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这篇文章将详细介绍 串口 发送数据,接受数据。


前言

  • 实验开发板:STM32F103C8T6。
  • 所需软件:keil5 , cubeMX 。
  • 实验目的:了解 串口的基础知识,掌握串口如何发送,接收数据 。
  • 实验:串口发送数据点亮 led。

一、串口的基础知识

如果想了解串口的基础知识可以参考我之前的文章:
STM32Cube串口USART发送接收数据
STM32CubeMX串口USART中断发送接收数据

二、cubeMX 配置

  1. 选择芯片,开始创建工程。
    stm32cubemx 串口发送函数,STM32F103C8T6教程,stm32,单片机,嵌入式硬件,USART,串口,cubeMX
  2. 设置 仿真。
    stm32cubemx 串口发送函数,STM32F103C8T6教程,stm32,单片机,嵌入式硬件,USART,串口,cubeMX
  3. 配置时钟,选择 HSE, 高速时钟。
    stm32cubemx 串口发送函数,STM32F103C8T6教程,stm32,单片机,嵌入式硬件,USART,串口,cubeMX
  4. 设置时钟频率。
    直接设置为 最大频率 72 ,然后双击 enter 即可。
    stm32cubemx 串口发送函数,STM32F103C8T6教程,stm32,单片机,嵌入式硬件,USART,串口,cubeMX
  5. 设置工程的名字,工具链选择 MDK。
    stm32cubemx 串口发送函数,STM32F103C8T6教程,stm32,单片机,嵌入式硬件,USART,串口,cubeMX
  6. 点击自动生成 .c / .h 文件。
    stm32cubemx 串口发送函数,STM32F103C8T6教程,stm32,单片机,嵌入式硬件,USART,串口,cubeMX
  7. 这里我使用串口2 ,USART2。然后选择异步模式。
    对于 USART2 可以是 同步也可以是异步。而 UART 只可以是 同步。
    stm32cubemx 串口发送函数,STM32F103C8T6教程,stm32,单片机,嵌入式硬件,USART,串口,cubeMX
  8. 点击 NVIC, 使能中断。stm32cubemx 串口发送函数,STM32F103C8T6教程,stm32,单片机,嵌入式硬件,USART,串口,cubeMX
  9. 设置 相关参数(波特率,数据长度,校验位,停止位)
    stm32cubemx 串口发送函数,STM32F103C8T6教程,stm32,单片机,嵌入式硬件,USART,串口,cubeMX
  10. 可以看到这里出现了两个 PA2, PA3 引脚,分别是 发送引脚,接收引脚。
    stm32cubemx 串口发送函数,STM32F103C8T6教程,stm32,单片机,嵌入式硬件,USART,串口,cubeMX
  11. 点击生成即可。
    这样就可以生成 keil 的工程文件。
    stm32cubemx 串口发送函数,STM32F103C8T6教程,stm32,单片机,嵌入式硬件,USART,串口,cubeMX

三、自动生成代码解析

使用 cubeMX 生成的 串口代码都放在 usart.c 中。

  1. 首先还是 先定义一个 串口对象,这是一个结构体。

  2. 初始化这个结构体中的相关参数。然后调用 HAL_UART_Init(&huart2) 对其初始化。

  3. 之后自动调转到HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) 执行。

  4. __HAL_RCC_USART2_CLK_ENABLE(); 开启串口 2
    由于 PA2, PA3 引脚,所以使用 __HAL_RCC_GPIOA_CLK_ENABLE();使能 gpio 端口。

  5. 配置引脚:
    这里 PA2 作为复用引脚(除了作为串口发送端,可能还具有其他的功能),它的工作模式 是GPIO_MODE_AF_PP复用推挽输出。

  6. HAL_NVIC_SetPriority(USART2_IRQn, 0, 0) 设置优先级
    HAL_NVIC_EnableIRQ(USART2_IRQn); 使能中断

stm32cubemx 串口发送函数,STM32F103C8T6教程,stm32,单片机,嵌入式硬件,USART,串口,cubeMX
stm32cubemx 串口发送函数,STM32F103C8T6教程,stm32,单片机,嵌入式硬件,USART,串口,cubeMX

四、串口发送数据函数

  1. 发送数据。串口发送数据有 2 种写法。(有无中断)

这里我主要介绍最后一个参数 超时时间 Timeout 。 当使用这个函数 发送数据时,如果超过该时间,则直接返回错误,不再执行该函数。

HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout)

以中断的方式发送数据。这里就不需要超时时间了。

HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size)
  1. 接收数据。
  • 开启串口中断接收函数:
    每次接收到数据后,都要再次开启中断接收函数。这样才可以多次接收数据
HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
  • 串口中断接收回调函数:
    当接收到数据时,就会调用该函数。
HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)

五、使用串口收发数据点亮 led

这里如果要点亮 led ,要在cubeMX 中配置 led 引脚。

uint8_t rx_buff = 0;									// 存放接收的数据


/* 每次接收到数据后都会调用该串口回调函数 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	if(huart == &huart2)
	{
		if(rx_buff == 0xa1)											// 发送 a1 点亮 led
		{
			printf("LED ON\r\n");								// 使用 printf 发送数据,需重定向 fputc 函数
			HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,GPIO_PIN_RESET);
		}
		else if(rx_buff == 0xa2)									// 发送 a2 熄灭 led
		{
			printf("LED OFF\r\n");
			HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,GPIO_PIN_SET);
		}
	}
	
	HAL_UART_Receive_IT(&huart2,&rx_buff,1);							// 再次开启接收
}

重定向函数:

发送数据,可使用 printf
由于 printf 依赖于 fputc 函数,所以可以重定向 fputc 来实现 printf 串口发送数据。

int fputc(int ch, FILE* f)
{
	while(HAL_UART_Transmit(&huart2,(uint8_t*)&ch,sizeof(ch)-1,300) != HAL_OK);
	return 0;
}

接收数据可以使用 scanf

int fgetc( FILE *f)       /* scanf 输入 */
{
	char c = 0;
	while(HAL_UART_Receive(&huart1, (uint8_t *)&c, 1, 300) != HAL_OK);
	return c;
}


总结

下一篇文章为大家介绍 STM32 超声波 模块的使用。文章来源地址https://www.toymoban.com/news/detail-756473.html

到了这里,关于最详细STM32,cubeMX串口发送,接收数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【STM32】CUBEMX之串口:串口三种模式(轮询模式、中断模式、DMA模式)的配置与使用示例 + 串口重定向 + 使用HAL扩展函数实现不定长数据接收

    目录   总览 使用CUBEMX创建工程的基本配置 CUBEMX中的配置 Keil中的配置 实物连接 串口轮询模式 轮询模式HAL库函数 特点 实验一:发送数据给单片机并让其返回相同值 串口重定向 串口中断模式 在CUBEMX中打开串口中断 中断模式HAL库函数 特点 实验二:使用中断回调完成实验一

    2024年04月10日
    浏览(75)
  • STM32 cubemx配置DMA+空闲中断接收不定长数据

    本篇文章给大家讲解一下DMA+串口空闲中断接收串口不定长数据,之前我们也是讲解过串口接收不定长数据的,那么本篇文章的话将使用DMA来接收不定长数据。 串口空闲中断是指在串口接收到数据后,在数据的传输结束之后,在一段连续的空闲时间内没有接收到新数据时触发

    2024年02月19日
    浏览(55)
  • STM-32:USART串口协议、串口外设—数据发送/数据发送+接收

    通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统。比如STM32芯片里面集成了很多功能模块,如定时器计数、PWM输出、AD采集等等,这些都是芯片内部的电路,它们的配置寄存器、数据寄存器都在芯片里面,操作简单,直接读写就行。但是有些功能STM32内部没有

    2024年02月04日
    浏览(65)
  • HAL库STM32CUBEMX学习记录(一)——USART(串口中断收发数据)

    一、首先使用STM32CUBEMX新建一个工程 二、打开工程文件 1.在usart.c中添加以下代码  2.然后在最后面加入中断回调函数 3.在usart.h文件中加入  4.新建一个cmd.c文件,创建命令check函数 5.在mian函数中的while(1)循环中调用USART1_Check(USART_RX_BUF)函数 6.最后串口初始化函数后打开串口中

    2024年02月16日
    浏览(45)
  • STM32CubeMX串口通讯

    根据通讯使用的电平标准不同, 串口通讯可分为 TTL 标准及 RS-232 标准 。而STM32的串口是TTL电平标准的。如果需要使用到RS-232则需要一个电平转换芯片。 讲到串口,我们还需要具备这些基础概念。 单工通讯 (1)单工通讯特点很简单,就是只有一个发送端,一个接收端。 从一

    2024年02月02日
    浏览(71)
  • STM32实现三个串口同时开启发送接收数据

            实现STM32开通三个串口,每个串口都可以实现接收和发送数据。          编程时,严禁在中断函数中写入发送串口数据代码,否则会出错,具体原因不清楚(有大佬知道的话帮我指出),可能原因是DR寄存器冲突导致。         RX,TX连接到A9,A10使用串口1,使

    2024年04月13日
    浏览(77)
  • STM32 Cubemx配置串口收发

    最近学到了串口收发,简单记录一下注意事项。 以使用USART1为例。 USART1需配置成 异步工作模式Asynchronous 。 并且 需要使能NVIC 。 我偏向于在stm32f1xx_it.c文件中对printf进行重定向,重定向函数如下。 同时需包含头文件路径#include “stdio.h” 在工程属性Target下, 勾选Use MicroLIB

    2024年02月10日
    浏览(54)
  • 【STM32 CubeMX】串口编程DMA

    在嵌入式系统中,串口通信是一项至关重要的功能,它允许单片机与外部设备进行数据交换,如传感器、显示器或其他设备。然而,在高速数据传输的场景下,传统的串口通信方式可能会使CPU过于繁忙,从而影响系统的性能。为了解决这一问题,STM32系列微控制器提供了DMA(

    2024年02月20日
    浏览(60)
  • STM32CubeMX 读取DS18B20温度传感器数据串口打印显示

    本文要做的所有工作标题基本都包括了,读取温度传感器的温度数值,再通过串口打印到串口助手; 好多博主大神的教程我按步骤做了之后总是出现程序不报错并且检测不到传感器的情况,后来找到原因并且修改后调试正常。 我用的是普中科技的实验板,主控芯片为STM3210

    2024年02月05日
    浏览(84)
  • STM32CubeMX实现USART串口通信

    硬件:stm32f103c8t6核心板 软件:STM32CubeMX 6.6.1 keil5 mdk 这里就不再详细介绍了,详细请参考上一篇博客: https://blog.csdn.net/qq_55894922/article/details/127232999?spm=1001.2014.3001.5501 若点击 Manage embedded software packages 后,出现失败,则需要随便点击其它任一选项,进行下载一些文件,比如点

    2023年04月17日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包