实验4 串口通信实验

  • Post author:
  • Post category:其他



一、实验目的

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


二、实验设备

硬件: PC机             一台

STM32开发板     一套

软件: MDK V4.0         一套

Windows 7        一套

调试助手        一套


  • 实验原理


1、



开发板串口电路图:




2、状态寄存器USART_SR及函数






5





6







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通信。以后在学习中,依然会戒骄戒躁,更多地去注重动手能力,让自己课堂上所学的可以在项目中运用,达到熟能生巧。



版权声明:本文为weixin_45784275原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。