嵌入式软件--stm32 DAY 5 USART串口通讯(上)

前边我们学的都是通用的功能,例如GPIO、中断,现在我们要学习的是某一个特定的功能。典型的就是通讯功能。其中,最简单的通讯协议就是串口了。

一、串口_通讯基础知识

1.1 串行与并行

按数据传送的方式分类的。

串行通信一位一位传输,并行则是8位(16、32位)同行。(按位传输)

频率越高,电流产生电磁场,干扰越大。

早期用的硬盘ATA,后来有了SATA硬盘(S是串行的意思)

传输接口基本上都是串行。

1.2 单工、半双工、全双工

单工传输:数据单向传输,只能A-->B

半双工传输:数据双向传输,但同一时刻只能传一个方向,不可同时。如对讲机!

全双工传输:至少2条线,同时双向传输。

1.3 同步和异步

同步和异步区别:有无时钟!

同步至少两根线:一个传输时钟信号,一个传输数据信号

异步只有一根线,单工或半双工

二、串口通讯:

两根线实现全双工

串口通讯协议:

波特率:

奇偶校验位:

奇校验:所有1加起来是一个奇数

偶校验:所有1加起来是一个偶数

空闲位:

分数波特率的产生

小数部分:DIV_Fraction

整数部分:DIV_Mantissa

状态寄存器SR

IDEA:0没有检测到空闲 ,1检测到空闲总线

TXE:

TC:

RXNE:

控制寄存器1USART_CR1

控制寄存器2USART_CR2

三、USART外设

同步异步收发器,串行通信设备,全双工数据交换。

UART与USART相比去掉了同步通讯功能

USART1通讯速率最高,可以达到4.5Mbps。2,3,4,5最高只有USART1的一半。

我们在stm32中,调试口用USART1.

以前台式电脑,就是以上的Bj9接口. 

UART是异步收发器。UART,有时指设备,有时指协议。

RS485两根线,作差分传输,半双工。

四、波特率设置

分数波特率的产生

接收器和发送器的波特率在USARTDIV的整数和小数寄存器中的值应设置成相同。

fck=72MHZ

如果DIV_Mantissa=27,整数是27,DIV_Fraction=12(USART_BRR=0x1BC),小数是12.

例二是我们要常用的,可以配波特率。

五、串口所用寄存器

TDR

RDR

检测到空闲帧,IDLE置1.

六、寄存器实现

目前很多电脑没有串口接口,为了使用串口,我们自制的下载器STLink2.1拥有USB转串口的功能。

所用引脚:

上位机,串口调试工具:

文末给大家分享的资料包里有。我们能通过串口工具向stm32发信息。当然stm32要想收到,必须有相应的接收程序。

2.1 创建工程

 

创建新的外设代码文件USART

 

有了新的文件,KEIL里面必须配置上。

 

之后便是通过VSCODE打开。

2.2 代码编写 

将usart.c和usart.h,预处理编码做好。声明需要编写的函数。

我们用的usart1在APB2系统总线上。

我们也要开启GPIO的时钟,因为有输入输出。

usart.h

#ifndef __USART_H
#define __USART_H#include "stm32f10x.h"
//初始化
void USART_Init(void);//发送一个字符
void USART_SendChar(uint8_t ch);//接收一个字符
uint8_t USART_ReceiveChar(void);#endif

usart.c 

#include "usart.h"//初始化
void USART_Init(void)
{//开启时钟RCC->APB2ENR |= RCC_APB2ENR_USART1EN;RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;//GPIO工作模式// PA9:TX 复用推挽输出,CNF=10,MODE=11GPIOA->CRH |= GPIO_CRH_MODE9;GPIOA->CRH |= GPIO_CRH_CNF9_1;GPIOA->CRH &= ~GPIO_CRH_CNF9_0;// PA10:RX 浮空输入,CNF=01,MODE=00GPIOA->CRH &= ~GPIO_CRH_MODE10;GPIOA->CRH &= ~GPIO_CRH_CNF10_1;GPIOA->CRH |= GPIO_CRH_CNF10_0;//串口模块设置//设置波特率 115200USART1->BRR = 0x271;//使能串口和收发模块USART1->CR1 |= USART_CR1_UE;USART1->CR1 |= (USART_CR1_TE|USART_CR1_RE);//配置数据帧格式USART1->CR1 &=~ USART_CR1_M;   //长度为8位的数据,没有校验位USART1->CR1 &=~ USART_CR1_PCE;  //无校验,不使用校验位USART1->CR2 &=~ USART_CR2_STOP;  //1位停止位}//发送一个字符
void USART_SendChar(uint8_t ch)
{//判断TDR是否为空,必须等待TDR为空才能写入数据,也就是继续发送while((USART1->SR & USART_SR_TXE)==0){}//将要发送的数据写入TDRUSART1->DR = ch;
}//接收一个字符
uint8_t USART_ReceiveChar(void)
{//判断RDR是否非空。必须有数据才能读取数据while((USART1->SR & USART_SR_RXNE)==0){}//读取接收到的数据,返回return USART1->DR;
}

main.c

#include "usart.h"
#include "delay.h"int main(void)
{//1.初始化USART_Init();//发送单个字符USART_SendChar('A');USART_SendChar('B');USART_SendChar('C');USART_SendChar('\n');while(1){//不停发送字符USART_SendChar('D');USART_SendChar('\n');//延时Delay_ms(500);}}

 

还可以看看接收,接收到我们在软件中发送的,再次发到软件。

这样可能不太明显,如果我们在软件上位机发给stm32一个小写字母,我们32端收到后,将其转化为大写字母,再次发到上位机。因为小写字母与大写字母在ASCII值相差32,所以只要做差即可

 

七、资料

stm32开发官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/80043.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++混淆工具Hikari-LLVM15-llvm-18.1.8rel编译安装

目录 1. windows 编译1. 2 编译工具安装1.2.1 下载w64devkit1.2.2 添加环境变量1.2.3 验证一下 1.3 下载llvm-18.1.8rel1.4 编译 2. Android studio增加混淆编译2.1 替换NDK中clang2.2 配置混淆编译项 3. Linux编译安装4. Linux下增加混淆编译4.1 在CMakeLists.txt中设置clang编…

【EasyPan】loadDataList方法及checkRootFilePid方法解析

【EasyPan】项目常见问题解答(自用&持续更新中…)汇总版 一、loadDataList方法概览 /*** 文件列表加载接口* param session HTTP会话对象* param shareId 必须参数,分享ID(使用VerifyParam进行非空校验)* param …

Vue3渲染引擎:虚拟DOM与响应式原理

Vue3渲染引擎:虚拟DOM与响应式原理 在当今的前端开发中,Vue.js作为一种流行的JavaScript框架,经常被用来构建用户界面。而Vue.js 3作为其最新版本,在性能和功能上进行了许多优化和改进。其中,Vue3渲染引擎的核心原理—…

【论文阅读】Attentive Collaborative Filtering:

Attentive Collaborative Filtering: Multimedia Recommendation with Item- and Component-Level Attention Attentive Collaborative Filtering (ACF)、隐式反馈推荐、注意力机制、贝叶斯个性化排序 标题翻译:注意力协同过滤:基于项目和组件级注意力的…

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】2.1 数据查询基础(SELECT/WHERE/GROUP BY/HAVING)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 第2章 SQL语法进阶:数据查询基础(SELECT/WHERE/GROUP BY/HAVING)2.1 数据查询基础2.1.1 SELECT 语句:从表中提取数据2.1.1.1 基础语法与列选择2.1.1.2 列别名与表达式2.1.1.3 去重与排序2.1.2 WHERE…

深度解析:基于Python的微信小程序自动化操作实现

引言 在当今数字化时代,自动化技术正在改变我们与软件交互的方式。本文将深入解析一个使用Python实现的微信小程序自动化操作脚本,该脚本能够自动识别屏幕上的特定图像并执行点击操作。这种技术在自动化测试、批量操作和效率工具开发中有着广泛的应用前…

layui下拉框输入关键字才出数据

html里这样放 <div class"layui-form-item"><label class"layui-form-label">合同方&#xff1a;</label><div class"layui-input-block rightinline"><input type"text" name"select_text" ids…

bash和zsh的区别

Bash&#xff08;Bourne-Again SHell&#xff09;和 Zsh&#xff08;Z Shell&#xff09;都是 Unix/Linux 系统中的主流 Shell&#xff0c;但它们在功能、配置和用户体验上有显著区别。以下是两者的详细对比&#xff1a; 1. 历史与兼容性 特性BashZsh诞生时间1989 年&#xff…

组件通信-v-model

概述&#xff1a;实现 父↔子 之间相互通信。 前序知识 —— v-model的本质 <!-- 使用v-model指令 --> <input type"text" v-model"userName"><!-- v-model的本质是下面这行代码 --> <input type"text" :value"use…

虚拟机(Virtual Machine, VM)的简单介绍

目录 一、虚拟机的基本概念 二、虚拟化技术的分类 三、虚拟机的核心架构 四、虚拟机的核心应用场景 五、虚拟机的优缺点分析 六、虚拟机与容器技术的对比 七、虚拟机的未来趋势 八、总结 一、虚拟机的基本概念 虚拟机&#xff08;VM&#xff09;是一种通过软件模拟的完…

Xcode16提交App Store审核时提示bitcode报错

提交AppStore时出现bitcode报错&#xff0c;内容如下&#xff1a; Upload was cancelled. 2025-04-30 02:15:48.349 [ContentDelivery.Uploader.600000DB4380] Show Progress: Upload failed. Validation failed Invalid Executable. The executable Blockolot.app/Frameworks/…

Flutter TabBar / TabBarView 详解

目录 一、引言 二、基本用法 代码解析 三、主要属性 3.1 TabBar 3.2 TabBarView 四、进阶定制&#xff1a;突破默认样式 4.1 视觉样式深度定制 4.2 自定义指示器与标签 4.3 动态标签管理 五、工程实践关键技巧 5.1 性能优化方案 5.2 复杂手势处理 5.3 响应式布局…

mathtype转化

mathtype转latex 点击预置 选择剪切和复制预置 点击MathML 或 TeX&#xff0c;选择 LaTeX 2.09 and later mathtype转word自带编码器 与前面都相同&#xff0c;选择 MathML2.0&#xff08;m namespace&#xff09;

AI检测的荒谬性:当规则沦为一场概率游戏

当今高校对AI检测工具的依赖&#xff0c;已经演变成一场标准混乱的闹剧。有的学校指定格子达&#xff0c;有的迷信维普&#xff0c;而同一篇论文在不同的系统里竟能得出天差地别的结果——在格子达AI检测率仅12%的文章&#xff0c;放到维普却可能飙升到60%。这意味着&#xff0…

react-14defaultValue(仅在首次渲染时生效)和value(受 React 状态控制)

在 React 中&#xff0c;defaultChecked/checked 和 defaultValue/value 是用于处理表单元素初始值和受控值的属性对。区别在于表单元素是否受 React 组件状态控制。 1. defaultValue 作用&#xff1a;设置表单元素的初始值&#xff08;仅在首次渲染时生效&#xff09;。特点…

Go语言基础学习详细笔记

文章目录 初步了解Go语言Go语言诞生的主要问题和目标Go语言应用典型代表Go语言开发环境搭建经典HelloWorld 基本程序结构编写学习变量常量数据类型运算符 条件语句if语句switch 语句 跳转语句常用集合和字符串数组切片Map实现Set**字符串** 函数**基本使用用例验证** 面向对象编…

wrod生成pdf。[特殊字符]改背景

import subprocess import os,time from rembg import remove, new_session from PIL import Image import io from docxtpl import DocxTemplate, InlineImage from docx.shared import Inches input_folder ‘tupian’ # 输入文件夹 kouchu_folder ‘kouchu’ # 去背景图像…

基于SpringBoot和PostGIS的应急运输事件影响分析-以1.31侧翻事故为例

目录 前言 一、技术实现路径 1、需要使用的数据 2、空间分析方法 二、相关模块设计与实现 1、运输路线重现开发 2、事故点影响范围实现 3、WebGIS可视化实现 三、讨论 1、界面结果展示 2、影响范围分析 四、总结 前言 在交通运输发达的当今社会&#xff0c;应急运输…

NetBox:运维利器,网络与数据中心管理平台

NetBox 详细介绍&#xff1a;开源 IPAM 和 DCIM 工具的全面解析 1. 引言 在现代网络和数据中心管理中&#xff0c;基础设施的复杂性不断增加&#xff0c;传统的电子表格或手动记录方式已无法满足高效、准确和可扩展的管理需求。NetBox 作为一个开源的 IP 地址管理&#xff08…

澳鹏干货 | 动态判断:如何用“群体智慧“优化AI数据标注流程?

20世纪初&#xff0c;800人集体猜测一头公牛的重量&#xff0c;结果与真实数值误差不足1%——这就是著名的"群体智慧"效应。如今&#xff0c;这一古老智慧正以全新形态赋能AI训练&#xff1a;通过动态优化标注流程&#xff0c;让AI训练结果像人群一样达成精准共识。 …