齐
鲁
理
工
学
院
实
验
报
告
课程名称:
微型计算机控制技术
时间:
2020.10.29
地点:
D203
班级:
2017级机制3班
姓名:
杨帆
学号:
***4
实验项目名称:
串行通讯接口实验
实验指导教师:
赵保华
实验成绩评定:
一、实验目的ü通过实验掌握
USART的功能。
掌握
STM32的USART的设置与运用。
二、实验设备
ü硬件:信盈达STM32
实验平台,STlink
仿真器套件,PC
机,串口连接线;
软件:KEIL
for
ARM(MDK)集成开发环境,串口调试助手,Windows
7/8/10/XP。
三、实验内容
利用
PC
机的串口与信盈达Cotex-M3
实验平台的USART1进行输入输出通信。
1)把自己的个人信息(姓名、学号),通过USART1发送到PC,PC通过串口助手显示出来。
2)通过
PC
机键盘往实验平台的USART1发送字符,实验平台上的USART1
将收到的字符再传回给
PC,在PC串口助手上显示其串口接收到的字符。
四、实验原理
如
XYD-STM32F103
开发板
UART1
使用的是
CH340G
这个
USB
转换串口芯片,只需要使用
USB
线连接上电脑,并且电脑上安装了
CH340
芯片的硬件驱动程序,电脑就会生成一个
COM
口,通过使用串口调试软件打开这个
COM
口,就能实现开发板和
PC
机之间的通信了。
五、软件程序设计
1、程序完成以下工作:
初始化串口;
重定义fputc函数,实现可以通过printf函数给电脑发送数据。
注意:重定义fputc之间需要打开微库。
检测串口接收器,如果有数据则从USART_DR寄存器中读取数据;
监测串口发送器,如果上一次数据已发送完成,将读取到的字符发送给PC,然后回到(3)。
main.c参考程序:
#include
“stm32f10x.h“
#include
“stdio.h“
#include
“uart.h“
int
main(void)
{
UART1_Init();//串口初始化
Show_Logo();//通过串口发送数据给PC
while(1)
{
USART1_Echo();//串口实现回显
}
}
uart.c参考程序:
#include
“stm32f10x.h“
#include
“uart.h“
#include
“stdio.h“
/****************************************************
函数名:UART1_Init
形参:无
返回值:无
函数功能:串口1的初始化
PA9
--
TX
PA8
--
RX
****************************************************/
void
UART1_Init(void)
{
GPIO_InitTypeDef
GPIO_Initstructure;
USART_InitTypeDef
USART_Initstructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA
|RCC_APB2Periph_USART1,ENABLE);//时钟的初始化
GPIO_Initstructure.GPIO_Pin
=
GPIO_Pin_9;
GPIO_Initstructure.GPIO_Mode
=
GPIO_Mode_AF_PP;
GPIO_Initstructure.GPIO_Speed
=
GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_Initstructure);//管脚9初始化为复用输出管脚
GPIO_Initstructure.GPIO_Pin
=
GPIO_Pin_10;
GPIO_Initstructure.GPIO_Mode
=
GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_Initstructure);//管脚10初始化为输入管脚
USART_Initstructure.USART_BaudRate
=
115200;//配置rs232协议的波特率
USART_Initstructure.USART_WordLength
=
USART_WordLength_8b;//配置rs232协议数据位的的位宽
USART_Initstructure.USART_StopBits
=
USART_StopBits_1;//配置rs232协议的停止位的位宽
USART_Initstructure.USART_Parity
=
USART_Parity_No;//配置rs232协议奇偶校验位
USART_Initstructure.USART_HardwareFlowControl
=
USART_HardwareFlowControl_None;//配置rs232协议的硬件流控制
USART_Initstructure.USART_Mode
=
USART_Mode_Rx
|
USART_Mode_Tx;//使能接收和发送
USART_Init(USART1,&USART_Initstructure);//串口初始化
USART_Cmd(USART1,ENABLE);//使能串口1
}
/****************************************************
函数名:fputc
形参:ch代表要得到的参数
*f代表数据保存的地方
返回值:返回得到的参数
函数功能:用户printf函数的调用
****************************************************/
int
fputc
(int
ch,FILE
*f)
{
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)
==
RESET);//判断串口是否发送完数据
USART_SendData(USART1,ch);//从寄存器中得到数据
return
ch;
}
/****************************************************
函数名:USART1_Echo
形参:无
返回值:无
函数功能:串口1的回显功能
电脑给开发板发送数据,开发板再把接收到的数据返回给电脑
****************************************************/
void
USART1_Echo(void)
{
u8
ch;
while(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)
==
RESET);//等待接收数据
ch
=
USART_ReceiveData(USART1);//把接收到的数据保存到ch中
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)
==
RESET);//等待上次发送数据发送完成USART_SendData(USART1,ch);//把ch中的数据发送到电脑
}
/****************************************************
函数名:Show_Logo
形参:无
返回值:无
函数功能:在电脑上显示自己的logo
****************************************************/
void
Show_Logo(void)
{
printf(“******************************************\n\r“);
printf(“
郑州信盈达电子有限公司\n\r“);
printf(“
Welcome
STM32
\n\r“);
printf(“******************************************\n\r“);
}
uart.h参考程序:
#ifndef
_UART_H_
#define
_UART_H_
void
UART1_Init(void);//串口1初始化
void
USART1_Echo(void);//串口1回显函数
void
Show_Logo(void);
//在终端上显示LOGO
#endif
六、实验操作步骤
准备实验环境
使用
STlink
仿真器连接
信盈达STM32
实验平台的主板
JTAG
接口;使用
实验平台附带的USB数据线,连接实验平台主板和PC。
新建工程,编写程序,完成软件设计
新建工程保存文件夹,复制相应的库文件;
在开发环境中新建工程,配置工程选项;
新建程序代码文件,添加到工程,完成程序编码,无误后将程序下载到开发板的Flash
中,按
RESET
键复位;
在PC
机上运行串口调试助手(波特率115200、1
位停止位、无校验位、无硬件流控制),发送数据到开发板,观察实验现象。
3.观察实验结果
1)在PC
机上,串口助手接收区显示学生信息;
2)通过串口调试助手发送数据,在接收区接收到同样的数据。
七、实验结果:
八、心得体会
通过本次实验,我学到了很多知识,通过学习实验,通过实验掌握
USART的功能。掌握
STM32的USART的设置与运用。感谢老师的指导和同学的帮助。