STM32Cube的串口设置(二)一个串口接收另一个串口发送

24 篇文章 12 订阅
6 篇文章 1 订阅

串口系列
STM32Cube的串口设置(一)即学即用

通过串口设置第一部分大家应该基本会使用单个串口进行收发了

所以本次介绍通过串口进行转发
【适合情景为一个串口设备波特率为38400,但是接收模块仅支持115200波特率】

一、基本思路

在以上情况下,我们就需要两个串口和一个存储位置,在一个串口接收一个信号之后通过MCU转发到另一个串口以不同的波特率输出。

二、操作步骤

要求:通过串口向PC发送一段字符

1、根据自己的stm32的芯片型号来选择,我这里是STM32F767IGTx

在这里插入图片描述

2、选好芯片之后照旧设置RCC为外部时钟

在这里插入图片描述

3、使能串口1、3(usart1、usart3),如图:

模式设为异步(Asynchronous)其他默认,波特率可以自己改,USART1为115200Bits/s,USART3为38400Bits/s。
在这里插入图片描述
在这里插入图片描述
之后再使能串口1、3中断
在这里插入图片描述

4、设置中断优先级,如图:

在这里插入图片描述
在这里插入图片描述

设置中断优先级在这里插入图片描述

5、看原理图,找到串口对应引脚,如图:

我这里是

PA10——>USART1_RX  
PA9——>USART1_TX

PB11——>USART3_RX  
PB10——>USART3_TX

串口1
串口3

6、根据对应引脚设置串口引脚,如图:

找到PA9、PA10引脚左键点击分别选择USART1_TX和USART1_RX
(不用担心选错选反,针脚的功能是ST公司已经定义好了的)
在这里插入图片描述
在这里插入图片描述

7、设置时钟树,如图:

这里会搞的按自己习惯搞,不会搞的默认就好,但是不能有里面是红色的框(红色框就是错了意思)
在这里插入图片描述

8、项目设置,如图:

红框里的按照自己的Keil版本来
在这里插入图片描述
个人喜欢把.c/.h文件分开
在这里插入图片描述

9、点击右上角的‘GENERATE CODE’直接生成代码,如图:

在这里插入图片描述

10、生成代码后用Keil打开项目并在Application/User中找到usart.c并在/USER CODE BEGIN 0/后添加如下代码,如图:

#include <stdio.h>
struct __FILE 
{ 
	int handle; 
}; 

FILE __stdout;       
void _sys_exit(int x) 
{ 
	x = x; 
} 
int fputc(int ch, FILE *f)
{ 	
	while((USART3->ISR&0X40)==0);
	USART3->TDR=(uint8_t)ch;      
	return ch;
}

uint16_t USART3_RX_STA=0;
uint8_t USART3_RX_BUF[800];//串口转存空间

在这里插入图片描述

11、生成代码后用Keil打开项目并在Application/User中找到main.c:

在/USER CODE BEGIN PV/后添加如下代码

extern uint8_t USART3_RX_BUF[800];//重申明外部转存空间

在/* USER CODE BEGIN WHILE */后添加如下代码

	HAL_UART_Receive_IT(&huart3,USART3_RX_BUF,1);	
	HAL_UART_Transmit(&huart1,USART3_RX_BUF,sizeof(USART3_RX_BUF),100);
	\\开启中断

在/* USER CODE BEGIN 4 */后添加回调函数

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{

	if(huart->Instance == USART3)
	{
		HAL_UART_Transmit(&huart1,USART3_RX_BUF,1,100);//串口1发送接收buff里的东西	
		HAL_UART_Receive_IT(&huart3,USART3_RX_BUF,1);	//重新开启串口3接收中断	
	}
}

编译、下载

三、实验验证

正所谓没有实验结果的教程都是耍流氓,出结果

目的是USART3接收后通过USART1发送出来,为了正确表达实验内容,首先我将USART3的输入直连在USB,在PC端展示一下USART3的发送内容(这里用了GPS+BD模块):
直连
上图相当于把GPS输出直连USB,所以打开串口调试助手,波特率设置为38400Bits/s
串口三接收的数据
改回原样后重新连接SUART1看情况,USART1的比特率为115200Bits/s,所以串口调试助手波特率也相应进行修改
USART1
可知USART1输出和USART3接收的数据一致,到此试验成功。

		  Good Game!!!!!!

接下来会推出一系列的关于串口使用的分享,有需要的猿们敬请关注!!!!!

以上内容欢迎大家转载引用,标明出处即可!!!!!

  • 17
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
stm32cube一个软件平台,用于开发和编程STM32微控制器。要实现串口接收数据,首先需要初始化串口配置。在stm32cube中,可以使用HAL库函数进行串口初始化。为了接收数据,需要配置串口的波特率、数据位、停止位以及校验位等参数。此外,还需要使能串口接收功能。 接下来,可以在主函数中创建一个缓冲区数组,用于存储接收到的数据。然后,可以使用HAL库函数中提供的接收函数,比如HAL_UART_Receive(),将接收到的数据存储到缓冲区数组中。这些函数通常包含在stm32cube的HAL_UART库中。 可以使用while循环不断接收数据,可以通过判断接收到的数据长度是否等于期望的数据长度来判断是否接收到了完整的数据。如果接收到完整的数据,则可以对数据进行处理或者进行其他操作。如果没有接收到完整的数据,则继续等待。可以根据需求设置超时时间,当超时时间到达后,还没有接收到完整的数据,可以进行错误处理或者重试。 在处理完数据后,可以根据需要清空缓冲区数组,以便下一次接收数据的使用。 需要注意的是,使用stm32cube进行串口接收数据之前,需要先配置GPIO引脚作为串口接收引脚,并将其与特定的串口外设进行绑定。 总的来说,stm32cube实现串口接收数据主要包括初始化串口配置、创建接收缓冲区数组、设置超时时间、接收数据并进行处理等步骤。使用STM32Cube的HAL库函数可以方便地实现这些功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值