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