STM32(六)——串口通信原理
本节为——正点原子笔记,海创电子学习笔记
我们先来看看我们学习的内容
一、 串行接口的基本知识
而我们今天主要说说 串行通信
而这些又是怎么样理解的?
接下来还有一个问题——即是串行通讯的同步与异步的问题
而 UART 是属于全双工 异步通讯 —— 即可以自己主动发送消息不需要对方等待,并且可以同时在两个地方同时发送,接收
SPI 为全双工 同步通讯 IIC 为半双工(只有一定时间内) 同步通讯
当然UART 也是有对应的引脚
——————————————————————————————————————————
编写流程
1.串口时钟 ,GIPO时钟使能 —— RCC_ABP2PeriphClockCmd();
2.GPIO端口模式设置 —— GPIO_Init();
3.串口参数初始化 —— USART_Init();
4.开启中断并初始化NVIC —— NVIC_Iint();USART_ITConflg();
5.使能串口 —— USART_Cmd();
6.编写中断处理函数 —— USARTx_IRQHandler();
这张图片主要是针对,单片机对外发送数据 和 接收 数据 所使用的
1.得到一个标志位状态,第一个参数是指定一个串口,第二个参数是一个普通的变量
2. 和1. 是一对,是用来清除标志位的
3.获取中断状态
4.清除中断相关状态
不管接收还是发送都需要两个寄存器
接收和发送使用都是数据寄存器
整个过程由CPU 或 DMA 处理
我们对他做一个总结
———————————————————————————————————————————我们这节课就要进行简单的实验,单片机把一个简单的字符发到我们的电脑上
1.
2.
3.
我们只是简单的发送字符,没有使用中断,所以省略了中断服务函数和NVIC的配置
在主函数里调用,就可以了。
之后我们就可以在串口助手看到单片机发的 'H'了(把上面的初始化都完成后调用我们定义的函数——即 包括一系列流程的函数)
———————————————————————————————————————————
关于TXE的标志位的小知识
举个好理解的例子
我们的八个人要从 A 到达 D ,但是我们不能直接到达,需要经过 B 和 C
首先呢 从 A 到 B 再到 C ,八个人都是一起行动的,但是从 C 到 D只能一个一个过
从C 到 D 的过程 就相当于我们的串行通信
——————————————————————————————————————————
关于TC标志位的小知识
这个是什么意思呢?
我们理解一下 TXE 是先写入DR,然后再读SR,让下一位补上来,然后发送清空,所以我们上面程序能正常发送,但是如果是TC的话,就无法进行了,因为TC是相反的
我们看看这个,执行的是先写入DR,再读取SR
所以用TC的话,TC会读取1,而不是0,所以会直接跳转到下一行 ,而在一一行因为已经执行过了,所以会是 0
所以我们修改一下
这样字节就都出现了
————————————————————————————————————————
发送字符串功能
同样用一个例子
我们再来回顾一下这个内容,所以在上面。我们首先需要4个TEX,把这些组从 B 全部 都送到 C,同时我们在最后也需要一个 TC 来让最后一个字节过去 到 D ,因为如果没TC的话,当我们的B没有字符时候,就不会再继续送了
以上是我们发送字符的库函数,接下来我们对他进行一些修改
依次发送字符串中的字符,每发送一次检查一下 TXE位,到最后的字符发完后,他就会跳出中间的while循环来到最后一个 判断TC位
int main(void)
{LED_GPIO_Config();delay_init();//KEY_GPIO_Config();//TIM2_Init(4999,7199);My_USART1();USART_SendString(USART1, "ROSCAR 王x ");while(1) {//KEY_Scan(); //LED_Change(); };
}
这样就可以了
————————————————————————————————————————
接收字符实验
我们需要用到一个新的函数
在上面这两个函数中,第一个是我们库函数里面所带有的,但是我们对他进行一点修改,进行标志位的一个判断,所以我们有了一个新的函数ReceiveByte,用我们的ReceiveData作为我们的返回值
再在主函数里补上
把我们接收到的字符赋值给temp,然后再由SendByte发送我们所接收到的字符,这样我们就在串口助手里发送字符(串)了
————————————————————————————————————————
Printf函数的相关知识
在单片机里面是没有控制台的,所以我们要用到 fputc 和 fgetc 对 printf 函数进行重定向
在串口的原文件里
把printf函数定位到我们的串口1,两个函数和 sandbytes 和 receiverbytes 很像
只有这两个还是不够的,因为我们的printf函数使用的是半主机模式,这样会导致程序是无法执行的,所以我们就需要关掉我们的半主机模式
这个时候我们就只要使用了微库,就默认关掉了半主机模式
然后在 库函数里调用#include “stdio.h”
第二种方法就是在我们的usart函数里面加上这个函数,然后继续重定向一下简单的说就是用这句话来代替这个勾
___________________________________________________________________________
STM32(六)——串口通信原理相关推荐
- 嵌入式STM32入门之STM32基础串口通信
STM32基础串口通信 一.前言 二.串口协议 (1)浅谈设备通信方式 (2)具体串口协议 (3)STM32的串口通信 (4)RS-232通信协议 (5)USB To TTL(CH340) 5.1 C ...
- NXP(I.MX6uLL) UART串口通信原理————这个未复习
参考:Linux NXP (I.MX6uLL) UART串口通信原理 作者:一只青木呀 发布时间: 2020-09-20 16:48:33 网址:https://blog.csdn.net/weixi ...
- 两个串口通信助手之间通信_串口通信原理
LC串口通信原理 PLC各型主机均内建2个通信接口的标准配置,即一个RS232和一个RS485通信接口,其RS232接口主要用于上下载程序或用来与上位机.触摸屏通信,而RS485接口主要用于组建使用R ...
- 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 ...
- 51单片机串口通信原理、相关寄存器配置与简单串口收发程序代码
目录 1. 串口通信原理 2. 51单片机串口通信 2.1 串口简要模式图 2.2 相关寄存器 (1)PCON.SCON.SBUF (2)IE.IPH.IP (3)配置T1定时器 2.3 波特率和系统 ...
- 【星曈科技】OpenMv笔记——利用OpenMV与STM32进行串口通信
利用OpenMV与STM32进行串口通信 OpenMV端的程序 # Untitled - By: dell - 周一 7月 19 2021# Blob Detection and uart trans ...
- STM32串口通信原理及实验讲解
串口通信基本原理 串口 串口,顾名思义,即为串行接口,是处理器与外部设备进行串行通信的接口.串行通信是指数据按位进行顺序传输,这种方法占用引脚资源少,但速度相对较慢.串行通信按数据传输方向可分为三种: ...
最新文章
- AngularJS 拦截器和好棒例子
- Hello,SDK!数据采集黑客松大赛重磅开启,Mac投影仪任你拿!
- 「服务端」node服务的监控预警系统架构
- Cloud for Customer workCenterLoader
- haproxy概念和负载均衡
- ReviewForJob——桶式排序+基数排序(==多次桶式排序)
- 160 - 33 Cruehead.1
- C#中combobox 控件属性、事件、方法
- java 字符串连接_为什么 Java 要把字符串设计成不可变的
- ES6入门---变量的解构赋值
- Android 集成科大讯飞语音并实现语音识别
- 计算机组成原理 精选习题集
- Linux常用命令大全——赶紧收藏
- 人类HUMANKIND怎么攻城?攻城战准备与打法教程
- python cox模型_基于Cox比例风险模型的失效时间预测
- 云平台-多租户技术设计
- 喝酸奶竟然能预防霉菌性阴道炎
- 【转】SCI论文写法攻略
- 博图程序的归档和恢复
- html的class怎么使用方法,HTML的class属性怎么用?使用方法详细总结!