本节为——正点原子笔记,海创电子学习笔记

我们先来看看我们学习的内容

一、 串行接口的基本知识

而我们今天主要说说 串行通信

而这些又是怎么样理解的?

接下来还有一个问题——即是串行通讯的同步与异步的问题

而 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(六)——串口通信原理相关推荐

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

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

  2. NXP(I.MX6uLL) UART串口通信原理————这个未复习

    参考:Linux NXP (I.MX6uLL) UART串口通信原理 作者:一只青木呀 发布时间: 2020-09-20 16:48:33 网址:https://blog.csdn.net/weixi ...

  3. 两个串口通信助手之间通信_串口通信原理

    LC串口通信原理 PLC各型主机均内建2个通信接口的标准配置,即一个RS232和一个RS485通信接口,其RS232接口主要用于上下载程序或用来与上位机.触摸屏通信,而RS485接口主要用于组建使用R ...

  4. STM32 —— STM32 的串口通信

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

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

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

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

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

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

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

  8. 51单片机串口通信原理、相关寄存器配置与简单串口收发程序代码

    目录 1. 串口通信原理 2. 51单片机串口通信 2.1 串口简要模式图 2.2 相关寄存器 (1)PCON.SCON.SBUF (2)IE.IPH.IP (3)配置T1定时器 2.3 波特率和系统 ...

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

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

  10. STM32串口通信原理及实验讲解

    串口通信基本原理 串口 串口,顾名思义,即为串行接口,是处理器与外部设备进行串行通信的接口.串行通信是指数据按位进行顺序传输,这种方法占用引脚资源少,但速度相对较慢.串行通信按数据传输方向可分为三种: ...

最新文章

  1. AngularJS 拦截器和好棒例子
  2. Hello,SDK!数据采集黑客松大赛重磅开启,Mac投影仪任你拿!
  3. 「服务端」node服务的监控预警系统架构
  4. Cloud for Customer workCenterLoader
  5. haproxy概念和负载均衡
  6. ReviewForJob——桶式排序+基数排序(==多次桶式排序)
  7. 160 - 33 Cruehead.1
  8. C#中combobox 控件属性、事件、方法
  9. java 字符串连接_为什么 Java 要把字符串设计成不可变的
  10. ES6入门---变量的解构赋值
  11. Android 集成科大讯飞语音并实现语音识别
  12. 计算机组成原理 精选习题集
  13. Linux常用命令大全——赶紧收藏
  14. 人类HUMANKIND怎么攻城?攻城战准备与打法教程
  15. python cox模型_基于Cox比例风险模型的失效时间预测
  16. 云平台-多租户技术设计
  17. 喝酸奶竟然能预防霉菌性阴道炎
  18. 【转】SCI论文写法攻略
  19. 博图程序的归档和恢复
  20. html的class怎么使用方法,HTML的class属性怎么用?使用方法详细总结!

热门文章

  1. 1rem等于多少px (rem和px怎样转换)
  2. 论文阅读笔记:YOLO9000: Better,Faster,Stronger
  3. cdx 快速切换路径
  4. 导入的OSM地图如何快速设置道路信息
  5. EOS系列六:wallet钱包、key公私钥对、account帐号的关系
  6. Pandas基础教程
  7. 关于线程 thread (4)线程的交互
  8. 计算机网络centos下实验1.1(Linux常用命令+Linux网络基础)
  9. 电磁感应式无线充电系统详解
  10. 我的苹果电脑中毒了?mac也会中病毒?喜闻乐见(附杀毒软件测试)