1、天道酬勤齐 鲁 理 工 学 院 实 验 报 告 课程名称:微型计算机控制技术 2023.10.29 地点:D203 班级:2023级机制3班 姓名:杨帆 学号:171031010304 实验工程名称:串行通讯接口实验 实验指导教师:赵保华 实验成绩评定:一、 实验目的 通过实验掌握 USART 的功能。掌握 STM32 的 USART 的设置与运用。二、 实验设备 硬件:信盈达STM32 实验平台,STlink 仿真器套件,PC 机,串口连接线;软件:KEIL for ARMMDK集成开发环境,串口调试助手,Windows 7/8/10/XP。三、 实验内容 利用 PC 机的串口与信盈达Cot
2、ex-M3 实验平台的USART1进行输入输出通信。1把自己的个人信息姓名、学号,通过USART1发送到PC,PC通过串口助手显示出来。2通过 PC 机键盘往实验平台的 USART1发送字符,实验平台上的 USART1 将收到的字符再传回给 PC,在 PC串口助手上显示其串口接收到的字符。四、 实验原理 如 XYD-STM32F103 开发板 UART1 使用的是 CH340G 这个 USB 转换串口芯片,只需要使用 USB 线连接上,并且上安装了 CH340 芯片的硬件驱动程序,就会生成一个 COM 口,通过使用串口调试软件翻开这个 COM 口,就能实现开发板和 PC 机之间的通信了。五、
3、软件程序设计 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(
4、);/串口实现回显 uart.c参考程序:#include “stm32f10x.h“ #include “uart.h“ #include “stdio.h“ /xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 函数名:UART1_Init 形参:无 返回值:无 函数功能:串口1的初始化 PA9 - TX PA8 - RX xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/ void UART1_Init(void) GPIO_InitTypeDef GPIO_Initstruct
5、ure; 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_Initstructu
6、re);/管脚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协议数据位的的
7、位宽 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
8、;/使能接收和发送 USART_Init(USART1,&USART_Initstructure);/串口初始化 USART_Cmd(USART1,ENABLE);/使能串口1 /xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 函数名:fputc 形参:ch代表要得到的参数 xf代表数据保存的地方 返回值:返回得到的参数 函数功能:用户printf函数的调用 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/ int fputc (int ch, FILE xf) while(US
9、ART_GetFlagStatus(USART1,USART_FLAG_TXE) = RESET);/判断串口是否发送完数据 USART_SendData(USART1,ch);/从存放器中得到数据 return ch; /xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 函数名:USART1_Echo 形参:无 返回值:无 函数功能:串口1的回显功能 给开发板发送数据,开发板再把接收到的数据返回给 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/ void USART1_Echo
10、(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中的数据发送到 /xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 函数名:Show_
11、Logo 形参:无 返回值:无 函数功能:在上显示自己的logo xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/ void Show_Logo(void) printf(“xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxnr“); printf(“ 郑州信盈达电子nr“); printf(“ Welcome STM32 nr“); printf(“xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxnr“); uart.h参考程序:#ifndef _UART_H_ #
12、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 的设置与运用。感谢老师的指导和同学的帮助。