STM32学习笔记-SMT32使用HAL库UART中断方式使用_stm32 hal uart

2、配置

3、流程


1、引言

近来需要使用蓝牙模块,再了解到蓝牙模块等无线模块许多使用串口透传,便决定在研究一下串口UART 的使用方法。

由于用的板子种类每次都不一样,有F103 有G0 有G4 还有公司的8位自研芯片,所以每次用起来都需要重头开始复习

每次使用UART的目标都是能够发送不定长数据,接收不定长数据。

使用8位单片机的时候,总体思路是使用定时器定一个时间,在里面对一个时间标志进行加法,在使用串口接收数据时候,每当缓存区的一个字节数据存储到定义好的数组里面,就对这个时间标志进行一次清零,当串口不定长数据接收完成以后就是最后一次清零,此后该事件标志位不再清零将一直进行加法,在随后实用查询方式对该时间标志进行查询,当超过一定时间(要远大于字符串发送时候两个字节之间的时间,一般定义为ms级别)则表明数据接收完成,随后对存储数据的数组进行处理,在对串口各个状态标志和刚才制定的时间标志进行清零。这就完成了一次不定长数据的接收。

在使用STM32的时候,也借鉴了这个思路,同时STM32提供的HAL库大体上有三种UART方式可以使用:

轮询模式(Polling mode IO operation)

使用HAL_UART_Transmit()与HAL_UART_Receive()来配合超时操作来发送与接收数据。

中断模式(Interrupt mode IO operation)

使用HAL_UART_Transmit_IT()与HAL_UART_Receive_IT来发送接收,在发送或接收完之后,再进行函数回调HAL_UART_TxCpltCallback与HAL_UART_RxCpltCallback来进行处理这两个函数都是由用户重新定义的,来实现用户自己的操作。

DMA模式(DMA mode IO operation)

使用HAL_UART_Transmit_DMA()与HAL_UART_Receive_DMA()来发送接收,在发送或接收完之后,也使用HAL_UART_TxCpltCallback与HAL_UART_RxCpltCallback来完成实际操作,同时接收到一半的时候,也可以调用相应的                                                  HAL_UART_TxHalfCpltCallback  与HAL_UART_RxHalfCpltCallback,如果需要用到这个操作的情况下可以添加自己的操作,当然来还用到一关于DMA的API函数,如HAL_UART_DMAPause,HAL_UART_DMAResume, HAL_UART_DMAStop等

其中DMA方式加空闲中断方式效率高,但是由于我没有这么高的需求而且对dma模块还不够熟悉,就是用最常用的中断方式实现功能。

这里主要介绍一下中断方式:

2、配置

这里按照流程讲解一下相关的HAL库函数使用

首先使用cubmax设置所需要的GPIO端口,选定UART功能 ,然后配置基础功能(时钟等)生成文件。

void MX_USART1_UART_Init(void)
{

  huart1.Instance = USART1;
  huart1.Init.BaudRate = 115200;
  huart1.Init.WordLength = UART_WORDLENGTH_8B;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值