STM32 CubeMX 串口通信
上一篇文章中已经介绍了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 串口通信相关推荐
- STM32 —— STM32 的串口通信
STM32 -- STM32 的串口通信 STM32的串口通信接口有两种,分别是:UART(通用异步收发器).USART(通用同步异步收发器).而对于大容量 STM32F10x 系列芯片,分别有 3 ...
- Ardunio下实现STM32的串口通信及其与Stduino的区别
摘要 本文介绍了在Ardunio下配置STM32并进行STM32的串口通信:之后我将介绍一下国人MCU开发平台Stduino与现在所使用的Arduino进行比较. 文章目录 摘要 :man_stude ...
- 单片机与PC机的交流———基于STM32的串口通信
STM32之串口通信程序 前言: 一.串口通信要求 二.串口通信准备 1.硬件准备 2.软件准备 三.下载程序进入STM32 1.下载之前相关配置 2.下载 四.最终效果展示 总结: 前言: 本文主要 ...
- K210学习笔记(三) K210与STM32进行串口通信,K210发STM收
文章目录 前言 一.以/r/n为结尾 二.K210端代码 三.STM32端 3.1 main函数 四.测试结果 4.1当收到1时 4.2当收到2时 4.3 测试视频 总结 前言 前面我们讲了STM32 ...
- 嵌入式STM32入门之STM32基础串口通信
STM32基础串口通信 一.前言 二.串口协议 (1)浅谈设备通信方式 (2)具体串口协议 (3)STM32的串口通信 (4)RS-232通信协议 (5)USB To TTL(CH340) 5.1 C ...
- 【星曈科技】OpenMv笔记——利用OpenMV与STM32进行串口通信
利用OpenMV与STM32进行串口通信 OpenMV端的程序 # Untitled - By: dell - 周一 7月 19 2021# Blob Detection and uart trans ...
- 基于是stm32的串口通信
文章目录 一.串口协议和RS-232标准 (一).TTL电平标准 (二).RS232标准 二.搭建STM32开发环境 1.安装jdk 2.安装STM32CubeMX 三.实现LED的点亮 3.1分析相 ...
- javarxtx串口接收时数据会分成好几段_【STM32】串口通信基本原理(超基础、详细版)...
STM32F1xx官方资料: <STM32中文参考手册V10>-第25章通用同步异步收发器(USART) 通信接口背景知识 设备之间通信的方式 一般情况下,设备之间的通信方式可以分成并行通 ...
- stm32实现串口通信
使用stm32的USART实现串口通信程序 1.USART介绍 通用同步异步收发器(Universal Synchronous Asynchronous Receiver and Transmitte ...
- STM32下串口通信——汇编
文章目录 一.串口通信的方式 1.串行和并行通信 2.同步通信和异步通信 3.单工.全双工和半双工通信 二.串口的通信协议 1.电平标准 2. 协议层 3.串口数据包的基本组成 三.STM32串口以及 ...
最新文章
- Windows Phone 8初学者开发—第12部分:改进视图模型和示例数据
- java 归并排序 非递归_归并排序-递归及非递归的JAVA实现
- 0004-Median of Two Sorted Arrays(寻找两个正序数组的中位数)
- C程序对整数中设置为1的位数进行计数
- PHP微信公众号支付弹出“NaN:undefined”解决方法
- L1-042 日期格式化
- 数据结构算法题整理4
- 20172327 2017-2018-2 《程序设计与数据结构》第九周学习总结
- 软件开发中JAVA编程语言的应用
- 在eclipse上通过egit插件将代码发布到码云(https://gitee.com/)
- Unity渐进式GPU烘焙找不到显卡
- 运维审计系统:堡垒机
- linux中swp是什么文件,Linux中.swp 文件的产生与解决方法
- 宝塔面板权限问题导致php上传文件失败
- 阿里巴巴的AI价值观,以及“ET大脑”战略
- Twilio Inc.(TWLO)2020年第三季度收益电话会议记录
- [Audacity][帮助手册][手册内容]认识Audacity
- 淘宝品牌产品无授权开直通车怎么实现
- 《让荧光舞一直挥舞下去》
- cocoapods的安装