STM32简单串口通信

基于 HAL库 创建 STM32 汇编程序:串口输出 Hello world

一、创建工程

1、设置RCC,在HSE项选择如下图

img编辑

2、时钟树设置:

img编辑

USART1设置: 将Mode设置为Asynchronous,使能串口中断:

img编辑

project manager设置:

img编辑

img编辑

二、编写代码

将main.c里的代码替换成如下代码:

#include "main.h"
#include "usart.h"
#include "gpio.h"
#include <string.h>
​
void SystemClock_Config(void);
​
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;//标志 0:停止发送 1.开始发送
​
​
int main(void)
{
    HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_USART1_UART_Init();
    
    //设置接受中断
    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=='0'){
        flag=0;
        HAL_UART_Transmit(&huart1, (uint8_t *)&tips2, strlen(tips2),0xFFFF); 
    }
    
    //当输入的指令为1时,发送提示并改变flag
    else if(c=='1'){
        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);  
}
/* USER CODE END 4 */
/**
  * @brief System Clock Configuration
  * @retval None
  */
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
​
  /** Initializes the RCC Oscillators according to the specified parameters
  * in the RCC_OscInitTypeDef structure.
  */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }
  /** Initializes the CPU, AHB and APB buses clocks
  */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
​
  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
  {
    Error_Handler();
  }
}
​
/* USER CODE BEGIN 4 */
​
/* USER CODE END 4 */
​
/**
  * @brief  This function is executed in case of error occurrence.
  * @retval None
  */
void Error_Handler(void)
{
  /* USER CODE BEGIN Error_Handler_Debug */
  /* User can add his own implementation to report the HAL error return state */
  __disable_irq();
  while (1)
  {
  }
  /* USER CODE END Error_Handler_Debug */
}

三、编译并烧录

img

结果

四、总结

在这次实验中,我们通过使用STM32微控制器实现了简单的串口通信。通过连接串口与计算机,我们能够通过串口发送数据,并在计算机上接收和显示这些数据。 在实验过程中,我们首先对STM32的串口通信模块进行了配置,包括设置波特率、数据位、停止位和校验位等。然后,我们通过使用STM32的HAL库函数向串口发送数据,并在计算机上通过串口调试器接收这些数据。 通过这次实验,我们深入了解了STM32的串口通信原理和实现方法。同时,我们也学会了如何配置串口通信参数以及如何通过串口进行数据传输。此外,我们还掌握了使用STM32 HAL库函数的方法,这将对我们在未来的开发中更好地利用STM32的资源产生积极的影响。 总之,这次实验不仅让我们对STM32的串口通信有了更深入的了解,同时也提高了我们的实践能力和对STM32开发的认识。

  • 15
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: LabVIEW与STM32之间可以进行串口通信串口通信是指通过串口将数据从一个设备传输到另一个设备。在LabVIEW与STM32的通信中,可以通过串口将数据从LabVIEW发送到STM32,或者从STM32发送到LabVIEW。串口通信通常使用异步通信,即发送和接收的数据是以可变的速率进行的,并且每个字符都带有起始位、数据位、校验位和停止位。 在串口通信中,LabVIEW可以作为主设备(Master)通过串口发送指令或数据到STM32,而STM32则作为从设备(Slave)接收并处理这些指令或数据。反之,STM32也可以向LabVIEW发送指令或数据,LabVIEW作为从设备进行接收与处理。 为了实现LabVIEW与STM32之间的串口通信,首先需要在STM32的代码中配置串口接口,以确定串口的参数(如波特率、数据位数、校验位等),并设置接收和发送的中断。然后,通过在LabVIEW中使用串口通信的相关模块和函数,可以与STM32进行通信,包括发送和接收数据。 总而言之,LabVIEW与STM32之间是通过串口进行通信的,通过串口通信可以实现数据的传输和交互。 ### 回答2: LabVIEW和STM32都支持串口通信,但它们实现串口通信的方式略有不同。 LabVIEW是一种基于图形化编程的开发环境,可以用于控制、测量和测试等应用。LabVIEW可以通过VISA(Virtual Instrument Software Architecture)来与外部设备进行通信,包括串口通信。在LabVIEW中,串口通信通常通过使用VISA函数库来实现。VISA提供了一组函数来控制串口的配置、发送和接收数据。 STM32是一系列由意法半导体(STMicroelectronics)推出的32位单片机,具有强大的处理能力和丰富的外设接口。STM32可以通过其内置的UART(Universal Asynchronous Receiver Transmitter)外设来实现串口通信。UART是一种异步串行通信接口,可以实现数据的传输和接收。STM32的UART外设提供了相应的寄存器和配置选项,以方便开发者进行串口通信的设置和控制。 因此,LabVIEW和STM32都可以通过串口实现通信,但它们的具体实现方式不同。LabVIEW通过VISA函数库来控制串口通信,而STM32通过内置的UART外设来实现串口通信。 ### 回答3: LabVIEW与STM32是通过串口进行通信的。 串口通信是一种通过串行方式进行数据传输的通信方式。在串口通信中,数据按照一位一位的顺序进行传输,通过一条线路同时传递数据和控制信号。串口通信相对于并行通信更经济、更简单,适用于较短距离和较低速率的通信。 LabVIEW是一种图形化编程语言和开发环境,广泛用于建立数据采集、控制、仿真和分析系统。通过串口通信,LabVIEW可以与其他设备或硬件进行数据交换,如传感器、执行器等。在串口通信中,LabVIEW可以通过串行端口读取或发送数据,实现与STM32之间的数据交互和通信STM32是一系列32位的ARM Cortex-M单片机,具有强大的性能和丰富的外设接口。STM32通过串口与其他设备进行通信,可以使用UART、USART等串行通信接口,通过发送和接收数据来完成与LabVIEW之间的数据交互。 因此,LabVIEW与STM32是通过串口通信进行数据传输和通信的。通过串口通信,LabVIEW可以与STM32进行双向数据传输,实现数据的读取、控制和交互,使两者能够进行有效的协作和信息交换。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值