STM32串口通信入门


前言

串口协议和RS-232标准,以及RS232电平与TTL电平的区别

串口协议是计算机与外部设备通信时所遵循的一种通信协议,其实现需要硬件支持。RS-232是一种串行通信标准,定义了连接计算机和外围设备之间的物理和电气特性,主要用于传输数据和控制信号。RS-232标准规定了数据信号和控制信号的传输模式、数据格式、电气参数等。

RS-232标准定义了一组信号电平,包括正、负和地三种电平。其中,正电平信号表示逻辑0,负电平信号表示逻辑1。RS-232标准电平范围为±3至±15V,通常使用的电平为±12V。

TTL(Transistor-Transistor Logic)是一种数字电路家族,其输出电平只有高低两种,高电平通常为5V,低电平为0V。TTL电平是一种低电平电压,与RS-232的电平差异较大。

因此,如果要将RS-232接口与TTL接口连接,需要进行电平转换,即将RS-232信号转换为TTL信号或将TTL信号转换为RS-232信号。常见的电平转换芯片有MAX232和MAX3232等。

USB/TTL转232"模块(以CH340芯片模块为例)的工作原理

1.模块特点
CH340C USB转TTL模块以CH340C芯片为核心,内部自带晶振,最高波特率可达2Mbps,软件兼容CH341驱动,过流保护,引出相应的通讯接口与电源接口,通讯接口带有指示灯指示工作状态,通讯稳定,体积小。
全速USB驱动,兼容USB2.0
硬件全双工串口,内置收发缓冲区
支持波特率50bps~2Mbps
输出TTL电平3.3V,兼容5V的IO电平
模块接口引脚
请添加图片描述

一、HAL库中断方式进行串口通信

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

1)STM32系统给上位机(win10)连续发送“hello windows!”。win10采用“串口助手”工具接收。

打开stm32CubeMX,创建新工程,选择STM32F103C8T6芯片
请添加图片描述
RCC设置
请添加图片描述
SYS设置请添加图片描述
USART1设置
请添加图片描述
NVIC设置
请添加图片描述
时钟设置
请添加图片描述设置完成后保存并打开工程
请添加图片描述
在main函数前定义全局变量

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.开始发送

main函数中的while循环里面添加传输代码

if(flag==1){
			//发送信息
			HAL_UART_Transmit(&huart1, (uint8_t *)&message, strlen(message),0xFFFF); 
			
			//延时
			HAL_Delay(1000);
		}

在main函数下面重写中断处理函数

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);  
}

编译后烧录
请添加图片描述

烧录结果
请添加图片描述

在完成以上任务基础,继续扩展功能:当上位机给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;  
      }  
    }  

编译烧录,烧录结果:
请添加图片描述

二、使用Keil的软件仿真逻辑分析仪功能观察串口输出波形

可以使用Keil的软件仿真逻辑分析仪功能观察串口输出波形,并分析时序状态正确与否,计算波特率实际为多少。
具体参考:http://t.csdnimg.cn/OfjK0
查看peripherals中的USART1可看到其波特率实际为115107baud
请添加图片描述
请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值