目录
一、USART、串口通信与中断方式简介
USART简介
通用同步异步收发器(Universal Synchronous Asynchronous Receiver and Transmitter)是一个串行通信设备,可以灵活地与外部设备进行全双工数据交换。有别于 USART 还有一个UART(Universal Asynchronous Receiver and Transmitter),它是在 USART 基础上裁剪掉了同步通信功能,只有异步通信。简单区分同步和异步就是看通信时需不需要对外提供时钟输
出,我们平时用的串口通信基本都是 UART。
说明:
任何USART双向通信至少需要两个引脚:接收数据输入(RX)和发送数据输出(TX)。
RX:接收数据串行输入。通过过采样技术来区别数据和噪音,从而恢复数据。
TX:发送数据串行输出。当发送器被禁止时,输出引脚恢复到它的I/O端口配置。当发送器被激活且不发送数据时,TX引脚处于高电平。在单线和智能卡模式里,此I/O口被同时用于数据的发送和接收。
SCLK:发送器时钟输出。此引脚输出用于同步传输的时钟, (在Start位和Stop位上没有时钟脉冲,软件可选地,可以在最后一个数据位送出一个时钟脉冲)。数据可以在RX上同步被接收。这可以用来控制带有移位寄存器的外部设备(例如LCD驱动器)。时钟相位和极性都是软件可编程的。在智能卡模式里,CK可以为智能卡提供时钟。
在IrDA模式里需要下列引脚:
IrDA_RDI: IrDA模式下的数据输入。
IrDA_TDO: IrDA模式下的数据输出。
在硬件流控模式里需要下列引脚:
nCTS: 清除发送,若是高电平,在当前数据传输结束时阻断下一次的数据发送。
nRTS: 发送请求,若是低电平,表明USART准备好接收数据
STM32F103VET6 系统控制器有三个 USART 和两个 UART,UART(通用异步收发器)只是异步传输功能,所以没有 SCLK、nCTS 和 nRTS 功能引脚。
串口通信简介
串行通讯是指设备之间通过少量数据信号线,地线以及控制信号线,按数据位形式一位一位地传输数据的通讯方式。
分类:
单工:数据传输只支持数据在一个方向上传输。
半双工:允许数据在两个方向上传输。但同一时刻只允许数据在一个方向上传输,它实际上是一种能够切换方向的单工通信,不需要独立的接收端和发送端,两者可以合并使用一个端口。
全双工:允许数据同时在两个方向上传输。因此全双工通信是两个单工通信方式的结合,需要独立的接收端和发送端。
中断方式简介
中断方式指的是一方通过申请中断的方式与另一方进行数据传输,收发双方可以并行工作。
中断全过程可以分为中断发生、中断处理、中断返回。中断发生指的是当CPU在处理某一事件A时,发生了另一事件B,请求CPU迅速去处理;中断处理指的是CPU暂停当前的工作,转去处理事件B;终端返回指的是当CPU将事件B处理完毕后,再回到事件A中被暂停的地方继续处理事件A。
中断优先级:处理器根据不同中断的重要程序设置不同的优先等级。不同优先级中断的处理原则是:高级中断可以打断低级中断;低级中不能打断高级中断,整个优先级可以整理为如下示意图:
二、实验内容与实验过程
1、实验内容
学习 stm32 串口中断,采用串口中断方式重做汇编输出 hello windows!要求:
1)设置波特率为115200,1 位停止位,无校验位。
2)STM32 系统给上位机( win10 )连续发送“hello windows!”。win10 采用“串口助手”工具接收。
2、实验过程
2.1 代码准备
在编写这个代码时我们需要先准备一个工程模板,可以去这里的链接自取:https://pan.baidu.com/s/14oklbRIN8pNxNiGjx6crgw 提取码:luha。根据指南者配套开发的程序再修改得来,此外我们还需要准备一些烧录软件、串口调试助手和STM32核心板。
2.2 代码修改
编写代码时,需要对这些代码进行修改,其余的都是库文件:
GPIO 和 USART 宏定义:
/*串口1-USART1 */
#define DEBUG_USARTx USART1 //定义串口一
#define DEBUG_USART_CLK RCC_APB2Periph_USART1
#define DEBUG_USART_APBxClkCmd RCC_APB2PeriphClockCmd
#define DEBUG_USART_BAUDRATE 115200 //设置波特率为 115200
/*USART GPIO 引脚宏定义*/