STM32的USART串口通讯程序

文章目录

一、了解串口通信及准备工作

1.串口通信简介

代码如下(示例):

串行通讯是指设备之间通过少量数据信号线,地线以及控制信号线,按数据位形式一位一位地传输数据的通讯方式。

分类
单工:数据传输只支持数据在一个方向上传输。
半双工:允许数据在两个方向上传输。但同一时刻只允许数据在一个方向上传输,它实际上是一种能够切换方向的单工通信,不需要独立的接收端和发送端,两者可以合并使用一个端口。
全双工:允许数据同时在两个方向上传输。因此全双工通信是两个单工通信方式的结合,需要独立的接收端和发送端。

2.STM32 的 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 功能引脚。

二、程序编写输出Hello Windows

1.实验要求

  • 设置波特率为115200,1位停止位,无校验位。
  • STM32给上位机(win10)连续发送hello Windows,上位机接收程序使用“串口调试助手“。
  • 当上位机给stm32发送Stop,stm32后,stm32停止发送。
    2.实验原理
  • 串口接收
    由于前面已经配置好了stm32的串口1中断,因此当上位机给stm32发送数据时就会触发该中断进入中断处理函数USART1_IRQHandler()接收数据并保存到接受数据缓冲区。
  • 串口发送
    当串口接收完数据并存储到接受数据缓冲区后,主程序就将该缓冲区中的数据按位放到发送数据缓冲区中并发送出去,由上位机的串口调试助手显示stm32发送出来的数据。

创建新项目
选择对应芯片
在这里插入图片描述
在这里不要勾选 直接OK
请添加图片描述
在文件夹下新建hello Windows.s文件:
请添加图片描述
编写代码:

;RCC寄存器地址映像             
RCC_BASE            EQU    0x40021000 
RCC_CR              EQU    (RCC_BASE + 0x00) 
RCC_CFGR            EQU    (RCC_BASE + 0x04) 
RCC_CIR             EQU    (RCC_BASE + 0x08) 
RCC_APB2RSTR        EQU    (RCC_BASE + 0x0C) 
RCC_APB1RSTR        EQU    (RCC_BASE + 0x10) 
RCC_AHBENR          EQU    (RCC_BASE + 0x14) 
RCC_APB2ENR         EQU    (RCC_BASE + 0x18) 
RCC_APB1ENR         EQU    (RCC_BASE + 0x1C) 
RCC_BDCR            EQU    (RCC_BASE + 0x20) 
RCC_CSR             EQU    (RCC_BASE + 0x24) 
                              
;AFIO寄存器地址映像            
AFIO_BASE           EQU    0x40010000 
AFIO_EVCR           EQU    (AFIO_BASE + 0x00) 
AFIO_MAPR           EQU    (AFIO_BASE + 0x04) 
AFIO_EXTICR1        EQU    (AFIO_BASE + 0x08) 
AFIO_EXTICR2        EQU    (AFIO_BASE + 0x0C) 
AFIO_EXTICR3        EQU    (AFIO_BASE + 0x10) 
AFIO_EXTICR4        EQU    (AFIO_BASE + 0x14) 
                                                           
;GPIOA寄存器地址映像              
GPIOA_BASE          EQU    0x40010800 
GPIOA_CRL           EQU    (GPIOA_BASE + 0x00) 
GPIOA_CRH           EQU    (GPIOA_BASE + 0x04) 
GPIOA_IDR           EQU    (GPIOA_BASE + 0x08) 
GPIOA_ODR           EQU    (GPIOA_BASE + 0x0C) 
GPIOA_BSRR          EQU    (GPIOA_BASE + 0x10) 
GPIOA_BRR           EQU    (GPIOA_BASE + 0x14) 
GPIOA_LCKR          EQU    
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值