HAL库STM32CUBEMX学习记录(一)——USART(串口中断收发数据)

这篇具有很好参考价值的文章主要介绍了HAL库STM32CUBEMX学习记录(一)——USART(串口中断收发数据)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、首先使用STM32CUBEMX新建一个工程

二、打开工程文件

1.在usart.c中添加以下代码

/* USER CODE BEGIN 0 */
#include "stdio.h"
#include "string.h"
uint8_t aRxBuffer;//数据缓存
char USART_RX_BUF[USART_REC_LEN];//接收到的数据
uint16_t USART_RX_STA;//接收标志位


//printf函数重定向
int fputc(int ch,FILE *f)
{
	
    HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,0xFFFF);
	return ch;
}
int fgetc(FILE *f)
{
	uint8_t ch=0;
    HAL_UART_Receive(&huart1,&ch,1,0xFFFF);
	return ch;
}
/* USER CODE END 0 */

 2.然后在最后面加入中断回调函数

/* USER CODE BEGIN 1 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
 {
	UNUSED(huart);
	if(huart==&huart1)
	{
	if(USART_RX_STA<255)
			{
				USART_RX_BUF[USART_RX_STA ++]=aRxBuffer ;
				if((USART_RX_BUF[USART_RX_STA -1]==0x0A)&&(USART_RX_BUF[USART_RX_STA -2]==0x0D))
				{
					HAL_UART_Transmit(&huart1 ,(uint8_t *)&USART_RX_BUF ,USART_RX_STA,0xFFFF);
					USART_RX_STA=0;
					memset(USART_RX_BUF,0x00,sizeof (USART_RX_BUF));
				}
			}
	 else
			 {
				USART_RX_STA=0;
				memset(USART_RX_BUF,0x00,sizeof(USART_RX_BUF));
				HAL_UART_Transmit(&huart1,(uint8_t *)"数据已满",10,0xFFFF);
		    }
			HAL_UART_Receive_IT(&huart1 ,(uint8_t *)&aRxBuffer ,1);	   
 }
}
/* USER CODE END 1 */

3.在usart.h文件中加入

/* USER CODE BEGIN Includes */
#define USART_REC_LEN 5000 //接收的数据范围
extern char USART_RX_BUF[USART_REC_LEN];
extern uint8_t aRxBuffer;
extern uint16_t USART_RX_STA;

/* USER CODE END Includes */

 4.新建一个cmd.c文件,创建命令check函数

/**********************************
*函数:USART1_Check(char *cmd)
*输入参数:命令字符串
*返回值:无
**********************************/
void USART1_Check(char *cmd)
{
	
		if(strcasecmp("LED OFF",cmd)==0) 
 {
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);
 }
		if(strcasecmp("LED ON",cmd)==0) 
 {
  HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);
 }
}
/****************END OF FILE************/

5.在mian函数中的while(1)循环中调用USART1_Check(USART_RX_BUF)函数

6.最后串口初始化函数后打开串口中断函数

SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 *              		
  HAL_UART_Receive_IT(&huart1 ,(uint8_t *)&aRxBuffer ,1);
	printf("Int is ok!\r\n");
  /* USER CODE END 2 */

注意:还要在keil中勾选

cubemx串口中断接收,stm32,单片机,学习

 

配置好了就可以进行串口收发数据了,并且可以通过串口助手来控制单片机LED灯亮灭文章来源地址https://www.toymoban.com/news/detail-596483.html

到了这里,关于HAL库STM32CUBEMX学习记录(一)——USART(串口中断收发数据)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • stm32使用HAL库配置串口中断收发数据(保姆级教程)

    最近在学习使用hal库,之前都是用标准库来写32代码,所以发个帖子记录一下学习过程,同时也希望能帮助到一些也在学习HAL库的同学。 接下来进入正题 串口中断是指当单片机收到一个串口数据时,单片机会产生一个中断信号,通知处理器中断服务程序去处理这个接收到的数

    2024年02月07日
    浏览(39)
  • 【STM32】STM32学习笔记-USART串口收发HEX和文本数据包(29)

    串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,因此大部分电子设备都支持该通讯方式, 电子工程师在调试设备时也经常使用该通讯方式输出调试信息。 在计算机科学里,大部分复杂的问题都可以通过分层来简化。如芯片被分为内核层和

    2024年01月19日
    浏览(46)
  • STM32CubeMX-HAL库-UART串口接收中断回调函数代码分析

            CubeMx中HAL库函数的调用不同于库函数调用,在学习CubeMx串口通信时,不理解HAL库中的回调函数是怎么被调用的,于是查看每个的定义,参考其他人写的博客,总算弄明白了HAL库中断调用与库函数不同之处。写下这篇博客一是加深自己的理解,二是希望对不理解HA

    2024年02月02日
    浏览(51)
  • 【STM32学习】——USART串口数据包&HEX/文本数据包&收发流程&串口收发HEX/文本数据包实操

    声明:学习笔记根据b站江科大自化协stm32入门教程编辑,仅供学习交流使用!

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

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

    2024年04月10日
    浏览(65)
  • stm32F407学习DAY.14 在DMA模式下进行USART串口数据收发(正点原子例程为例)

    目录 一、DMA配置 1、DMA1和DMA2的请求映射 2、DMA挂载总线 3、DMA相关库函数 ​4、DMA配置过程(以串口1为例) 1)进行时钟使能 2)等待DMA可配置 3)初始化DMA(串口1的TX为DMA2 数据流7 通道4,RX为DMA2 数据流5 通道4) a.DMA外设地址par: b.DMA存储器0地址mar: c.数据传输量ndtr: 4)

    2024年02月04日
    浏览(46)
  • STM32学习笔记(五)串口空闲中断+DMA实现不定长收发(stm32c8t6)

    记录一下学习过程 DMA DMA,全称为: Direct Memory Access,即直接存储器访问, DMA 传输将数据从一个 地址空间复制到另外一个地址空间。 这一过程无需cpu的参与,从而提高cpu使用的效率 DMA相关的参数:1 数据的源地址、2 数据传输的目标地址 、3 传输宽度,4 传输多少字节,5 传

    2024年02月14日
    浏览(43)
  • 【STM32笔记】STM32的串口数据收发基础(四)(USART DMA模式)

         在STM32中编写串口通信数据收发有三种方式: 轮询模式 (阻塞方式), 中断模式 (非阻塞方式)以及 DMA模式 。      打开STM32CubeMX,前部分配置流程如串口数据收发基础(三)节里一样。配置好USART1的基本参数,开启定时器中断后,接下来就要开启USART1的DMA。

    2024年02月03日
    浏览(38)
  • 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日
    浏览(52)
  • stm32cubemx hal学习记录:电机控制

    1、配置RCC、SYS,SYS的Timebase Source选择TIM6 2、配置USART1、时钟84MHz 3、激活FreeRTOS,选择CMSIS_V1,Config parameters种USE_TIMERS选择ENABLE 1、选用TIM3的编码器模式  2、驱动使用L298N,将PB6、PB7设置为输出模式  3、使用TIM2的CH1输出1kHz的PWM 1、设置两个软件定时器,一个用于总控制,一个

    2024年02月17日
    浏览(37)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包