文章目录
前言
串口协议和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