使用stm32的USART实现串口通信程序

1、USART介绍

通用同步异步收发器(Universal Synchronous Asynchronous Receiver and Transmitter)是一个串行通信设备,可以灵活地与外部设备进行全双工数据交换。有别于 USART 还有一个UART(Universal Asynchronous Receiver and Transmitter),它是在 USART 基础上裁剪掉了同步通信功能,只有异步通信。简单区分同步和异步就是看通信时需不需要对外提供时钟输出,我们平时用的串口通信基本都UART。
串行通信一般是以帧格式传输数据,即是一帧一帧的传输,每帧包含有起始信号、数
据信息、停止信息,可能还有校验信息。USART 就是对这些传输参数有具体规定,当然也不是只有唯一一个参数值,很多参数值都可以自定义设置,只是增强它的兼容性。

2、实验要求

1)设置波特率为115200,1位停止位,无校验位;

2)STM32系统给上位机(win10)连续发送“hello windows!”。win10采用“串口助手”工具接收。

3、程序编写

我的程序编写采用的是标准库文件编写

1)配置时钟
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-78Z9d5iX-1668431003782)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20221017133636933.png)]

将APB2下的USART时钟和GPIOA时钟打开

2)初始化GPIOA端口
      GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AdSd6p3G-1668431003785)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20221017133815133.png)]

输出模式采用复用推挽输出,配置为端口9,速度为50Mhz,最后使用GIPO_Init函数初始化

3)配置USART1
        USART_InitTypeDef USART_InitStructure;//定义一个USART结构体变量USART_InitStructure.USART_BaudRate = 115200;//配置波特率为115200USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//硬件流控制,这里选择不适用流控USART_InitStructure.USART_Mode = USART_Mode_Rx|USART_Mode_Tx;//配置串口模式,同时发送和接收USART_InitStructure.USART_Parity = USART_Parity_No;//校验位配置为无校验USART_InitStructure.USART_StopBits = USART_StopBits_1;//1位停止位USART_InitStructure.USART_WordLength = USART_WordLength_8b;//由于不需要校验位,选择8位字长USART_Init(USART1,&USART_InitStructure);//使用USART_Init函数初始化

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ftu7KS1r-1668431003786)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20221017141539284.png)]

4)定义将要发送的数组

定义一个缓存区数组

uint8_t Serial_TxPacket[14];//由于需要发送的字符串为‘hello windows!’长度14位

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8xcgeJK4-1668431003787)(C:\Users\lenovo\AppData\Roaming\Typora\typora-user-images\image-20221017141704190.png)]

定义具体内容

     Serial_TxPacket[0]=0x68;//hSerial_TxPacket[1]=0x65;//eSerial_TxPacket[2]=0x6c;//lSerial_TxPacket[3]=0x6c;//lSerial_TxPacket[4]=0x6f;//oSerial_TxPacket[5]=0x20;//(空格)Serial_TxPacket[6]=0x77;//wSerial_TxPacket[7]=0x69;//iSerial_TxPacket[8]=0x6e;//nSerial_TxPacket[9]=0x64;//dSerial_TxPacket[10]=0x6f;//oSerial_TxPacket[11]=0x77;//wSerial_TxPacket[12]=0x73;//sSerial_TxPacket[13]=0x21;//!

Serial_TxPacket[0]=0x68;//h
Serial_TxPacket[1]=0x65;//e
Serial_TxPacket[2]=0x6c;//l
Serial_TxPacket[3]=0x6c;//l
Serial_TxPacket[4]=0x6f;//o
Serial_TxPacket[5]=0x20;//(空格)
Serial_TxPacket[6]=0x77;//w
Serial_TxPacket[7]=0x69;//i
Serial_TxPacket[8]=0x6e;//n
Serial_TxPacket[9]=0x64;//d
Serial_TxPacket[10]=0x6f;//o
Serial_TxPacket[11]=0x77;//w
Serial_TxPacket[12]=0x73;//s
Serial_TxPacket[13]=0x21;//!

发送数组的函数

Serial_SendArray(Serial_TxPacket, 14);//发送一个数组

5)总函数
#include "stm32f10x.h"                  // Device header
#include "Serial.h"uint8_t Serial_TxPacket[14];//由于需要发送的字符串为‘hello windows!’长度14位int main(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//配置端口GPIOA-9参数GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//输出模式采用复用推挽输出GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;//配置为端口9GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度为50MhzGPIO_Init(GPIOA, &GPIO_InitStructure);//使用USART_Init函数初始化//初始化USART1USART_InitTypeDef USART_InitStructure;//定义一个USART结构体变量USART_InitStructure.USART_BaudRate = 115200;//配置波特率为115200USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//硬件流控制,这里选择不适用流控USART_InitStructure.USART_Mode = USART_Mode_Rx|USART_Mode_Tx;//配置串口模式,同时发送和接收USART_InitStructure.USART_Parity = USART_Parity_No;//校验位配置为无校验USART_InitStructure.USART_StopBits = USART_StopBits_1;//1位停止位USART_InitStructure.USART_WordLength = USART_WordLength_8b;//由于不需要校验位,选择8位字长USART_Init(USART1,&USART_InitStructure);//使用USART_Init函数初始化USART_Cmd(USART1,ENABLE);//Serial_SendByte(0x41);//测试用,发送数据0x41//定义发送数据包中的数据值Serial_TxPacket[0]=0x68;//hSerial_TxPacket[1]=0x65;//eSerial_TxPacket[2]=0x6c;//lSerial_TxPacket[3]=0x6c;//lSerial_TxPacket[4]=0x6f;//oSerial_TxPacket[5]=0x20;//空格Serial_TxPacket[6]=0x77;//wSerial_TxPacket[7]=0x69;//iSerial_TxPacket[8]=0x6e;//nSerial_TxPacket[9]=0x64;//dSerial_TxPacket[10]=0x6f;//oSerial_TxPacket[11]=0x77;//wSerial_TxPacket[12]=0x73;//sSerial_TxPacket[13]=0x21;//!Serial_SendArray(Serial_TxPacket, 14);//调用发送数组函数,发送上边定义的数组“hello ”while(1){}
}

这里未将发送函数置于while循环中,需要多次发送时,将stm32核心板每复位一次就发送一次数据

4、烧录运行

线路连接

对于USB转TTL

PA10—TXD

PA9—RXD

3.3—3V3

GND—GND

对于ST-Link

SWCLK—SWCLK

SWDIO—SWIO

GND—GND

3V3—3V3

烧录运行

将两个USB接口接到电脑USB接口上,点击Download将程序烧录到板子上

提示Flash Load finished表示烧录完成

此时打开串口助手,选择串口,配置好波特率,数据位,停止位,校验位,最后打开串口,选择接受模式为文本模式


stm32实现串口通信相关推荐

  1. STM32 —— STM32 的串口通信

    STM32 -- STM32 的串口通信 STM32的串口通信接口有两种,分别是:UART(通用异步收发器).USART(通用同步异步收发器).而对于大容量 STM32F10x 系列芯片,分别有 3 ...

  2. Ardunio下实现STM32的串口通信及其与Stduino的区别

    摘要 本文介绍了在Ardunio下配置STM32并进行STM32的串口通信:之后我将介绍一下国人MCU开发平台Stduino与现在所使用的Arduino进行比较. 文章目录 摘要 :man_stude ...

  3. 单片机与PC机的交流———基于STM32的串口通信

    STM32之串口通信程序 前言: 一.串口通信要求 二.串口通信准备 1.硬件准备 2.软件准备 三.下载程序进入STM32 1.下载之前相关配置 2.下载 四.最终效果展示 总结: 前言: 本文主要 ...

  4. K210学习笔记(三) K210与STM32进行串口通信,K210发STM收

    文章目录 前言 一.以/r/n为结尾 二.K210端代码 三.STM32端 3.1 main函数 四.测试结果 4.1当收到1时 4.2当收到2时 4.3 测试视频 总结 前言 前面我们讲了STM32 ...

  5. 嵌入式STM32入门之STM32基础串口通信

    STM32基础串口通信 一.前言 二.串口协议 (1)浅谈设备通信方式 (2)具体串口协议 (3)STM32的串口通信 (4)RS-232通信协议 (5)USB To TTL(CH340) 5.1 C ...

  6. 【星曈科技】OpenMv笔记——利用OpenMV与STM32进行串口通信

    利用OpenMV与STM32进行串口通信 OpenMV端的程序 # Untitled - By: dell - 周一 7月 19 2021# Blob Detection and uart trans ...

  7. javarxtx串口接收时数据会分成好几段_【STM32】串口通信基本原理(超基础、详细版)...

    STM32F1xx官方资料: <STM32中文参考手册V10>-第25章通用同步异步收发器(USART) 通信接口背景知识 设备之间通信的方式 一般情况下,设备之间的通信方式可以分成并行通 ...

  8. STM32下串口通信——汇编

    文章目录 一.串口通信的方式 1.串行和并行通信 2.同步通信和异步通信 3.单工.全双工和半双工通信 二.串口的通信协议 1.电平标准 2. 协议层 3.串口数据包的基本组成 三.STM32串口以及 ...

  9. 基于STM32实现串口通信输出hello windows!

    文章目录 前言 一.介绍 1.串口协议和RS-232.485标准 2.RS232.485电平与TTL电平的区别 3.USB/TTL转232模块的工作原理 二.安装 1.安装STM32CubeMX 2. ...

最新文章

  1. c语言插入排序算法伪代码,排序算法——插入排序(C语言实现)
  2. 假设训练数据集中有10万个词,四元语法需要存储多少词频和多词相邻频率?《动手学深度学习 李沐》 转
  3. Linux下uniq筛选
  4. xtrabackup 安装、备份和恢复
  5. 聊聊高并发(六)实现几种自旋锁
  6. JavaWeb学习笔记(九)--HttpServletResponse
  7. Linux一行代码修改时区
  8. 联合多企业成立泛娱乐IP联盟 迅雷将打造新内容消费生态
  9. vue+element tree(树形控件)组件(1)
  10. runtime 的 assemblyIdentity 元素和bindingRedirect 元素
  11. vi+ctags+cscope联合使用
  12. HSRP协议详解:配置HSRP实现网关的冗余备份
  13. python调用本地exe_python调用exe程序 python怎么调用exe程序
  14. 如何设置二级域名解析(新手小白必看)
  15. html里 alt属性什么意思,HTML
  16. Android核心 intent基础
  17. 泰坦尼克号生存者预测(细节篇)
  18. 在线运行Java代码获取APNIC中国区的ip段,用作绕过国内ip
  19. python中调用linux命令报错cat: -: Bad file descriptor
  20. 服务器cpu支持4通道什么意思,Intel 10nm服务器CPU曝光 LGA4189接口、八通道内存

热门文章

  1. 分布式数据库同步系统之Otter
  2. 由一道bash jail题引出的琐事@_@
  3. 计算机辅助设计在环境工程中的应用,试论计算机辅助设计在环境工程中的应用原稿(范文1)...
  4. zynq linux如何使用pl ip,ZYNQ+linux网口调试笔记(3)PL-ETH
  5. excel matlab日期,Excel日期格式在matlab中的转换
  6. 华为认证HCIP难考吗?
  7. [机器学习]Lasso,L1范数,及其鲁棒性
  8. 沈阳二本计算机工资,想进国家电网?这两所二本超过很多985!
  9. android5.0源码开发之NVRam存储,恢复出厂设置数据不被擦除--上篇
  10. 第三章:期货合约与期货交易制度