实验4 串口通信实验

一、实验目的

  1. 掌握STM32串口通信原理。
  2. 学习编程实现STM32的UART通信。

二、实验设备

硬件: PC机             一台

       STM32开发板     一套

软件: MDK V4.0         一套

       Windows 7        一套

调试助手        一套

  • 实验原理

1、开发板串口电路图:

 

2、状态寄存器USART_SR及函数

56 RXNE TC

RXNE(读数据寄存器非空),当该位被置1的时候,就是提示已经有数据被接收到了,并且可以读出来了。

TC(发送完成),当该位被置位的时候,表示USART_DR内的数据已经被发送完成了。

在固件库函数里面,读取串口状态的函数是:

FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx,  uint16_t  USART_FLAG )

这个函数的第二个入口参数非常关键,它是标示我们要查看串口的哪种状态,比如上面讲解的RXNE(读数据寄存器非空)以及TC(发送完成)

例如要判断读寄存器是否非空(RXNE),操作库函数的方法是:

USART_GetFlagStatus(USART1,USART_FLAG_RXNE);

要判断发送是否完成(TC),操作库函数的方法是:

USART_GetFlagStatus(USART1,USART_FLAG_TC);

/****************************************************************/

3、串口编程为如下步骤:

1) 串口时钟使能, GPIO 时钟使能

配置时钟,由于使用串口是在复用IO口,需要打开串口时钟和相应的IO口时钟。

2)GPIO 端口模式设置

串口相应的IO口需要配置,输出口配置成复用推挽输出,输出速度根据需要配置,输入口配置为悬空输入

3)串口参数初始化,使能串口。(串口调试助手 与之一致

USART_InitTypeDef    USART_InitStructure;  

USART_InitStructure.USART_BaudRate = 115200;  //波特率

USART_InitStructure.USART_WordLength = USART_WordLength_8b;//8位  

USART_InitStructure.USART_StopBits = USART_StopBits_1;  //1位停止位

USART_InitStructure.USART_Parity = USART_Parity_No;  //无奇偶校验位

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;  //无硬件数据流控制  

USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;  

 //收发模式

USART_Init(USART1, &USART_InitStructure );   //初始化串口1

 //USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启接收中断。若无中断,该项不需要  

 USART_Cmd(USART1, ENABLE);                    //使能串口1

4)初始化 NVIC且开启中断(若开启中断才需要该步骤)

NVIC_InitTypeDef    NVIC_InitStructure;  

    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;  

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;

    //抢占优先级0,级别可自己设定 ,下面的子优先级可自定

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;      //子优先级2  

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;   

//IRQ通道使能  

    NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器  

5)编写中断处理函数 

4、调试助手 使用方法

1)将编译好的程序下载到开发板上。(此时需将 串口调试助手 关闭串口)。

2)调用调试助手软件,设置COM口,参数配置为115200 8-N-1,打开串口。见下图

3)按开发板复位键,即可在串口调试助手上显示出我们程序中要打印的信息。

四、实验内容

1、用STM32设计一个与计算机进行串口通讯的实验。STM32向PC发送 123ABC ,用串口调试助手 显示出来查询方式完成。

2、用STM32设计一个与计算机进行串口通讯的实验。PC向STM32发送 456789 ,STM32接收后,将 每位数值+3 发送给PC,用 串口调试助手 显示出来”789ABC”中断方式完成。

3、用STM32设计一个与计算机进行串口通讯的实验,利用PC控制LED的亮灭。定时时间用定时器来完成。

        (1)PC向STM32发送 A ,控制LED1,LED2,LED3同时亮灭,间隔时间0.5S,同时在 串口调试助手 显示 “LED1,LED2,LED3同时亮灭”。

        (2)PC向STM32发送 B ,控制LED1,LED2,LED3正向流水亮灭,间隔时间1S,同时在 串口调试助手 显示 “LED1,LED2,LED3正向流水亮灭”。

        (3)PC向STM32发送 C ,控制LED1,LED2,LED3反向流水亮灭,间隔时间2S,同时在 串口调试助手 显示 “LED1,LED2,LED3反向流水亮灭”。

用STM32设计一个与计算机进行串口通讯的实验。STM32向PC发送 123ABC,用串口调试助手显示出来,查询方式完成。(代码:实验4-1)

(一)main主函数程序

 Usart.c函数   ,串口1中断服务程序

 usart.h函数

用STM32设计一个与计算机进行串口通讯的实验。PC向STM32发送 456789 ,STM32接收后,将 每位数值+3 发送给PC,用 串口调试助手 显示出来,用中断方式完成。(代码:实验4-2)

(一)main主函数程序

 (二)usart串口初始化程序

 (三)usart中的串口1中断服务程序

(四)usart.h程序如下

用STM32设计一个与计算机进行串口通讯的实验,利用PC控制LED的亮灭。(代码:实验4-3)

(一)Led初始化程序

(二)usart的初始化程序

 (三)delay函数程序的编写

 (四)main主函数程序的编写

 

4.实验总结。

在本实验中——串口通信实验,学习到了如何使用串口去进行单片机和电脑之间的通信,以及烧录的方式。比较了解了STM32串口通信原理。学习了如何使用编程去实现STM32的UART通信。以后在学习中,依然会戒骄戒躁,更多地去注重动手能力,让自己课堂上所学的可以在项目中运用,达到熟能生巧。  

猜你喜欢

转载自blog.csdn.net/weixin_45784275/article/details/125425643