STM32自学记录(十)

embedded/2025/2/12 14:18:37/

STM32自学记录


文章目录

  • STM32自学记录
  • 前言
  • 一、USART杂记
  • 二、实验
    • 1.学习视频
    • 2.复现代码
  • 总结


前言

USART


一、USART杂记

通信接口:通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统。
通信协议:制定通信的规则,通信双方按照协议规则进行数据收发。
定时器计数、PWM输出、AD采集
硬件电路:简单双向串口通信有两根通信线:发送端Tx和接收端Rx。
Tx与Rx要交叉连接。
当只需要单向的数据传输时,可以只接一根通信线。
当电平标准不一致时,需要加电平转换芯片。
电平标准:电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下三种:
TTL电平:+3.3V或+5V表示1,0V表示0
RS232电平:-3~-15V表示1,+3-+15V表示0
RS485电平:两线压差+2~+6V表示1,-2- -6V表示0(差分信号,抗干扰)
串口参数及时序:波特率:串口通信的速率;起始位:标志一个数据帧的开始,固定为低电平;数据位:数据帧的有效载荷,1为高电平,0为低电平,低位先行。校验位:用于数据验证,根据数据位计算得来;停止位:用于数据帧间隔,固定为高电平。
奇偶校验、CRC校验
Tx引脚输出定时翻转的高低电平;Rx引脚定时读取引脚的高低电平。
USART通用同步/异步收发器
USART是STM32内部集成的硬件外设,可根据数据寄存器的一个字节数据自动生成的数据帧时序,从Tx引脚发送出去,也可自动接收Rx引脚的数据帧时序,拼接为一个字节数据,存放在数据寄存器里。
自带波特率发生器,最高达4.5Mbits;
可配置数据位长度(8/9)、停止位长度(0.5/1/1.5/2)
可选校验位(无校验/奇校验/偶校验)
支持同步模式,硬件流控制,DMA,智能卡,Irda,LIN
STM32F103C8T6 USART资源:USART1、USART2、USART3
状态寄存器有两个标志位比较重要:TXE发送寄存器空、RXNE接收寄存器非空
波特率发生器其实就是分频器;APB时钟进行分频,得到发送和接收移位的时钟。
空闲帧–1,断开帧–0,局域网协议用,串口不用
9位字节,有校验;9位字节,无校验。
波特率发生器:发送器和接收器的波特率由波特率寄存器BRR里的DIV确定。
计算公式:波特率=Fpclk2/1/(16*DIV)
USART寄存器:状态寄存器(USART_SR)+数据寄存器(USART_DRR)+波特比率寄存器(USART_BRR)+控制寄存器(USART_CR)+…
每个外设都有:状态寄存器SR(存放各种标志位);数据寄存器DR(存放最关键的数据);配置寄存器CR(存放各种配置参数)
数据模式:HEX模式/十六进制模式/二进制模式(以原始数据的形式显示)/文本模式/字符模式(以原始数据编码后的形式显示)
FlyMcu是串口下载,STLINK Utility是STLINK下载。
串口下载——配置工程,生成一个HEX文件。
状态机
STM32只有在刚复位时才会读取Boot引脚;程序运行之后,切换Boot引脚是无效的。

通信接口:
在这里插入图片描述

硬件电路:
在这里插入图片描述

串口参数及时序:
在这里插入图片描述

USART框图:
在这里插入图片描述

USART基本结构:
在这里插入图片描述

数据帧:
在这里插入图片描述

起始位侦测:
在这里插入图片描述

数据采样:
在这里插入图片描述

波特率发生器:
在这里插入图片描述

数据模式:
在这里插入图片描述

printf函数:
在这里插入图片描述

UTF8不乱码方案:打开工程选项,C/C++,杂项控制栏,添加–no-multibyte-chars
在这里插入图片描述

HEX数据包:
在这里插入图片描述

文本数据包:
在这里插入图片描述

HEX数据包接收:
在这里插入图片描述

文本数据包接收:
在这里插入图片描述

生成HEX文件:
在这里插入图片描述
在这里插入图片描述

FlyMcu软件使用:
在这里插入图片描述
配置BOOT0为1,然后按复位键;软件按开始编程
在这里插入图片描述
下面操作适用于批量测试程序:下载完直接跳转运行程序,当次有效,适用于测试程序
在这里插入图片描述

二、实验

1.学习视频

B站学习视频:https://www.bilibili.com/video/BV1th411z7sn?spm_id_from=333.788.videopod.episodes&vd_source=a329b5512bc531099df1a823202af19c&p=25

2.复现代码

百度网盘链接:https://pan.baidu.com/s/1hNZbjRHVqfOgfw_L61BHAg
提取码:opjb


总结

单片机只是纸老虎,只管去做就好。


http://www.ppmy.cn/embedded/161613.html

相关文章

UnrealEngine开发无人机飞行模拟软件的手柄如何选择

问题: 我用虚幻引擎开发飞行模拟软件,需要选一款手柄。要求:精度高,杆量极值准,复位准,手感好,推杆阻尼均匀,能支持二次开发,无加密,可以被虚幻引擎识别的手…

成为高能量体质:从身体神庙到精神圣殿的修炼之路

清晨五点,当城市还在沉睡,瑜伽垫上的汗水已经折射出第一缕阳光。这不是苦行僧的自虐,而是高能量体质者的日常仪式。在这个能量稀缺的时代,如何把自己修炼成一座小型核电站?答案就藏在身体的每个细胞里。 一、能量管理…

解决 keep-alive 缓存组件中定时器干扰问题

当使用 keep-alive 缓存组件时,组件中的定时器可能会在组件被缓存后继续运行,从而干扰其他组件的逻辑。为了避免这种情况,可以通过以下方法解决: 1. 在组件的 deactivated 钩子中清理定时器 keep-alive 为缓存的组件提供了 acti…

Java算法技术文章:深入解析排序、搜索与数据结构

引言 在软件开发的世界里,算法不仅是程序设计的基础,更是提升软件性能、优化用户体验的关键。Java,作为一种广泛使用的编程语言,提供了丰富的API和标准库来支持各种算法的实现。本文将深入探讨Java中的排序算法、搜索算法以及一些…

dayjs的isSameOrAfter、isSameOrBefore、isAfter、isBefore学习

定义 方法含义是否包含相等是否支持精度参数isAfter()当前日期是否在目标日期之后否是isBefore()当前日期是否在目标日期之前否是isSameOrAfter()当前日期是否等于或在目标之后是是isSameOrBefore()当前日期是否等于或在目标之前是是 用法 const dayjs require(dayjs);// 创…

floodfill算法系列一>图像渲染

目录 题目思路:代码设计:代码呈现: 题目思路: 代码设计: 代码呈现: class Solution { int m,n,sr,sc;int prev;public int[][] floodFill(int[][] image, int sr, int sc, int color) {if(image[sr][sc] …

RoboGrasp:一种用于稳健机器人控制的通用抓取策略

25年1月来自北京大学和哈佛大学的论文“RoboGrasp: A Universal Grasping Policy for Robust Robotic Control”。 模仿学习和世界模型在推进通用机器人学习方面显示出巨大的潜力,而机器人抓取仍然是实现精确操控的关键挑战。现有方法通常严重依赖机械臂状态数据和…

10苍穹外卖之Task、WebSocket(音频是前端实现)

课程内容 Spring Task 订单状态定时处理 WebSocket 来单提醒 客户催单 功能实现:订单状态定时处理、来单提醒和客户催单 订单状态定时处理: 来单提醒: 客户催单: 1. Spring Task Spring Task 定时任务-CSDN博客 1.1 介绍…