STM32--HAl库串口接收与发送

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

前言

        在此之前,我们已经学习了单片机串口通信的原理(江科协),再写一遍我个人认知:世界上任何两个事物如果要进行交流的话,那必然需要两个东西进行通信的,就像两个人之间,两个国人之间用普通话就能够清楚的交流,但是让我们中国人和外国人去交流可能会有点费力了,假设一个英国人在那,你要是想和他聊天,那必然是你学英语或者他学汉语才行,这里的你们之间交流用的语言就是单片机中的  通信协议   。假设汉语是串口通信,英语是I2C通信,那这两个是不兼容的,所以必须要统一语言,统一协议才行。所以是说,不同的芯片所用的通信协议是不一样的,我们要根据需要有针对性的选择学习。

Cubemax配置

        在B站视频中我们可以看到老师写的代码,看着操作挺多的,如果让自己写的话那肯定是大部分人都挺费劲的。但是!!!!如果我们用Cubemax配置(偷懒神技)的话那就会很轻松了,同样只需要选择自己所需要的参数就能够完成目的。话不多说,直接看步骤:

hal库dma串口收发,stm32,嵌入式硬件,单片机

注意,在配置的时候,RCC(Reset and Clock Control,即复位和时钟控制)要配置为外部晶振

 hal库dma串口收发,stm32,嵌入式硬件,单片机

这里的SYS配置选Serial Wire

然后选择串口为asynchronous(异步通信),然后下面就会生成波特率,数据宽度,停止位,校验位等,这里一般用默认的就好,因为刚开始学习时接触的大多数都是这个配置。

hal库dma串口收发,stm32,嵌入式硬件,单片机 然后可以根据自己的需要把中断或者DMA模式打开。

hal库dma串口收发,stm32,嵌入式硬件,单片机

配置好后别忘了配置时钟树,一般只用选择完红圈里的东西后点回车就行了。

hal库dma串口收发,stm32,嵌入式硬件,单片机

usart_x264

keil端

生成代码之后呢,我们就需要知道哪些是我们所需要的代码了,接下来,我们在keil中打开stm32f1xx_hal_uart.c文件:

hal库dma串口收发,stm32,嵌入式硬件,单片机

         在这个文件里我们能看到很多代码,很多注释,乱七八糟的,但是我们只需要看我们所需要的就行了,在此之前,你需要积累一些常用的函数。怎么在左下角可以看到有个Functions,我们点开然后再点串口的文件,可以看到这个文件里所有的函数都呈现出来了:

hal库dma串口收发,stm32,嵌入式硬件,单片机

其中有几个最为常用的函数需要大家熟记(具体函数的用法以及原理规则就不跟大家介绍了,网上一查很多):

hal库dma串口收发,stm32,嵌入式硬件,单片机

 举例

        给大家举几个简单的例子说明一下:

串口发送

HAL_UART_Transmit(&huart1,"hello,world",11,HAL_MAX_DELAY);
HAL_UART_Transmit_IT(&huart1,"hello,world",11);
HAL_UART_Transmit_DMA(&huart1,"hello,world",11);

        这是3种不同的方式发送数据 hello,world, 第一种是轮询模式就是单片机按个去发送数据,大家排好队一个一个来,这种发送方式比较稳定,建议以后大家非必要就用这个发。

        第二个是用中断发送发送数据,这句程序的工作过程是,还是排好队一个一个发,但是当单片机发送11个数据之后,单片机需要进一次中断,中断回调函数为:HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart),但是由于是中断模式,需要进行中断处理,倘若单片机在进行中断处理时又一次进入中断的话,单片机就会出现错误,因此中断发送不能两个中断发送函数连着使用,但是需要间隔多长时间呢?有点小复杂,我还没探究过> <。DMA模式好像也有类似问题,因此前期学系的话只用轮询就够了。

串口接收

uint8_t ReBuf[8];
HAL_UART_Receive(&huart1,ReBuf,8,HAL_MAX_DELAY);
HAL_UART_Receive_IT(&huart1,ReBuf,8);

         在进行串口接收前,单片机需要知道接收到的数据放在哪里,因此就需要接收缓存区:ReBuf。程序种轮询接收意思是接收依次接收8个数据存放在ReBuf中,中断接收呢是依次接收8个数据后进入接收中断里,串口接收中断的回调函数为:

 HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)

我们可以根据需要在中断回调函数里进行所需要的操作。或者是在主程序中操作也是可以的,可以根据自己程序的不同逻辑酌情选择。

        另外附上我在stm32与openmv进行串口收发的相关代码文章来源地址https://www.toymoban.com/news/detail-846442.html

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  uint16_t tempt  /*定义临时变量存放接受的数据*/;
  if(huart->Instance==USART2)
  {
    tempt=ReBuff[0];
    Openmv_Receive_Data(tempt);
		/*调运数据接收处理函数,每次进入中断都对数据进行理处
		,由于需要接收器个数据,因此要进入七次断理*/
  }	
HAL_UART_Receive_IT(&huart2,(uint8_t*)&ReBuff,1);/*再次开启接收中断*/
}

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

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

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

相关文章

  • STM32F4_HAL库_串口阻塞/中断/DMA三种方式发送数据的配置

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

    2023年04月25日
    浏览(54)
  • STM32F4 HAL库使用DMA进行ADC采样实时发送波形到串口显示(包含傅里叶变换)

    按下 STM32F4 的 KEY0 按键,通过外部中断的方式对按键进行检测,然后进行一次固定点数的 DMA ADC 采集,采集完成后在 DMA 的中断发送采集到的数据,然后清空数据区准备下一次的按键中断。电脑接受到串口数据后对数据进行简单处理和傅里叶变化,然后实时显示在电脑上。 开

    2024年02月14日
    浏览(42)
  • STM32-UART-DMA HAL库缓冲收发

    1.1、注意事项: HAL库的DMA底层基本都会默认开启中断使能,如果在STM32CubeMx禁用了中断相关的功能,程序可能会进入空中断回调出不来。 切记使用STM32-HAL库的DMA发送时需要开启USART中断和DMA中断。 在一般时间要求不是很高很高的场合,使用HAL库自带的函数就可以,并不会很频

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

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

    2024年04月10日
    浏览(75)
  • HAL库STM32的串口收发教程

            首先配置STM32CubeMX 第一步在系统SYS里的Debug(调试)选项选择Serial Wire(这里使用ST-LINK-V2仿真下载器所以选择该项)。  第二打开使用外部晶振  在芯片引脚上点击PC13选择GPIO_Output(即设置GPIO为输出模式) 点击GPIO,点击PC13 在其下方配置引脚: GPIO out  level 设置成

    2024年02月14日
    浏览(37)
  • 【STM32+HAL库+CubeMX】UART轮询收发、中断收发、DMA收发方法及空闲中断详解

    Author: DrinkCat(szt@drinkcat.com) Copyright © 2023 DrinkCat Original link: DrinkCat’s Blog UART是一种异步串行通信接口,常用于通过串口与外部设备进行通信。它通过发送和接收数据帧来实现数据传输,使用起来相对简单。UART通常包含发送器(Transmitter)和接收器(Receiver),通过两根信号线

    2024年02月10日
    浏览(40)
  • 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日
    浏览(53)
  • stm32使用HAL库配置串口中断收发数据(保姆级教程)

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

    2024年02月07日
    浏览(43)
  • STM32—HAL库中断/DMA控制和完成串口通信

    目录 一、解决的问题 二、串口通讯协议和RS-232的介绍以及USB/TTL转232模块的工作原理   1、 串口协议和RS-232标准:  (1)串口协议: (2)RS-232 标准:   2、RS232电平与TTL电平的区别   3、USB/TTL转232“模块(CH340芯片为例)  (1)基本原理:  (2)CH340模块介绍: ​三、搭

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

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

    2024年02月04日
    浏览(44)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包