一、实验目的
- 掌握STM32串口通信原理。
- 学习编程实现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通信。以后在学习中,依然会戒骄戒躁,更多地去注重动手能力,让自己课堂上所学的可以在项目中运用,达到熟能生巧。
搜索
复制