stm32实现串口通信
使用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实现串口通信相关推荐
- STM32 —— STM32 的串口通信
STM32 -- STM32 的串口通信 STM32的串口通信接口有两种,分别是:UART(通用异步收发器).USART(通用同步异步收发器).而对于大容量 STM32F10x 系列芯片,分别有 3 ...
- Ardunio下实现STM32的串口通信及其与Stduino的区别
摘要 本文介绍了在Ardunio下配置STM32并进行STM32的串口通信:之后我将介绍一下国人MCU开发平台Stduino与现在所使用的Arduino进行比较. 文章目录 摘要 :man_stude ...
- 单片机与PC机的交流———基于STM32的串口通信
STM32之串口通信程序 前言: 一.串口通信要求 二.串口通信准备 1.硬件准备 2.软件准备 三.下载程序进入STM32 1.下载之前相关配置 2.下载 四.最终效果展示 总结: 前言: 本文主要 ...
- K210学习笔记(三) K210与STM32进行串口通信,K210发STM收
文章目录 前言 一.以/r/n为结尾 二.K210端代码 三.STM32端 3.1 main函数 四.测试结果 4.1当收到1时 4.2当收到2时 4.3 测试视频 总结 前言 前面我们讲了STM32 ...
- 嵌入式STM32入门之STM32基础串口通信
STM32基础串口通信 一.前言 二.串口协议 (1)浅谈设备通信方式 (2)具体串口协议 (3)STM32的串口通信 (4)RS-232通信协议 (5)USB To TTL(CH340) 5.1 C ...
- 【星曈科技】OpenMv笔记——利用OpenMV与STM32进行串口通信
利用OpenMV与STM32进行串口通信 OpenMV端的程序 # Untitled - By: dell - 周一 7月 19 2021# Blob Detection and uart trans ...
- javarxtx串口接收时数据会分成好几段_【STM32】串口通信基本原理(超基础、详细版)...
STM32F1xx官方资料: <STM32中文参考手册V10>-第25章通用同步异步收发器(USART) 通信接口背景知识 设备之间通信的方式 一般情况下,设备之间的通信方式可以分成并行通 ...
- STM32下串口通信——汇编
文章目录 一.串口通信的方式 1.串行和并行通信 2.同步通信和异步通信 3.单工.全双工和半双工通信 二.串口的通信协议 1.电平标准 2. 协议层 3.串口数据包的基本组成 三.STM32串口以及 ...
- 基于STM32实现串口通信输出hello windows!
文章目录 前言 一.介绍 1.串口协议和RS-232.485标准 2.RS232.485电平与TTL电平的区别 3.USB/TTL转232模块的工作原理 二.安装 1.安装STM32CubeMX 2. ...
最新文章
- c语言插入排序算法伪代码,排序算法——插入排序(C语言实现)
- 假设训练数据集中有10万个词,四元语法需要存储多少词频和多词相邻频率?《动手学深度学习 李沐》 转
- Linux下uniq筛选
- xtrabackup 安装、备份和恢复
- 聊聊高并发(六)实现几种自旋锁
- JavaWeb学习笔记(九)--HttpServletResponse
- Linux一行代码修改时区
- 联合多企业成立泛娱乐IP联盟 迅雷将打造新内容消费生态
- vue+element tree(树形控件)组件(1)
- runtime 的 assemblyIdentity 元素和bindingRedirect 元素
- vi+ctags+cscope联合使用
- HSRP协议详解:配置HSRP实现网关的冗余备份
- python调用本地exe_python调用exe程序 python怎么调用exe程序
- 如何设置二级域名解析(新手小白必看)
- html里 alt属性什么意思,HTML
- Android核心 intent基础
- 泰坦尼克号生存者预测(细节篇)
- 在线运行Java代码获取APNIC中国区的ip段,用作绕过国内ip
- python中调用linux命令报错cat: -: Bad file descriptor
- 服务器cpu支持4通道什么意思,Intel 10nm服务器CPU曝光 LGA4189接口、八通道内存
热门文章
- 分布式数据库同步系统之Otter
- 由一道bash jail题引出的琐事@_@
- 计算机辅助设计在环境工程中的应用,试论计算机辅助设计在环境工程中的应用原稿(范文1)...
- zynq linux如何使用pl ip,ZYNQ+linux网口调试笔记(3)PL-ETH
- excel matlab日期,Excel日期格式在matlab中的转换
- 华为认证HCIP难考吗?
- [机器学习]Lasso,L1范数,及其鲁棒性
- 沈阳二本计算机工资,想进国家电网?这两所二本超过很多985!
- android5.0源码开发之NVRam存储,恢复出厂设置数据不被擦除--上篇
- 第三章:期货合约与期货交易制度