上班摸鱼肝系列:梁山派开发板系列---10.串口中断接收实验

该文详细介绍了如何配置STM32进行串口中断接收,包括开启时钟、配置GPIO、使能串口和中断、定义串口变量,以及编写中断服务函数。在中断服务函数中,处理USART_INT_RBNE和USART_INT_IDLE中断,读取并保存接收数据,同时检测数据帧的完成。
摘要由CSDN通过智能技术生成

说明:

        上一期我们学习了PWM,并完成了呼吸灯实验,这一期我们来做串口中断接收的实验,串口中断接收配置流程有好几个步骤:开启时钟(包括串口时钟和GPIO时钟)、配置GPIO复用模式、配置GPIO的模式、配置GPIO输出、配置串口(一些参数)、使能串口(串口使能、发送使能和接收使能)和中断配置(串口接收中断和中断优先级),编写串口接收中断服务函数,最后在main函数死循环中进行串口中断接收数据处理,在XCOM查看现象。


文章目录

  • 系列文章目录
  • 一、串口中断接收配置
    • 1、使能串口接收
    • 2、中断配置
    • 3、串口变量定义
  • 二、串口接收中断服务函数
  • 三、串口中断接收数据处理
  • 四、现象
  • 总结

提示:以下部分参考于梁山派开发板学习指南,代码如有更有解可在评论区一起沟通交流哈。

一、串口中断接收配置

1、使能串口接收

2、中断配置

USART_INT_RBNE:接收缓冲区不为空中断和溢出错误中断。如果开启了这个中断,每当接收到
一个字符,就会触发这个中断。
USART_INT_IDLE:空闲检测中断。如果开启了这个中断,将会在一帧数据传输完成之后触发中
断,一般用来判断一帧数据是否传输完成。

3、串口变量定义

 .h里面定义

二、串口接收中断服务函数

FlagStatus usart_interrupt_flag_get(uint32_t usart_periph, usart_interrupt_flag_enum int_flag);

        这个函数获取串口中断的标志位状态。有两个参数,第一个参数就是要获取的串口外设,第二个参数就是要获取的串口中断的标志位。        
        串口接收数据要到中断中去处理,前面串口中断配置的时候,我们打开了 USART_INT_RBNE 和 USART_INT_IDLE 这两个中断,那在中断服务函数里面也需要对这两个中断分别进行判断。
USART_INT_RBNE USART_INT_IDLE 分 别 对 应 于 USART_INT_FLAG_RBNE
USART_INT_FLAG_IDLE 。在检测到 USART_INT_FLAG_RBNE 中断标志被置 1 之后,就说明当前缓冲区不为空了,有数据到来了,我们要做的操作就是把当前数据读出来然后保存到到接收数组中,然后对数据长度进行加一,等待下一次数据存储。
uint16_t usart_data_receive(uint32_t usart_periph);
        这个函数可以接收数据。有一个参数,就是要读取的串口外设。需要注意的是这个函数读取数据的时候会自动将标志位请零,所以我们就不用手动清除标志位了。
在接收数据的过程中可以判断 USART_INT_FLAG_IDLE 这个标志是否置 1 ,如果这个标志位置 1
说明一帧数据传输完成,然后将 g_recv_complete_flag 变量置 1 ,说明可以进行数据处理。需要注意的是,在这个中断满足的时候,需要执行 usart_data_receive(BSP_USART); 去清除中断标志,不然数据会出现混乱。

三、串口中断接收数据处理

四、现象

注:一个汉字两个字节。


总结

        完成串口中断接收的实验!

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小邓上班摸鱼肝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值