【无标题】

实验任务:

了解串口协议和RS-232标准,以及RS232电平与TTL电平的区别;了解"USB/TTL转232"模块(以CH340芯片模块为例)的工作原理。 使用HAL库(或标准库)方式,设置USART1 波特率为115200,1位停止位,无校验位,分别采用中断方式、DMA方式完成下列任务:

STM32系统给上位机(win10)连续发送“hello windows!”;当上位机给stm32发送字符“stop”后,stm32暂停发送“hello windows!”;发送一个字符“start”后,stm32继续发送;

一、了解串口协议和RS-232标准
1.串口协议
串口协议是一种用于在计算机和外部设备之间进行数据通信的协议。其中,RS-232是一种常用的串口通信标准,定义了用于串行通信的电气特性和信号传输规范。RS-232标准使用不同电平表示二进制数据,包括数据位、停止位和校验位等信息。

2.RS-232标准
RS-232标准定义了两个逻辑电平:逻辑1和逻辑0。在RS-232中,逻辑1通常由负电平表示,而逻辑0通常由正电平表示。RS-232标准使用负电平表示逻辑1是因为在通信线路中,负电平更容易受到干扰,因此可以更好地保持信号的稳定性。

3.RS232电平与TTL电平的区别
RS-232电平和TTL(Transistor-Transistor Logic,晶体管-晶体管逻辑)电平是两种不同的电平标准。RS-232电平用于串口通信,而TTL电平用于数字电路和逻辑电路中。

主要区别如下:
电压级别:RS-232电平通常采用正负电压,比如正电平范围为+3V到+15V,负电平范围为-15V到-3V。而TTL电平通常使用0V和5V作为电平表示。
电流:RS-232标准定义了较高的电流要求,以便在较长距离上进行可靠的通信。而TTL电平通常具有较低的电流要求。
信号传输距离:RS-232电平可以在较长的距离上进行通信,通常达到数十米甚至更远。而TTL电平在短距离内通信更为常见。
4.USB/TTL转RS-232模块(以CH340芯片模块为例)的工作原理
USB/TTL转RS-232模块是一种用于将USB接口转换为RS-232电平的设备,常用于连接计算机和串口设备之间的通信。以CH340芯片模块为例,它是一种常见的USB转串口芯片。
工作原理如下:
USB通信:USB/TTL转RS-232模块通过USB接口与计算机连接,通过USB通信协议与计算机进行数据交换。
芯片转换:模块中的CH340芯片负责将USB信号转换为TTL电平信号。它将计算机通过USB接口发送的数据转换为TTL电平信号,并将其发送到模块的TTL串口引脚。
RS-232转换:模块上的其他电路和芯片负责将TTL电平信号转换为RS-232电平信号。这通常涉及电平转换电路和驱动器,将TTL电平信号转换为符合RS-232标准的正负电平信号。
串口通信:通过RS-232电平信号,模块可以与外部串口设备进行通信,例如与串口打印机、串口终端或其他串口设备进行数据交换。
通过USB/TTL转RS-232模块,可以方便地将计算机与串口设备连接起来,实现数据的传输和通信。

基于HAL库中断方式进行串口通信

一)在STM32CubeMX中新建文件
1.RCC时钟配置
在这里插入图片描述

设置usart1
在这里插入图片描述
3.串口中断使能
在这里插入图片描述
时钟设置
4.串口中断通信程序编写
相关标志位及发送接收字符串变量的定义
uint8_t RX_str; //串口接收变量
uint8_t flag=0; //串口发送的全局标志位
uint8_t Uart1_TXBuff[]=“hello windows!\r\n”;
uint8_t STOP[]=“stop stm32!”;
uint8_t START[]=“go stm32!”;

USART1初始化配置函数
/* USART1 init function */

void MX_USART1_UART_Init(void)
{

/* USER CODE BEGIN USART1_Init 0 */

/* USER CODE END USART1_Init 0 */

/* USER CODE BEGIN USART1_Init 1 */

/* USER CODE END USART1_Init 1 */
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart1) != HAL_OK)
{
Error_Handler();
}
``
main函数
在main函数中写入下列程序,将目标字符串发送至PC端的上位机,while语句中,满足条件则发送“hello windows!"

HAL_UART_Receive_IT(&huart1, (uint8_t *)&RX_str, 1); //打开串口接收中断

/* Infinite loop /
/
USER CODE BEGIN WHILE /
while (1)
{
/
USER CODE END WHILE /
if(flag==0)
{
HAL_UART_Transmit(&huart1, (uint8_t
)Uart1_TXBuff, sizeof(Uart1_TXBuff), 100); //发送"hello windows!"
}

HAL_Delay(500);

/* USER CODE BEGIN 3 */

}

串口中断服务函数

void USART1_IRQHandler(void)
{
/* USER CODE BEGIN USART1_IRQn 0 */

/* USER CODE END USART1_IRQn 0 /
HAL_UART_IRQHandler(&huart1); //串口接收中断服务函数入口
/
USER CODE BEGIN USART1_IRQn 1 */

/* USER CODE END USART1_IRQn 1 /
}
回调函数
/
USER CODE BEGIN 4 */

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(RX_str==‘s’||RX_str==*STOP)
{
flag=1;
}
else if(RX_str ‘t’||RX_str*START)
{
flag=0;
}
HAL_UART_Receive_IT(&huart1, (uint8_t *)&RX_str, 1); //重新打开串口接收中断
}

/* USER CODE END 4 */

5、实验结果
使用串口通信助手进行串口通信
实现功能
1)当stm32接收到字符“s”时,停止持续发送“hello windows!”; 当接收到字符“t”时,持续发送“hello windows!”
2)当stm32接收到字符“stop stm32!”时,停止持续发送“hello windows!”; 当接收到字符“go stm32!”时,持续发送“hello windows!”

在这里插入图片描述
二、DMA方式的串口通信
1DMA概述
DMA,直接存储访器问,用于在外设与存储器之间以及存储器与存储器之间进行高速数据传输。DMA传输过程的初始化和启动由CPU完成,传输过程由DMA控制器来执行,无需CPU参与,从而节省CPU资源,提高利用率。

DMA设置
点击DMA Settings的Add添加通道,传输速率设置为中速Medium,模式设置为Normal,勾选Memory

在这里插入图片描述
点击System Core下的DMA,添加MEMTOMEN,

在这里插入图片描述
时钟树配置
在这里插入图片描述
3程序编写
在main.c文件添加代码

uint8_t Senbuff[] = “Hello world!\r\n”; //定义数据发送数组

在这里插入图片描述
在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察串口输出波形,并分析时序状态正确与否,计算波特率实际为多少。
Keil的软件仿真逻辑分析仪功能观察串口输出波形
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值