STM32CubeMX串口通信入门


前言

STM32串口通信是STM32单片机中常用的一种通信方式,它通过单向或双向的串口通讯传输数据。通常使用USART (Universal Synchronous Asynchronous Receiver Transmitter)模块来实现串口通信。串口通信是指将数据通过串行线路依次发送和接收的方式进行通信。STM32支持多种串口通信协议,如UART、USART、LIN、IrDA和Modbus等。

使用stm32CubeMX,配合Keil,使用HAL库方式,设置USART1 波特率为115200,1位停止位,无校验位,完成下列任务:

1)STM32系统给上位机(win10)连续发送 " hello windows!"
win10采用“串口助手”工具接收;
2)在完成以上任务基础,继续扩展功能:当上位机给stm32发送一个字符" # “后,stm32暂停发送"hello windows!” 发送一个字符 " * "后,stm32继续发送;


一、环境

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

二、STM32CubeMX

1、配置SYS

在这里插入图片描述

2、配置RCC

在这里插入图片描述

3、配置时钟

在这里插入图片描述

4、USART设置

在这里插入图片描述

5、Code Generator设置

在这里插入图片描述

6、Project Manager 设置

在这里插入图片描述
点击 GENERATE CODE 生成代码,然后打开工程。

三、通过KEil配置代码

1、编译运行

在这里插入图片描述
编译无误。

2、打开main.c

在while中添加代码:
在这里插入图片描述

  /* USER CODE BEGIN WHILE */
 while (1)
  {
    /* USER CODE END WHILE */
    //添加下面两行代码
		HAL_UART_Transmit(&huart1, (uint8_t *)"hello windows!\r\n", 16 , 0xffff);
		 HAL_Delay(1000);  //延时1s
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

3、编译烧录

在这里插入图片描述

4、结果演示

打开串口助手,波特率设置为115200 ,点击 打开串口 :
在这里插入图片描述

5、串口输出波形

打开模式棒,点击Debug进行设置:
在这里插入图片描述
进入Debug,进入逻辑分析仪打开`设置:
在这里插入图片描述

输入USART1_SR,运行,结果展示:
在这里插入图片描述

分析

由图可知时序状态正确,波特率实际为0.983689Hz。

四、串口中断通信

1、设置STM32CubeMX

在之前的基础上,PC13设置为GPIO_Output
在这里插入图片描述
勾选图中标注选项:
在这里插入图片描述
点击 GENERATE CODE 生成代码,然后打开工程。

2、通过KEil配置代码

打开main.c,添加代码:

在这里插入图片描述

char c;//指令 0:停止  1:开始
char message[]="hello Windows\n";//输出信息
char tips[]="CommandError\n";//提示1
char tips1[]="Start.....\n";//提示2
char tips2[]="Stop......\n";//提示3
int flag=0;//标志 

int main中添加:

在这里插入图片描述

	//设置接受中断
	HAL_UART_Receive_IT(&huart1, (uint8_t *)&c, 1);
	//当flag为1时,每秒发送一次信息
	//当flag为0时,停止
  while (1)
  {
		if(flag==1){
			//发送信息
			HAL_UART_Transmit(&huart1, (uint8_t *)&message, strlen(message),0xFFFF); 
			//延时
			HAL_Delay(1000);
		}
  }

重写中断处理函数

在这里插入图片描述

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	//当输入的指令为0时,发送提示并改变flag
	if(c=='#'){
		flag=0;
		HAL_UART_Transmit(&huart1, (uint8_t *)&tips2, strlen(tips2),0xFFFF); 
	}
	//当输入的指令为1时,发送提示并改变flag
	else if(c=='*'){
		flag=1;
		HAL_UART_Transmit(&huart1, (uint8_t *)&tips1, strlen(tips1),0xFFFF); 
	}
	//当输入不存在指令时,发送提示并改变flag
	else {
		flag=0;
		HAL_UART_Transmit(&huart1, (uint8_t *)&tips, strlen(tips),0xFFFF); 
	}
	//重新设置中断
		HAL_UART_Receive_IT(&huart1, (uint8_t *)&c, 1);  
}

3、编译烧录

在这里插入图片描述

4、结果演示

和之前一样在串口助手上操作:

串口通信1

输入*继续发送,输入#暂停发送。

五、总结

在串口通信实验中,需要掌握USART模块的基本配置,如波特率、奇偶校验、停止位等参数设置。可以帮助我们学习STM32的基本知识和操作方法,提高我们的实践能力。

参考

https://blog.csdn.net/qq_47281915/article/details/121053903
https://blog.csdn.net/qq_45945548/article/details/120984961

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值