文章目录

  • 一. 环境
  • 二. 使用STM32CubeMX
  • 三. USART中断通信
    • 1. UART函数库介绍
    • 2. 编写代码
    • 3. 最终效果
  • 四. 软件调试
  • 五. 总结

一. 环境

  • 硬件:stm32f103c8t6 核心板
  • 软件:STM32CubeMX 6.3.0
  • 软件:keil5 mdk

二. 使用STM32CubeMX

这里与前一篇文章只在于多了个开启串口中断使能。STM32CubeMX实现串口通信_diyu-CSDN博客

三. USART中断通信

1. UART函数库介绍

结构体以及函数定义均在头文件: stm32f1xx_hal_uart.h

  • UART结构体定义
UART_HandleTypeDef huart1;
  • 串口发送/接收函数

HAL_UART_Transmit():串口发送数据,使用超时管理机制
HAL_UART_Receive():串口接收数据,使用超时管理机制
HAL_UART_Transmit_IT():串口中断模式发送
HAL_UART_Receive_IT():串口中断模式接收
HAL_UART_Transmit_DMA():串口DMA模式发送
HAL_UART_Transmit_DMA():串口DMA模式接收

  • 串口中断函数

HAL_UART_IRQHandler(UART_HandleTypeDef *huart); //串口中断处理函数
HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart); //串口发送中断回调函数
HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart); //串口发送一半中断回调函数(用的较少)
HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart); //串口接收中断回调函数
HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart);//串口接收一半回调函数(用的较少)
HAL_UART_ErrorCallback();串口接收错误函数

2. 编写代码

在文件main.cmain函数外部 添加以下代码

#define LENGTH 4     //接受缓冲区大小
uint8_t RxBuffer[LENGTH];   //接受缓冲区
uint8_t RxFlag = 0;       //接收完成标志;0表示接受未完成,1表示接收完成

图中 #define LENGTH 4 这个没有显示出来,但是必须要添加

main函数内部,while循环外部添加以下代码

//发送提示信息
HAL_UART_Transmit(&huart1,(uint8_t *)"****UART commucition using IT****\n",34,HAL_MAX_DELAY);
HAL_UART_Transmit(&huart1,(uint8_t *)"Please enter 4 characters: \n",30,HAL_MAX_DELAY);
//使能接收中断
HAL_UART_Receive_IT(&huart1, (uint8_t *)RxBuffer,LENGTH);

while循环内部添加一下代码

while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 *///添加下面代码HAL_UART_Transmit(&huart1, (uint8_t *)"hello windows!\r\n", 16 , HAL_MAX_DELAY);HAL_Delay(1000);  //延时1sif(RxFlag == 1)  //如果接受完成,不在发送数据{HAL_UART_Transmit(&huart1,(uint8_t *)"Recevie Success!\n",17,HAL_MAX_DELAY);  //提示接受成功break;  //退出循环,不在发送数据}}

main函数后面,添加中断回调函数

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)  //串口接收中断回调函数
{if(huart->Instance == USART1)   //判断发生接收中断的串口{RxFlag=1;   //置为接收完成标志}
}

3. 最终效果

编译,将程序烧录或下载进核心板,打开串口助手查看接收到的数据。

波特率、停止位、数据位、校验位要与配置的一致

当串口没有接受4个字节内容时,每隔一秒串口发送 “hello windows”

当发送4个字节内容时,比如发送“stop”,串口接受完毕后,发送“Recevie Success!”表示接收成功后,不再发送数据

四. 软件调试

如果要进行软件调试,与前一篇文章相同。STM32CubeMX实现串口通信_diyu-CSDN博客

五. 总结

总体而言还是很简单的,只要了解HAL库中的串口发送接收函数以及中断函数,然后调用即可。

这种方式只能固定长度收发,想实现任意长数据收发,可以采用IDLE中断以及DMA接收。

STM32CubeMX实现串口中断通信相关推荐

  1. 【嵌入式基础】串口中断通信VS串口DMA通信

    目录 目录 前言 一.串口通信 1. 通信方式 2.通信速率 3.串口通信的三种工作方式 二.串口中断通信 1.串口中断特点 2.CubeMX配置初始化串口中断相关外设 3.串口中断程序分析 4.实验 ...

  2. 15_串口中断通信寄存器即库函数配置编写实例

    串口中断通信寄存器即库函数配置编写实例 目录 串口中断通信寄存器即库函数配置编写实例 常用的串口相关寄存器: 波特率计算方法: USART_InitTypeDef结构体详解: 串口配置一般步骤: 调试 ...

  3. STM32G070RBT6基于STM32CubeMX创建串口中断接收数据

    STM32G070RBT6基于STM32CubeMX创建串口中断接收数据

  4. 51单片机 (6)串口中断通信+定时器2串口中断

    [若有疑问错误或版权等问题请联系我] [转载请注明出处:http://blog.csdn.net/leytton/article/details/48442129] 51单片机默认使用定时器1作为串口 ...

  5. STM32CubeMX实现串口DMA中断通信

    文章目录 一. 环境 二. 使用STM32CubeMX 三. USART DMA中断通信 1. UART函数库介绍 2. 编写代码 3. 最终效果 四. 软件调试 五. 总结 一. 环境 硬件:stm ...

  6. STM32CubeMX实现串口通信

    文章目录 一. 环境 二. 使用STM32CubeMX 1. 安装固件库 2. 工程设置 三. USART串口通信 1. UART函数库介绍 2. 代码编写 3. 最终效果 四. 软件调试 五. 总结 ...

  7. 【STM32】HAL库——串口DMA通信(三)

    前期准备: STM32CubeMX STM32RCT6核心板 IDE Keil(MDK-ARM) 关于DMA 1. 什么是DMA? DMA(Direct Memory Access,直接存储器访问) ...

  8. 使用串口中断方式实现串口通信

    文章目录 一. 实验环境 二.实验目标 三.串口中断方式特点 四.HAL配置串口通信 五.开发板引脚连接 六.程序代码 (1)接收单个字符控制串口发送 (2)接收多个字符控制串口发送 七.总结 一. ...

  9. 采用串口中断方式实现串口通信

    文章目录 前言 一.中断介绍 1.中断方式 2.中断优先级 3.中断向量 二.利用STM32CubeMX配置项目 三.在keil配置代码 四.实际效果 五.总结 六.参考资料 前言 一.中断介绍 1. ...

最新文章

  1. 报Java面授班有哪些优势
  2. Red5安装与入门 与FMS配置
  3. 【嵌入式】嵌入式天地博客汇总
  4. CF891B-Gluttony【构造】
  5. 离线部署 CDH 6.2 及使用 CDH 部署 Hadoop3 大数据平台集群服务
  6. LintCode,hihoCoder,LeetCode有什么区别?
  7. js中单引号和双引号的区别(html中属性规范是用双引号,js中字符串规定是用单引号)(js中单引号区别和php很像:单引号快,双引号可转义字符,双引号可解析变量)...
  8. ActiveMQ(4) ActiveMQ JDBC 持久化 Mysql 数据库
  9. 产品生命周期管理PLM系统概述——睿思成研发管理咨询(www.wiserdm.com)
  10. vue html if,vue中v-if使用方法详解
  11. matlab怎么使用 spm_vol,SPM12批量处理预处理数据
  12. dq电压方程耦合项符号问题
  13. 网易2018校园招聘编程题真题集合
  14. 输入字符串判断有多少个字母,数字和其他
  15. 什么是统一身份认证?
  16. 对话霍金弟子:AI能帮助人类到其他星球进行时空旅行 | AI英雄
  17. 低代码,虽然有点毒瘤,但管用就好
  18. 吉林华微电子: 自主研发砥砺行 助力打造“中国芯”
  19. sequelize 向数据库插入数据,自增id该如何添加
  20. Qt 使用QNetworkAccessManager实现Http操作

热门文章

  1. 编程制作动态壁纸的思路,以编程方式设置动态壁纸
  2. navicat怎么导入sql文件
  3. Provider Hosted App中使用JOM问题
  4. git2.35与gitee使用流程记录
  5. redis Twemproxy(redis多机功能篇)
  6. 【C语言开发】登陆界面
  7. python 提取视频中的音频 | Python工具类
  8. 优迈系统服务器初始化,OTIS电梯资料-优迈系统ALMCB_3.3调试指导书
  9. zap日志的基本使用(go必会知识*)
  10. 阿里云 RTC QoS 弱网对抗之 LTR 及其硬件解码支持