stm32串口通讯完成,STM32的USART窗口通讯程序
一、实验目标
野火板子发送hello windows!,电脑给板子发送Stop,stm32后,stm32停止发送。
具体任务如下:
学习和阅读“零死角玩转STM32F103–指南者”文档中的第20、21章内容,完成STM32的USART窗口通讯程序,要求:
1)设置波特率为115200,1位停止位,无校验位。
2)STM32系统给上位机(win10)连续发送“hello windows!”,上位机接收程序可以使用“串口调试助手“,也可自己编程。
3)当上位机给stm32发送“Stop,stm32”后,stm32停止发送。
二、实验过程
1、串口通信原理
参考资料为“零死角玩转STM32F103–指南者”文档中的第20、21章内容
串口通信是一种设备间非常常见的串口通信方式。串口通信有许多的标准。下面是常见的标准——RS-232标准。
RS-232被定为一种在低速率串行通讯中增加通讯距离的单端标准。我们一般使用DB9接口,通常是有9针的接口。具体管脚如下:
管教名称 | 说明 |
---|---|
DCD | 数据载波检测,告知对方是否收到载波信号 |
RXD | 输入 |
TXD | 输入 |
DTR | 告知对方主机准备好 |
GND | 地线 |
DSR | 告知对方主机待命 |
RTS | 请求发送数据 |
CTS | 告知对方是否可以发送数据 |
RI | 响铃指示,线路连通 |
使用DB9我们要将TTL电平转换为RS-232电平。
电平 | 电平标准 |
---|---|
TTL | 逻辑1: 2.4~5V 逻辑0: 0~0.5V 中间为无法判断区域 |
RS-232 | 逻辑1:-15~-3V 逻辑0: +3~+15V 中间为无法判断区域 |
我们可以看出TTL 转为RS-232大大增加了信号的传输的稳定性。
2、连接电路
我们实验目的是使用RXD、TXD通信,为了达到与电脑的串口通信,我们要使用CH340G芯片,即实现USB转串口通信的芯片。设计图如下:
下面为stm32芯片和USB-转串口的连接方式。
实际如下:
野火Stm32板子将CH340G芯片做到了板子中,直接连接USB如下:
3、实验代码
发送数据代码
//发送一个字符
void Usart_SendByte(USART_TypeDef * pUSARTx, uint8_t ch)
{
//发送一个字符到USART
USART_SendData(pUSARTx, ch);
//等待发送数据寄存器为空
while(USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);
}
//发送字符串
void Usart_SendString(USART_TypeDef * pUSARTx, char *str)
{
do
{
Usart_SendByte(pUSARTx, *str++);
}while(*str != '\0');
// 等待发送成功
while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC) == RESET);
}
重定向输入输出函数
//重定向C函数prinf(),重定向后可以使用接收中断
int fputc(int ch, FILE *f)
{
//发送一个字节到串口
USART_SendData(DEBUG_USARTx, (uint8_t) ch);
// 等待发送完毕
while(USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_TXE) == RESET);
return (ch);
}
//重定向c函数scanf函数,重定向后可以使用scanf、getchar
int fgetc(FILE *f)
{
// 等待串口输入数据
while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_RXNE) == RESET);
return (int)USART_ReceiveData(DEBUG_USARTx);
}
完整代码
代码参考:stm32串口通信 —— USART通信实践
4、烧录代码
使用mcuisp烧录
打开串口调试助手