上一篇文章中已经介绍了CubeMX的基本使用方法了,本文将实现串口通信

实验工具

单片机:正点原子STM32F4探索者
软件:CubeMX、Keil5
参考文档:
《STM32F4xx中文参考手册》
《正点原子 STM32F4 开发指南V1.2–HAL 库版本 》
ST32 HAL库使用手册

硬件配置

经过上一次实验的学习已经知道了CubeMX的美妙之处,只需要点击几下鼠标就可以跳过繁琐的硬件配置步骤,让我们能把经理集中到功能代码的设计上。本次实验将继续使用CubeMX实现单片机的串口通信。
时钟配置不过多介绍,和上一次配置的一样。

串口配置
这里的串口模式选择异步通信,下方的参数设置根据自己的需求进行设置,每一个参数的设置以及带来的作用 stm32f4的参考手册里都写的很清楚,需要详细了解可以下载手册进行学习。
右侧的引脚要注意是否是自己需要用到的引脚,因为存在引脚复用的情况,有时候出现引脚被占用或者其他时,软件可能会用其他引脚复用去实现。

配置选项卡的中断设置需要打开,在串口接收是我们需要用到中断。

代码添加

HAL库中使用到的串口收发函数,函数都可以在HAL库的手册中找到,有兴趣可以下载手册进行详细了解

串口发送

以下代码添加到stm32f4xx_hal.c中,不清楚添加到其他c文件中能不能起效。
重定向printf,代码是我在网上找到的,怎么就实现printf我还不是很明白

//添加以下代码可以实现的printf
#include "stdio.h"// 这个头文件需要在使用到printf的地方调用
#if SYSTEM_SUPPORT_OS
#include "includes.h"
#endif#if 1
#pragma import(__use_no_semihosting)             struct __FILE
{ int handle;
}; FILE __stdout;       void _sys_exit(int x)
{ x = x;
} int fputc(int ch, FILE *f)
{   while((USART1->SR&0X40)==0);USART1->DR = (uint8_t) ch;      return ch;
}
#endif

发送信息

  while (1){/* USER CODE END WHILE */printf("Hello World!\r\n");HAL_Delay(1000);/* USER CODE BEGIN 3 */}

在串口助手下成功接收到信息(第一行是我连接的LCD屏初始化返回的信息)

串口接收

HAL的串口中断调用比较繁琐,
下图摘自 正点原子 STM32F4手册
这个流程我们可以从stm32f4xx_it.c中的USART1_IRQHandler()函数找起

main.c中添加定义

#include "stdio.h"
#include "string.h"
#define RXBUFFERSIZE  256
char RxBuffer[RXBUFFERSIZE];
uint8_t aRxBuffer;  //接收中断缓冲
uint8_t Uart1_Rx_Cnt = 0;

在主函数中需要调用一次接收中断,进入中断
HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, size),
size指多少个字节执行一次回调函数接下来就会按照上图流程进行

最后在main.c 中设置回调函数,通过串口发送给单片机的数据回被发回

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{/* Prevent unused argument(s) compilation warning */UNUSED(huart);/* NOTE: This function Should not be modified, when the callback is needed,the HAL_UART_TxCpltCallback could be implemented in the user file*/if(Uart1_Rx_Cnt >= 255)  //超过接收限制{Uart1_Rx_Cnt = 0;memset(RxBuffer,0x00,sizeof(RxBuffer));HAL_UART_Transmit(&huart1, (uint8_t *)"data over", 10,0xFFFF);    }else{RxBuffer[Uart1_Rx_Cnt++] = aRxBuffer;   // 转存数据if((RxBuffer[Uart1_Rx_Cnt-1] == 0x0A)&&(RxBuffer[Uart1_Rx_Cnt-2] == 0x0D))//检查回车,有回车说明接收结束,这里也可以根据需求设置其他结束符号{HAL_UART_Transmit(&huart1, (uint8_t *)&RxBuffer, Uart1_Rx_Cnt,0xFFFF); //发送接收数据while(HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY_TX);//等待Uart1_Rx_Cnt = 0;memset(RxBuffer,0x00,sizeof(RxBuffer)); //}}HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1);   //注意这里需要再次调用中断,否则中断只能执行一次
}

STM32 CubeMX 串口通信相关推荐

  1. STM32 —— STM32 的串口通信

    STM32 -- STM32 的串口通信 STM32的串口通信接口有两种,分别是:UART(通用异步收发器).USART(通用同步异步收发器).而对于大容量 STM32F10x 系列芯片,分别有 3 ...

  2. Ardunio下实现STM32的串口通信及其与Stduino的区别

    摘要 本文介绍了在Ardunio下配置STM32并进行STM32的串口通信:之后我将介绍一下国人MCU开发平台Stduino与现在所使用的Arduino进行比较. 文章目录 摘要 :man_stude ...

  3. 单片机与PC机的交流———基于STM32的串口通信

    STM32之串口通信程序 前言: 一.串口通信要求 二.串口通信准备 1.硬件准备 2.软件准备 三.下载程序进入STM32 1.下载之前相关配置 2.下载 四.最终效果展示 总结: 前言: 本文主要 ...

  4. K210学习笔记(三) K210与STM32进行串口通信,K210发STM收

    文章目录 前言 一.以/r/n为结尾 二.K210端代码 三.STM32端 3.1 main函数 四.测试结果 4.1当收到1时 4.2当收到2时 4.3 测试视频 总结 前言 前面我们讲了STM32 ...

  5. 嵌入式STM32入门之STM32基础串口通信

    STM32基础串口通信 一.前言 二.串口协议 (1)浅谈设备通信方式 (2)具体串口协议 (3)STM32的串口通信 (4)RS-232通信协议 (5)USB To TTL(CH340) 5.1 C ...

  6. 【星曈科技】OpenMv笔记——利用OpenMV与STM32进行串口通信

    利用OpenMV与STM32进行串口通信 OpenMV端的程序 # Untitled - By: dell - 周一 7月 19 2021# Blob Detection and uart trans ...

  7. 基于是stm32的串口通信

    文章目录 一.串口协议和RS-232标准 (一).TTL电平标准 (二).RS232标准 二.搭建STM32开发环境 1.安装jdk 2.安装STM32CubeMX 三.实现LED的点亮 3.1分析相 ...

  8. javarxtx串口接收时数据会分成好几段_【STM32】串口通信基本原理(超基础、详细版)...

    STM32F1xx官方资料: <STM32中文参考手册V10>-第25章通用同步异步收发器(USART) 通信接口背景知识 设备之间通信的方式 一般情况下,设备之间的通信方式可以分成并行通 ...

  9. stm32实现串口通信

    使用stm32的USART实现串口通信程序 1.USART介绍 通用同步异步收发器(Universal Synchronous Asynchronous Receiver and Transmitte ...

  10. STM32下串口通信——汇编

    文章目录 一.串口通信的方式 1.串行和并行通信 2.同步通信和异步通信 3.单工.全双工和半双工通信 二.串口的通信协议 1.电平标准 2. 协议层 3.串口数据包的基本组成 三.STM32串口以及 ...

最新文章

  1. Windows Phone 8初学者开发—第12部分:改进视图模型和示例数据
  2. java 归并排序 非递归_归并排序-递归及非递归的JAVA实现
  3. 0004-Median of Two Sorted Arrays(寻找两个正序数组的中位数)
  4. C程序对整数中设置为1的位数进行计数
  5. PHP微信公众号支付弹出“NaN:undefined”解决方法
  6. L1-042 日期格式化
  7. 数据结构算法题整理4
  8. 20172327 2017-2018-2 《程序设计与数据结构》第九周学习总结
  9. 软件开发中JAVA编程语言的应用
  10. 在eclipse上通过egit插件将代码发布到码云(https://gitee.com/)
  11. Unity渐进式GPU烘焙找不到显卡
  12. 运维审计系统:堡垒机
  13. linux中swp是什么文件,Linux中.swp 文件的产生与解决方法
  14. 宝塔面板权限问题导致php上传文件失败
  15. 阿里巴巴的AI价值观,以及“ET大脑”战略
  16. Twilio Inc.(TWLO)2020年第三季度收益电话会议记录
  17. [Audacity][帮助手册][手册内容]认识Audacity
  18. 淘宝品牌产品无授权开直通车怎么实现
  19. 《让荧光舞一直挥舞下去》
  20. cocoapods的安装

热门文章

  1. orcad导出BOM
  2. 快启动win10pe制作详细图文教程
  3. 在微信公众平台做HTML 5游戏的一些经验
  4. 企业篇之员工工资管理系统(Java+SQL sever实现)
  5. 2021最新15个App跨平台开发框架
  6. 等价划分测试c语言测试三角形,三角形等价划分法测试用例
  7. 求100以内素数C++
  8. Vmware WorkStation Pro 14 激活密钥
  9. 技术美术 之 游戏开发流程
  10. QQ浏览器,正式推出,9.0版本又多些好东西!