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

  • 9
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值