HAL库中断方式进行串口通信

这篇具有很好参考价值的文章主要介绍了HAL库中断方式进行串口通信。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

HAL库中断方式进行串口通信

版本:

软件:

STM32CubeMX:6.6.0
KEIl:5.37.0.0
FlyMcu:0.188
硬件:
STM32F103ZET6

1. 通过CubeMX配置项目

1.1 设置SYS

HAL库中断方式进行串口通信

1.2 设置RCC

HAL库中断方式进行串口通信

1.3 设置USART

HAL库中断方式进行串口通信

1.4 设置NVIC

HAL库中断方式进行串口通信

1.5 设置时钟

HAL库中断方式进行串口通信

1.6 创建项目

HAL库中断方式进行串口通信

HAL库中断方式进行串口通信

2. keil配置代码

2.1 printf函数设置

main.cusart.c中添加头文件#include "stdio.h"之后,勾选Target中的use MicroLIB,在mian.c文件中,添加如下代码,进行重定义

int fputc(int ch, FILE *f)
 
{
 
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
 
  return ch;
 
}

2.2 设置两个字符型数组和FLAG

main.c中设置两个字符型数组,用来存放需要判别的字符串(记得添加头文件#include "string.h")。同时设置FLAG标志变量,来判断电脑向stm32发送了哪一个字符串。

uint8_t aRxBuffer;		//接收中断
uint8_t Uart1_RxBuff[256]; //接收缓冲
uint8_t str1[1] = "g";
uint8_t str2[1] = "s";
uint8_t go[20] = "go stm32!";
uint8_t stop[20] = "stop stm32!";
uint8_t Uart1_Rx_Cnt = 0;	//接收缓冲计算
uint8_t cAlmStr[] = "数据溢出\r\n";
unsigned int flag = 1;

HAL库中断方式进行串口通信

2.2在main函数中设置接收中断

2.2.1 函数原型

HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

2.2.2 功能

串口中断接收,以中断方式接收指定长度数据。

  1. 大致过程是,设置数据存放位置,接收数据长度,然后使能串口接收中断。

  2. 接收到数据时,会触发串口中断。

  3. 再然后,串口中断函数处理,直到接收到指定长度数据

  4. 而后关闭中断,进入中断接收回调函数,不再触发接收中断。(只触发一次中断)

2.2.3 参数
UART_HandleTypeDef *huart UATR的别名
huart1 *pData 接收到的数据存放地址
Size 接收的字节数
2.2.4 在while前添加
HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1);

HAL库中断方式进行串口通信

2.3 main函数里while循环里面添加传输代码

while (1)
{
	if(flag == 1){		
	  		printf("Hello windows!\r\n");
		}
	HAL_Delay(1000);
}

2.4 在main函数下面重写中断处理函数

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	if(strcmp(Uart1_RxBuff, str1) == 0)
	{
			flag = 1;
			printf("start....\r\n");
		
	}
	if(strcmp(Uart1_RxBuff, str2) == 0)
	{
			flag = 0;
			printf("stop....\r\n");
		
	}
	if (strcmp(Uart1_RxBuff, go) == 0){
			flag = 1;
			printf("start....\r\n");
		
	}
	if (strcmp(Uart1_RxBuff, stop) == 0){
			flag = 0;
			printf("stop....\r\n");
		
	}
	if(Uart1_Rx_Cnt >= 255)  //溢出判断
	{
		Uart1_Rx_Cnt = 0;
		memset(Uart1_RxBuff,0x00,sizeof(Uart1_RxBuff));
		HAL_UART_Transmit(&huart1, (uint8_t *)&cAlmStr, sizeof(cAlmStr),0xFFFF);	
	}
	else
	{
		Uart1_RxBuff[Uart1_Rx_Cnt++] = aRxBuffer;   //接收数据转存
	
		if((Uart1_RxBuff[Uart1_Rx_Cnt-1] == 0x0A)&&(Uart1_RxBuff[Uart1_Rx_Cnt-2] == 0x0D)) //判断结束位
		{
			Uart1_Rx_Cnt = 0;
			memset(Uart1_RxBuff,0x00,sizeof(Uart1_RxBuff)); //清空数组
		}
	}
	
	HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1);   //再开启接收中断

}

HAL库中断方式进行串口通信

3. 编译

HAL库中断方式进行串口通信

4.烧录

HAL库中断方式进行串口通信

5.运行

HAL库中断方式进行串口通信

HAL库中断方式进行串口通信

6.总结

使用HAL库配置好相关引脚后,在生成的代码里可以很容易的实现中断控制串口通信,但是大量的函数需要自己查找,需要大量练习。

7. 参考文章

STM32利用中断实现LED亮灭和串口通信的收发_xxbiubiu的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-435381.html

到了这里,关于HAL库中断方式进行串口通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • HAL库 STM32运用DMA与IDLE中断实现高效串口通信 (附代码)

    最近想做一个控制电机的项目,其中会用到Pytho与单片机STM32之间的互同,最近也在看一些关于数据通信和拆包的相关知识,所以记录一下这段时间里对两者之间的互通所做的事情和发现的问题,以供自己和大家参考。 单片机的串口是我们常用的与电脑通信的外设,本次与P

    2024年01月22日
    浏览(54)
  • STM32-HAL库串口DMA空闲中断的正确使用方式+解析SBUS信号

    能够点进这篇文章的小伙伴肯定是对STM32串口DMA空闲中断接收数据感兴趣的啦,今天用这一功能实现串口解析航模遥控器sbus信号时,查阅了很多网友发布的文章(勤劳的搬运工~),包括自己之前写过一篇博客 STM32_HAL库_CubeMx串口DMA通信(DMA发送+DMA空闲接收不定长数据)。本文

    2024年02月09日
    浏览(64)
  • # STM32中断方式实现串口通信(标准库)

    主要任务 : 1)当stm32接收到字符“s”时, 停止持续发送 “hello windows!”; 当接收到字符“t”时, 持续发送 “hello windows!”; 2)当stm32接收到字符“stop stm32!”时,停止持续发送“hello windows!”; 当接收到字符“go stm32!”时,持续发送“hello windows!” 实验工具: (1)软件 标

    2024年02月11日
    浏览(32)
  • STM32F4_HAL库_串口阻塞/中断/DMA三种方式发送数据的配置

    串口阻塞发送的意思就是,发送一段数据,在没有发送完所有数据之前,一直停留在此发送函数(可设定阻塞时间),这个过程中会阻塞别的程序运行; HAL库的配置分为两个层次,一个是HAL库内部调用的、与MCU硬件相关的初始化xxx_MspInit,一个是我们外部调用的初始化xxx_In

    2023年04月25日
    浏览(49)
  • stm32串口通信(PC--stm32;中断接收方式;附proteus电路图;开发方式:cubeMX)

     单片机型号STM32F103R6: 最后实现的效果是,开机后PC内要求输入1或0,输入1则打开灯泡,输入0则关闭灯泡,输入其他内容则显示错误,值得注意的是这个模拟的东西只能输入英文 之所以用2个LED灯是因为LED电阻粗略一算就是100欧姆,所以懒得再去画其他的东西,真是天助我也

    2024年02月11日
    浏览(51)
  • c51单片机串口通信(中断方式接收数据)(单片机--单片机通信)示例代码 附proteus图

         单片机一般采用中断方式接受数据,这样便于及时处理 其中发送数据段采用的是查询方式,接收端采用了中断方式, 要注意的地方有: 在中断处理函数int_0()内,处理数据前要先关闭中断,否则中断可能会不断传过来, EA=0; 然后退出中断处理函数前恢复中断处理能力:

    2024年02月13日
    浏览(60)
  • STM32(HAL)串口中断接收

    目录 1、简介 2 基础配置 2.1.1 SYS配置  2.1.2 RCC配置 2.2 串口外设配置  2.3 项目生成  3、KEIL端程序整合 本文对HAL串口中断函数进行介绍。 2.1.1 SYS配置  2.1.2 RCC配置 首先在main.c文件中进行接受变量声明。  接着在主函数的while循环中进行接收中断,如下所示:  最后在主函数

    2024年02月14日
    浏览(49)
  • STM32基于HAL库的串口接受中断和空闲中断

    在通信方面。UART由于全双工通信,可以同时接受数据和发送数据而被广泛使用。 而接受数据则又有很多种方法 比如: 1根据结束符判断,数据是字符串形式,所以一般串口接受的接受符就是 \\\"rn\\\"  换成16进制ascil码显示就是 0X0D   0X0A (对应rn)  2定时器中断,设计\\\"喂狗信号量

    2023年04月08日
    浏览(43)
  • 【STM32】HAL库 串口中断发送与接收

    【STM32】HAL库 新建MDK工程 【STM32】HAL库 串口轮询发送 使用stm32串口中断发送和中断接收 在主函数前开启中断,接受字节数为5 接受5个字节后,进入中断接收完成回调函数,重新再开启中断,并把接收到的数据返回 修改接收数组长度,改为开启串口空闲中断 接收事件回调函数

    2024年02月08日
    浏览(57)
  • STM32 HAL库 串口中断接收数据包

    目录 一、CUBEmx配置 1.设置系统时钟,配置SYS,配置时钟树  ​编辑  2.配置串口USART1 3.配置NVIC,开启串口中断 ​编辑4.点击GENERATE CODE输出文件即可 二、代码部分 0.串口重定向——printf 1.关于舵机 2.开启串口中断函数 3.编写串口回调函数 4.主函数部分 三、实验现象: 四、总

    2024年02月04日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包