STM32F1串口

news2024/9/23 12:20:12

文章目录

  • 1 数据通信的基础概念
    • 1.1
    • 1.2
    • 1.3
    • 1.4
    • 1.5
  • 2 串口(RS-232)
    • 2.1
    • 2.2
    • 2.3
    • 2.4
    • 2.5
  • 3 STM32的USART
    • 3.1
    • 3.2
    • 3.3
    • 3.5
    • 3.9 USART寄存器介绍
  • 4 HAL库外设初始化MSP回调机制
  • 5 HAL库中断回调机制
  • 6 USART/UART异步通信配置步骤 (包括HAL库相关函数)
    • 6.1
    • 6.2
    • 6.3
  • 7 IO引脚复用功能
    • 7.1
    • 7.2
      • 7.2.1
      • 7.2.2
      • 7.2.3
  • 8
  • 9
  • 10

在这里插入图片描述

  • usart 是STM32实现串口通信的外设

1 数据通信的基础概念

在这里插入图片描述

1.1

在这里插入图片描述

  • 线少 所以抗干扰能力强 抗干扰能力强 所以通信距离长

1.2

在这里插入图片描述

  • 半双工 用一个信道

1.3

在这里插入图片描述

  • 区分:看有时钟不
  • 感觉就是同步通信 用时钟告诉你从哪开始 到哪结束?

1.4

在这里插入图片描述
0V 00
3V 01
6V 10
9V 11

  • 00 01这种就是码元 编码后的
  • 对应上面 M是4 也可以看成4进制 0~3
  • 记住4 能区分这两就行

1.5

在这里插入图片描述

  • 有输入输出对应各自通道(信道)就是全双工 公用一个通道就是半双工

2 串口(RS-232)

在这里插入图片描述

  • RS232 串口的一种

2.1

在这里插入图片描述

  • 用的最多就是 RS-232 也称为标准串口 RS-485也多
  • 传统接口是DB25(基本不用) DB9是简化版接口
  • 数据线 握手信号(一般用于同步通信)
  • 异步只用这三个 主要用异步通信

在这里插入图片描述

  • DB9 实物图接口(板子上咋没看见 ) 实物上会有引脚号

2.2

在这里插入图片描述

  • STM32 用这种 之前我咋记得这两都有 (难道这说的是IO?)

在这里插入图片描述

  • 太大了 而且反的

2.3

在这里插入图片描述

  • 线不会交叉连接 , 电路图里可以看到
  • DB9基本不用了

2.4

在这里插入图片描述

  • 应该和手机的接口不同 毕竟这要先电脑上安装驱动(驱动不同?)
  • 串口这指的是 usb吗??

2.5

在这里插入图片描述

  • 这是协议 前面是硬件
  • LSB 是最低有效位 位0

3 STM32的USART

在这里插入图片描述

3.1

在这里插入图片描述

  • usart是STM32进行串口通信的外设
  • s是同步 a是异步

3.2

在这里插入图片描述

  • 看参考手册?

在这里插入图片描述

  • 选型手册看外设数量
  • 原理图 或者数据手册 可以看引脚

在这里插入图片描述

  • usart是 3 (这是选型手册里的)

在这里插入图片描述

  • 看LQFP144这一列
  • 2代表串口2?

3.3

在这里插入图片描述

  • SW_RX 不必理会 是智能卡接收引脚 没有连到IO口 芯片内部引脚
  • 下面那两 是硬件流控制的 同步才用这两
  • SCLK 同步时钟 同步才用
  • 最上面总线可以通过CPU和DMA访问
  • 灰色框里面寄存器用户无法访问 芯片内部工作自行处理 对用户不可见
  • 要用DR 自动往TDR里面传
  • 然后再等待发送移位寄存器空了
  • 无论读写 都操作DR寄存器
  • 唤醒单元给接收器用 ()
  • 那个是波特率设置寄存器
  • TE 和 RE E应该都是ENABLE 发送使能位 1有效
  • 下面那是BRR寄存器低16位 波特率设置的值 由/16前面那个决定

在这里插入图片描述

在这里插入图片描述

  • 后面会细讲 设置波特率

在这里插入图片描述

  • 串口1 的话TXD(对于内部来说) 就是PA9

3.5

在这里插入图片描述

  • 串口1 72M
  • 看挂载到哪 可以看这个图

在这里插入图片描述

  • 波特率是设置好的
  • 算出来 那两会放那寄存器里

在这里插入图片描述

  • 写进去 波特率就配置好了?

在这里插入图片描述

  • +0.5是为了四舍五入 会直接省区小数位
  • *16 可以看成左移四位

在这里插入图片描述

  • HAL库 直接把波特率 赋值给结构体里对应的成员就行

3.9 USART寄存器介绍

在这里插入图片描述

  • 这里所说的配置是以例程源码 这种工作模式为例

在这里插入图片描述

  • 用9位的比较少 虽然前面有好多选择 但ST公司就给了两

在这里插入图片描述
在这里插入图片描述

  • 上面设置好波特率 也通过CR123 控制工作模式(包括协议 停止位字长 还有什么使能什么的)

在这里插入图片描述

在这里插入图片描述

  • 可以看写数据 读数据 是否完成
  • CR1寄存器里那个中断位

在这里插入图片描述

  • 接收移位寄存器 满8位就往上走 DR里有的时候 SR寄存器位5 置1

在这里插入图片描述

  • 这两都空 代表发送完成
  • TDR空 下面有 是位7

在这里插入图片描述

在这里插入图片描述

  • 都异步了还叫时序

4 HAL库外设初始化MSP回调机制

在这里插入图片描述

  • 也可能会变点 比如这定时器输出pwm波
  • 会自动调用MSP回调函数(内部是空的 相当于接口)
  • 和PPP_Init 不一样 这个不带HAL的一般是自己写的

在这里插入图片描述

  • 作用:比如说用USART1 要用GPIO 也可能用中断的管家NVIC 以及开启他们的时钟
  • 不用这个机制就把这些函数 写到用户初始化函数里

在这里插入图片描述

  • 比如多个串口 串口123

在这里插入图片描述

  • 比如多个串口 串口123 三个.c 文件 MSP函数只能被定义一次 放哪? 所这时候不建议

在这里插入图片描述

  • 这用的是异步
  • 参数说成句柄(可能是基地址 指针的原因?)
  • if里面判断基地址的结构体成员
  • uart_Init里是配置uart的 然后 MSP回调函数里配置GPIO

5 HAL库中断回调机制

在这里插入图片描述

  • 回调函数 xxx根据作用命名
  • 这个类型说的就是作用
  • 如果不用 把中断处理程序写到中断服务函数里
  • 感觉这回调和 HAL库外设初始化MSP回调 没啥区别 都是一个不带HAL开头的函数 调用一个HAL的(还都在下面那个文件里) 然后再调用 回调函数 不过中断回调这第一个函数 是名字给好的(在启动文件里)

在这里插入图片描述

  • 用哪个重定义哪个

看实际操作了

在这里插入图片描述

在这里插入图片描述

  • 官方的MSP回调 全放这个文件里了 会太大
  • 正点原子是 放到对应文件里 比如 usart.c (CubeMX也是)

在这里插入图片描述
在这里插入图片描述

  • 串口驱动文件有四个(HAL库外设初始化那个就在这)
  • HAL库外设初始化 中断HAL公用那个 函数 在这 没在 uart.c里

在这里插入图片描述

  • HAL库的外设初始化函数 调用 MSP

在这里插入图片描述

  • 反初始化 函数 会失能 把结构体里的成员 复位 清0 调用反MSP

在这里插入图片描述

  • 在stm32f1xx_it.c这个文件里面 官方 存放 中断服务函数 和 回调函数

在这里插入图片描述

  • 不可屏蔽中断 和 硬件错误中断
  • 用就写 不用 就不管(官方例程)
    在这里插入图片描述
  • 官方例程里 外设中断(CubeMX也在这) 也没写
  • F1 有60个外部中断
  • 原子 那it.c 文件一样 但把对应中断函数 放到对应文件里了
  • 总: msp.c 删了 it.c 保留了(CubeMX都保留 msp.c没用 it.c用了)

在这里插入图片描述

  • 又讲了 官方例程 里 HAL库公用中断函数 里 callback函数 出来 要寄存器某些位符合
  • ==这还看出来 不是直接掉中断回调的 ==

6 USART/UART异步通信配置步骤 (包括HAL库相关函数)

在这里插入图片描述

  • 介绍这三

6.1

在这里插入图片描述

  • 以PPP_HandleTypeDef(后面这种结尾) 称为句柄

在这里插入图片描述

  • 先看返回值
    在这里插入图片描述
  • 是个枚举类型
  • 第一个初始化成功 | 错误 | 再忙初始化错误 | 超时

在这里插入图片描述

  • 对于初始化 看上面两个 上面是寄存器 下面是 工作参数

在这里插入图片描述

  • 第一个结构体 里面是串口的寄存器

在这里插入图片描述

  • 赋值去外设寄存器基地址里找 (和上图结构体在一块 stm32f103x6.h)

在这里插入图片描述

  • 第二个结构体 初始化工作参数
  • 模式 就是 收 发
  • 后面两成员用不到 过采样 在F1里面就16倍 没选择
  • 奇偶校验位也用不到

在这里插入图片描述

  • 看哪个成员 给什么值 看后面给的参考值 搜素

在这里插入图片描述

6.2

在这里插入图片描述

  • 带中断的接收函数
  • 返回值 是刚才那个枚举类型 4成员
  • 形参1 是句柄
  • 以字节为单位 可以2个字节也可以3个字节 第二个参数的 uint8_t 无符号字符型 所以一个字节

6.3

在这里插入图片描述

  • 没有 _it 代表没有开启中断(这中断好迷)(接收中断 发送主动 合理的)
  • 阻塞就是 干不完别出来 前面中断型的接收 是非阻塞型的 (发送完跟我说 期间 我可以干别的??)

7 IO引脚复用功能

  • 串口要把IO引脚复用为 TX发送引脚 RX接收引脚

在这里插入图片描述

7.1

在这里插入图片描述

  • 通用 GPIO 里 ODR BSRR 控制 IDR采集
  • 复用 如:串口, 定时器某个通道 ADC DAC

7.2

在这里插入图片描述

7.2.1

在这里插入图片描述

  • 这个没重定义功能 (这个也算复用功能)

7.2.2

在这里插入图片描述

  • 两都和他连 就会冲突 两都不正常工作

7.2.3

在这里插入图片描述
在这里插入图片描述

  • 重定义功能就是重映射功能
  • 比如PB13冲突了 就可以用PA7 (看样子默认复用功能 各种只出现一次 且全了)

8

在这里插入图片描述

  • 这里面无论哪种口 都是连接到STM32 TXD 和RXD引脚

在这里插入图片描述

  • PA9是发送引脚 PA10是接收引脚

在这里插入图片描述

  • stm32 PA9(对应串口1发送引脚) 和 PA10(对应串口1接收引脚)引脚
  • 右边那个大 端子就是前面连接的type c接口 那两ch的 是USB信号
  • CH340C 把USB电平 转换为 CMOS 电平
  • 等于说是 这里TXD 才是更外面的

把跑马灯实验复制了 usart.c 删减了点

在这里插入图片描述

在这里插入图片描述

  • 定义句柄 (这是UART 所以后面 是 HAL_UART_Init 和 HAL_UART_MspInit 他两参数的问题)

在这里插入图片描述

  • 这赋值第一个成员的时候 基地址居然还有声明(好像只有USART1 没有UART1)
  • 这用基地址用的是usart的 但上面函数(写好的)用的都是uart的

在这里插入图片描述

  • 这个形参是波特率
  • 基地址那个就是USART1
    在这里插入图片描述
  • 这个HAL库外设初始化 里面不用写 就 给个参数
    在这里插入图片描述
  • 这个要重写

在这里插入图片描述

(1)
在这里插入图片描述

  • 找时钟 去rcc.h 里找 再搜索USART1 (不懂 usart1时钟开启在MSP回调里 CubeMX生成的也是)

在这里插入图片描述

  • 串口1的都是PA9 PA10 所以GPIOA

在这里插入图片描述

  • 但程序里面有这个 (应该不对 又没说时钟)(不知道这个使能是干嘛了 总不能意思是MSP里 usart1时钟使能了吧 那不自己写的吗)

(2)

在这里插入图片描述

  • 把led.c里相关IO初始化的拷过来
  • 模式要复用 PA9 是TX

在这里插入图片描述

  • 原理图里没有外部上拉 所以推挽复用

在这里插入图片描述

  • 空闲时 是高电平 所以用上拉

在这里插入图片描述

(3)

在这里插入图片描述

  • 随意🐍 就好

在这里插入图片描述
在这里插入图片描述

  • 这个 名 有说法 g_ 代表 全局 rx 接收 buffer 缓冲区

在这里插入图片描述

  • 先去 启动文件里 找名 返回值 形参 好像自己说了算

在这里插入图片描述

  • HAL库中断共用处理函数 会 清除中断

在这里插入图片描述

  • 这个函数 上面 调用了 使能UART数据寄存器 非空中断(可理解为接收中断)(应该是打开接收中断)

在这里插入图片描述

  • 之前讲中断也是先清除标志位再起作用
    在这里插入图片描述
  • 这里 是上面那个函数里的失能

在这里插入图片描述

  • 所以在 下面要再使能一次

在这里插入图片描述

  • 还要加个标志 标志 接收到了

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

然后又去 usart.h里声明了一下 变量 和函数 再在main.c 里包含头文件

在这里插入图片描述

  • 再在main.c 里 调用usart初始化 写一下发送 (超时随便设)

下面是看发送是否完成
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 第一个参数是句柄 第二个参数 选择

在这里插入图片描述

  • 还是不懂为啥加 延时
  • 这让标志位 = 0 是为了 下个循环 不一定发送
  • 总的说 这里 中断就是为了接收用的 发送只用了一个函数 MSP是为了开开usart1相关的东西

在这里插入图片描述

  • 这个波特率要一样 (这下面几个估计都得一样)

在这里插入图片描述

  • 再把发送新行 取消

在这里插入图片描述

  • 发送中文不行 占两个字符
  • 证明前面那个强转 多余了

在这里插入图片描述

  • 再加点提示
    在这里插入图片描述

  • 复位后显示这个

9

在这里插入图片描述

  • 回车 \r 换行\n

接收

在这里插入图片描述

  • 这uint16 2^14B 也就是 16KB
  • 但这个buf 只能存 200B

发送

在这里插入图片描述

分析usart.h 头文件

  • 里面就是宏定义 IO口 中断 常量

分析usart.c 文件

  • 上面是printf 函数
  • 大多一样(和自己写的) 主要看 接收回调函数 和中断服务函数

接收回调函数

  • 制定接收协议

在这里插入图片描述

  • &0x3FFF 应该是保险点 🤯

中断服务函数

在这里插入图片描述

  • 视频里是这么写的 和例程里有点区别 例程里好像没卡死

分析 main.c

  • 波特率115200

在这里插入图片描述

  • 没啥好说的 比较简单

weakness of printf

在这里插入图片描述

  • 二进制下 波特率等于比特率 所以这个115200 就对应了 1s能有这么多 个比特位 /10 是因为 1+8+1 起始位和终止位
  • 1ms 单片机能干好多事了 比如延时1ms 就要循环好多次
  • 测试可以用 产品尽量别用

10

  • 发送没用中断 接收用了
  • P4端子 去连接PA9 PA10 TXD 和 RXD
  • 小小串口 拿捏😋😋😋
  • 😅😭

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

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

相关文章

SDN基础知识

🌈个人主页:小新_- 🎈个人座右铭:“成功者不是从不失败的人,而是从不放弃的人!”🎈 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝 🏆所属专栏&#xff1…

SQLite的DBSTAT 虚拟表(三十六)

返回:SQLite—系列文章目录 上一篇:SQLite运行时可加载扩展(三十五) 下一篇:SQLite—系列文章目录 1. 概述 DBSTAT 虚拟表是一个只读的同名虚拟表,返回 有关用于存储内容的磁盘空间量的信息 的 SQLite 数据库。 示例用例…

【数据结构(邓俊辉)学习笔记】绪论03——递归分析

文章目录 意图目标1. 线性递归数组求和线性递归减而治之 2. 递归分析递归跟踪递推方程典型递推方程 3. 递归模式多递归基多向递归 4. 递归消除空间成本尾递归及其消除 5. 二分递归分而治之数组求和 6 . 效率7. 算法设计优化总结前n项计算算法 意图 数据结构中经常用到递归&…

VScode配置MySQL

1、进入官网,下载MySQL 地址:dev.mysql.com/downloads/mysql/ ZIP方式下载,选择本地的路径进行解压。 2、配置环境变量 形如下方的路径: D:\software\Mysql\mysql-8.3.0-winx64\bin 即是解压位置后文件夹下的bin文件路径 3、初…

在 VSCode 中运行 C#

文章目录 1.为何选择VSCode而不是VS2.操作步骤2.1 安装.NET2.2 安装扩展插件2.2.1 C#2.2.2 Code Runner 3.新建工程HelloCsharp 1.为何选择VSCode而不是VS VS实在是太“重”了,如果只是写一些简单控制台程序进行调试,则完全没必要 2.操作步骤 2.1 安装…

【前端】vue3树形组件使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、树形组件简介二、树形组件使用三、总结 前言 随着开发语言及人工智能工具的普及,使得越来越多的人学习使用vue前端工具,本文主要是…

第十、十一章 折线图 + 地图 + 柱状图的绘制

第十章 折线图的绘制 官网:pyecharts - A Python Echarts Plotting Library built with love. 画廊官网:Document 懒人工具:懒人工具-手机APP工具下载-手机软件下载大全 - 173软件站 (ab173.com) 导学 json 定义 (1&#xff…

Flask 数据库前后端交互案例-1

Flask 数据库前后端交互案例 目录结构templates目录base.htmlheader.htmlleft.html首页职员管理页面添加员工界面员工编辑页面员工详情界面 后台main.pyapp.pymodels.pyviews.py 数据库数据position.sqlperson.sqlpermission.sqldepartment.sql 目录结构 静态文件链接&#xff…

工装行业项目管理系统哪家好?找企智汇工程项目管理系统!

在工装行业,项目管理是至关重要的一环。好的项目管理系统能够提高工装企业的效率、降低成本、提升客户满意度。在这个竞争激烈的市场中,选择一款好的项目管理系统,对于企业的发展至关重要。 今天,我向大家介绍的是企智汇工程项目…

uniapp自定义顶部导航栏

首先uniapp获取设备信息:uni.getSystemInfo或uni.getSystemInfoSync,可用于设置顶部安全区 留一个设备安全区的位置哦 然后在pages.json文件里配置自定义导航栏 {"pages": [ //pages数组中第一项表示应用启动页,参考&#xff1a…

如何使用 ArcGIS Pro 快速为黑白地图配色

对于某些拍摄时间比较久远的地图,限于当时的技术水平只有黑白的地图,针对这种情况,我们可以通过现在的地图为该地图进行配色,这里为大家讲解一下操作方法,希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微…

windows SDK编程 --- 消息(3)

前置知识 一、消息的分类 1. 鼠标消息 处理与鼠标交互相关的事件,比如移动、点击和滚动等。例如: WM_MOUSEMOVE: 当鼠标在窗口客户区内移动时发送。WM_LBUTTONDOWN: 当用户按下鼠标左键时发送。WM_LBUTTONUP: 当用户释放鼠标左键时发送。WM_RBUTTOND…

Cisco NX-OS Software Release 10.4(3)F - 网络操作系统软件

Cisco NX-OS Software Release 10.4(3)F - 网络操作系统软件 NX-OS 网络操作系统 请访问原文链接:Cisco NX-OS Software Release 10.4(3)F - 网络操作系统软件,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org Cisc…

K8s: Ingress对象, 创建Ingress控制器, 创建Ingress资源并暴露服务

Ingress对象 1 )概述 Ingress 是对集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTPIngress-nginx 本质是网关,当你请求 abc.com/service/a, Ingress 就把对应的地址转发给你,底层运行了一个 nginx但 K8s 为什么不…

通义灵码牵手阿里云函数计算 FC ,打造智能编码新体验

通义灵码自成功入职阿里云后,其智能编程助手的角色除了服务于阿里云内部几万开发者,如今进一步服务函数计算 FC 产品开发者。近日,通义灵码正式进驻函数计算 FC WebIDE,让使用函数计算产品的开发者在其熟悉的云端集成开发环境中&a…

yolov5 的几个问题,讲的比较清楚

yolov5, 几个问题 【BCELoss】pytorch中的BCELoss理解 三个损失函数原理讲解 https://zhuanlan.zhihu.com/p/458597638 yolov5源码解析–输出 YOLOv5系列(十) 解析损失部分loss(详尽) 1、输入数据是 xywh, 针对原图的, 然后,变成 0-1, x/原图w, y/原图h, w/原图w, h/原图h,…

【Java网络编程】TCP通信(Socket 与 ServerSocket)和UDP通信的三种数据传输方式

目录 1、TCP通信 1.1、Socket 和 ServerSocket 1.3、TCP通信示例 2、UDP的三种通信(数据传输)方式 1、TCP通信 TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象 通信之前要保证连接已经建立(注意TCP是一…

从win10升级到win11后,安全中心没有病毒防护的解决办法

从win10升级到win11后,安全中心没有病毒防护的解决办法 问题就是Win11的安全中心打开没有病毒和威胁防护选项(不装其它第三方防病毒软件的情况下)。 这可能是因为注册表出了问题。 具体操作如下: 点击Windows左下角搜索栏&…

使用JavaScript及HTML、CSS完成秒表计时器

案例要求 1.界面为一个显示计时面板和三个按钮分别为:开始&#xff0c;暂停&#xff0c;重置 2.点击开始&#xff0c;面板开始计时&#xff0c; 3.点击暂停&#xff0c;面板停止 4.点击重置&#xff0c;计时面板重新为0 案例源码 <!DOCTYPE html> <html lang"…

echart-better基于最新的echarts5.5标题旋转功能

使用教程以及相关的echarts-better最新的包在这里&#xff1a;https://edu.csdn.net/course/detail/24569 echarts在侧边竖向展示标题&#xff0c;以及次标题 主标题和次标题进行旋转&#xff0c;适用于移动端或其他场景。