STM32串口通信入门
一. 了解串口协议和RS-232标准,以及RS232电平与TTL电平的区别;了解"USB/TTL转232"模块(以CH340芯片模块为例)的工作原理。
二. 安装 stm32CubeMX,配合Keil,使用HAL库(或标准库)方式,设置USART1 波特率为115200,1位停止位,无校验位,完成下列任务:
1)STM32系统给上位机(win10)连续发送“hello windows!”。win10采用“串口助手”工具接收。
2)在完成以上任务基础,继续扩展功能:当上位机给stm32发送一个字符“#”后,stm32暂停发送“hello windows!”;发送一个字符“*”后,stm32继续发送;
实验前准备
下载并安装 STM32CubeMX,这是一个用于STM32微控制器配置的图形化工具。
安装 Keil MDK-ARM,Keil是一款常用的嵌入式开发环境。
USB转TTL插线
实验内容
1 了解串口协议和RS-232标准,以及RS232电平与TTL电平的区别;了解"USB/TTL转232"模块(以CH340芯片模块为例)的工作原理。
打开 STM32CubeMX。
创建一个新的工程。
选择适合的 STM32 微控制器型号。
在 “Pinout & Configuration” 选项卡中,配置 USART1 的引脚。根据需求选择合适的引脚,并将其设置为 USART1。
在 “Configuration” 选项卡中,选择 “USART1”。
配置波特率为 115200,停止位为 1,无校验位。
确认配置后,生成代码。
将生成的代码导入到 Keil 中。
2 安装 stm32CubeMX,配合Keil,使用HAL库(或标准库)方式,设置USART1 波特率为115200,1位停止位,无校验位,完成下列任务:
1) STM32系统给上位机(win10)连续发送“hello windows!”。win10采用“串口助手”工具接收。
串口时钟使能,GPIO 时钟使能。
设置引脚复用器映射:调用 GPIO_PinAFConfig 函数。
GPIO 初始化设置:要设置模式为复用功能。
串口参数初始化:设置波特率,字长,奇偶校验等参数。
开启中断并且初始化 NVIC,使能中断(如果需要开启中断才需要这个步骤)。
使能串口。
编写中断处理函数:函数名格式为 USARTxIRQHandler(x 对应串口号)。
使用高速外部时钟
设置USART
时钟设置
之后导出Keil文件即可
在main.c文件的主函数while循环中添加以下代码
HAL_UART_Transmit(&huart1, (uint8_t *)“hello windows!\r\n”, 16 , 0xffff);
HAL_Delay(1000);
实验二
uint8_t receivedChar;
if (HAL_UART_Receive(&huart1, &receivedChar, 1, 0xffff) == HAL_OK)
{
switch (receivedChar)
{
case ‘#’: // Pause sending message
HAL_UART_Transmit(&huart1, (uint8_t )“stop”, 16 , 0xffff);
break;
case '': // Resume sending message
HAL_UART_Transmit(&huart1, (uint8_t *)“hello windows!\r\n”, 16 , 0xffff);
HAL_Delay(1000); //??1s
break;
default: // Continue sending message
HAL_UART_Transmit(&huart1, (uint8_t *)“hello windows!\r\n”, 16 , 0xffff);
HAL_Delay(1000); //??1s
break;
}
}
2)在完成以上任务基础,继续扩展功能:当上位机给stm32发送一个字符“#”后,stm32暂停发送“hello windows!”;发送一个字符“*”后,stm32继续发送;
2)在完成以上任务基础,继续扩展功能:当上位机给stm32发送一个字符“#”后,stm32暂停发送“hello windows!”;发送一个字符“*”后,stm32继续发送;
在实验一的基础上更改一下代码
在main中,改为一下代码:
uint8_t receivedChar;
if (HAL_UART_Receive(&huart1, &receivedChar, 1, 0xffff) == HAL_OK)
{
switch (receivedChar)
{
case ‘#’: // Pause sending message
HAL_UART_Transmit(&huart1, (uint8_t )“stop”, 16 , 0xffff);
break;
case '': // Resume sending message
HAL_UART_Transmit(&huart1, (uint8_t *)“hello windows!\r\n”, 16 , 0xffff);
HAL_Delay(1000); //??1s
break;
default: // Continue sending message
HAL_UART_Transmit(&huart1, (uint8_t *)“hello windows!\r\n”, 16 , 0xffff);
HAL_Delay(1000); //??1s
break;
}
}
2) 在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察串口输出波形,并分析时序状态正确与否,计算波特率实际为多少。
观察波形,把光标移动到逻辑分析仪显示波形的区域,上下滚动滑轮,就
可以放大和缩小波形:
实验总结
本次实验了解串口协议和RS-232标准,以及RS232电平与TTL电平的区别:此实验的目的是让您熟悉串口通信的基本概念和RS-232标准的工作原理。您将了解串口通信协议、电气特性以及RS-232电平和TTL电平之间的差异。了解"USB/TTL转232"模块(以CH340芯片模块为例)的工作原理:通过这个实验,您将了解USB/TTL转232模块的工作原理。以CH340芯片模块为例,您将学习如何将USB接口转换为串口接口,并理解CH340芯片的功能和工作原理。
使用STM32CubeMX和Keil配合HAL库(或标准库)方式设置USART1:这一部分的目的是让您熟悉使用STM32CubeMX和Keil配合HAL库(或标准库)的方法来设置STM32的USART1串口。您将学习如何设置波特率、停止位、校验位等串口参数,并使用串口发送数据。
STM32系统给上位机(win10)连续发送“hello windows!”:通过这个任务,您将学会如何在STM32上设置串口并发送连续的数据到上位机。您将使用串口助手工具在Windows 10上接收来自STM32的数据。