免费建设门户网站,win10使用dw做网站,仿站下载工具,WordPress网站关闭插件--单片机概述STM32开发环境搭建创建工程 --STM32-GPIO#xff08;重点#xff09;编程 --STM32-USART串口应用 --STM32-SPI(液晶屏)中断系统 --STM32-时钟系统#xff08;重点中的重点#xff09; --STM32-PWMADC --STM32-DMA DHT11 1. 计算机组成原理 1.1 计算机的组成 1… --单片机概述STM32开发环境搭建创建工程 --STM32-GPIO重点编程 --STM32-USART串口应用 --STM32-SPI(液晶屏)中断系统 --STM32-时钟系统重点中的重点 --STM32-PWMADC --STM32-DMA DHT11 1. 计算机组成原理 1.1 计算机的组成 1. CPU 控制器整个计算机的控制中心 运算器处理计算和数据 2. 存储器 ROMRead Only Memery 程序存储器只读存储器掉电不丢失数据存储介质flash闪存 RAMRAndom Memery 内存、掉电丢失数据存储介质SRAM 3. 输入将其他信号转换为电信号。 4. 输出将电信号、转为人或其他设备能理解的信号。 1.2 IO逻辑 数据在计算机系统中的存储传输运算都是以二进制的形式进行的。 数据的传输其实通过数据总线真正传递的是电信号也就是高低电平。 计算机系统中的高低电平逻辑1和0。 电压电压差 电势差 1.3 存储器 Cache高速缓冲存储器的作用 提高访问速度缓存是一种小而高速的存储器用于存储最近或频繁使用的数据。由于缓存的访问速度比主存如RAM快很多它能显著减少CPU等待数据的时间从而提高系统性能。减少内存延迟当处理器需要访问数据时如果数据在缓存中可以快速获取而不需要花费较长时间去访问主存。这大大减少了内存延迟。提高吞吐量通过减少内存访问延迟和提高访问速度缓存能够提高整体系统的吞吐量使CPU能够更高效地执行更多指令。 1.4 总线重点理解 总线Bus是计算机各种功能部件之间传送信息的公共通信干线它是由导线组成的传输线束 按照计算机所传输的信息种类 计算机的总线可以划分为数据总线、地址总线和控制总线 分别用来传输数据、数据地址和控制信号 1. 地址总线 1CPU是通过地址总线来指定存储单元的 2地址总线决定了cpu所能访问的最大内存空间的大小 如: 10根地址线能访问的最大的内存为1024位二进制数据1024个内存单元 3地址总线是地址线数量之和 2. 数据总线 1是CPU与内存或其他器件之间的数据传送的通道。 2数据总线的宽度决定了CPU和外界的数据传送速度。 3每条传输线一次只能传输1位二进制数据。 如: 8根数据线一次可传送一个8位二进制数据(即一个字节)。 4数据总线是数据线数量之和。 3. 控制总线 1CPU通过控制总线对外部器件进行控制。 2控制总线的宽度决定了CPU对外部器件的控制能力。 3控制总线是控制线数量之和。 总结 数据总线宽度决定CPU一次传输数据的数据量 地址总线决定了CPU的寻址能力 控制总线CPU对外部器件的控制能力。 2. 单片机基础掌握 2.1 什么是单片机 单片机是单片微型计算机的简称MCU是Microcontroller的简称也就是嵌入式微控制器。采用集成电路技术将具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、定时器/计时器、多种I/O口和中断系统等功能集成到一块硅片上。 可以说单片机就是一个小而完善的微型计算机系统。 SOCSYStem on Chip定制版的单片机 2.2 单片机的型号 51单片机(8位) AT89C51 ATMEL STC89C51 宏晶科技STC 宏晶科技_百度百科宏晶科技是新一代增强型8位单片微型计算机标准的制定者和领导厂商。致力于提供满足中国市场需求的高性能单片机技术在业内处于领先地位销售网络覆盖全国。https://baike.baidu.com/item/%E5%AE%8F%E6%99%B6%E7%A7%91%E6%8A%80?fromModulelemma_search-box ATMEL公司_百度百科Atmel 公司为全球性的业界领先企业致力于设计和制造各类微控制器、电容式触摸解决方案、先进逻辑、混合信号、非易失性存储器和射频 (RF) 元件。凭借业界最广泛的知识产权 (IP) 技术组合之一Atmel 为电子行业提供针对工业、消费、安全、通信、计算和汽车市场的全面的系统解决方案。ATMEL在系统级集成方面所拥有的世界级专业知识和丰富的经验使其产品可以在现有模块的基础上进行开发保证最小的开发延期和风险。凭借业界最广泛的知识产权IP组合Atmel提供电子系统完整的系统解决方案的厂商。Atmel公司的股票代码为“ATML.O”在纳斯达克股票市场上市。ATMEL公司是世界上高级半导体产品设计、制造和行销的领先者产品包括了微处理器、可编程逻辑器件、非易失性存储器、安全芯片、混合信号及RF射频集成电路。通过这些核心技术的组合ATMEL生产出了各种通用目的及特定应用的系统级芯片以满https://baike.baidu.com/item/ATMEL%E5%85%AC%E5%8F%B8?fromModulelemma_search-box TI公司 MSP43016位 32单片机32位 STM32 ST意法半导体 GD32 兆易创新GD 32位处理器CPU单次运算所能处理得最大的位数意法半导体_百度百科意法半导体ST集团于1987年成立是由意大利的SGS微电子公司和法国Thomson半导体公司合并而成。1998年5月SGS-THOMSON Microelectronics将公司名称改为意法半导体有限公司。意法半导体是世界最大的半导体公司之一。公司2019年全年净营收95.6亿美元; 毛利率38.7%营业利润率12.6%; 净利润10.32亿美元。https://baike.baidu.com/item/%E6%84%8F%E6%B3%95%E5%8D%8A%E5%AF%BC%E4%BD%93?fromModulelemma_search-box 兆易创新科技集团股份有限公司_百度百科北京兆易创新科技股份有限公司于2005-04-06在北京市工商行政管理局登记成立。法定代表人朱一明。2022年8月1日消息公司已完成工商变更登记并取得了北京市海淀区市场监督管理局换发的《营业执照》。工商变更登记内容为名称由“北京兆易创新科技股份有限公司”变更为“兆易创新科技集团股份有限公司”。https://baike.baidu.com/item/%E5%85%86%E6%98%93%E5%88%9B%E6%96%B0%E7%A7%91%E6%8A%80%E9%9B%86%E5%9B%A2%E8%82%A1%E4%BB%BD%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8?fromModulelemma_search-box 2.3 8位和32位的区别 2.4 开发板/最小系统板 开发板通常是学习用途功能比较全接口丰富是用于研发、研究、学习的一块板子。 在后面学习底层的时候会用到这里不过多介绍了咱们主要看下咱们32要用到的板子 最小系统板是个核心板集成了核心的通用功能可以根据需求定制各种不同的底板通用性较好。再者核心板作为一块独立的模块被分离出来也降低了开发的难度增加了系统的稳定性和可维护性通常用于做项目也可以作为模块在产品里在直接用。 3. STM32 3.1 简介 STM32是意法半导体公司生成的一款32位的微控制器。 ST公司用ARM设计的内核完善周围电路、增加外设再进行封装成STM32。 STM32的功能强大性能优异片上资源丰富低功耗是一款经典的微型控制器。 3.2 命名规范 STM32G030C8T6 基于ARM的Cortex M0内核。 ST 意法半导体 M 微控制器microcotroller 32 32位处理器 类型 F 通用/基础型 foundation G 多用途型 general-purpose L 低功耗 low power H 高性能 High performance S 简单/标准型 Standard 系列 0 精简系列 1/2/3 增强系列 4/7 高性能系列 子型号 00/01/02/03/05/0 引脚数量 K/6-32脚 C/8-48脚 R-64脚 V-100脚 Z-144脚 A-168脚 I-176脚 B-208脚 N-216脚 存储量 6 32KB 8 : 64KB B 128KB C 256KB D 384KB E 512KB G 1MB I 2MB 封装 U - UQFN封装 T - TQFP封装这个从单片机上是可以看出来的从中间过是U型从低下过是T型 工作温度 6 - -40 ~ 85度 3.3 STM32的优势 STM32 | 产品 | STM32 | MCU单片机 | 意法半导体STM | STMCU中文官网 产品型号丰富可选择强运算速度快功耗低处理器接口丰富库函数开发体系完整应用广泛 4. STM32G030系统架构掌握 4.1 架构理解与对比 STM32G0 快速的了解下STM32G0的新特性 1STM32G0仅需一组电源引脚不仅降低了BOM成本还可以减少PCB面积这一特性提升了IO的利用率到高达93%。 2内部提供精度为1%的高速时钟HSI可以满足绝大数的应用可进一步节省成本。可以大大减少因为不同的架构及不同开发工具而带来的成本开销和精力投入。 3STM32G0系列的能效非常高运行模式功耗低于100μA/ MHz并提供多种低功耗模式以节省电能延长电池续航时间。当实时时钟RTC运行时停止模式功耗仅为3-8μA待机功耗仅为500nA。 4集成了一个12位2.5 MSPS的ADC利用硬件过采样还可将精度提高到16位。支持最新的USB Type-C和Power Delivery 3.0版本。 5提供 16 KB 到 512 KB片内 Flash采用 8 引脚到 100 引脚提供了5种封装形式(SO/TSSOP、WLCSP、BGA、QFN、LQFP)。实现了万能架构 (one-architecture-fits-all) 的概念以满足未来的市场需求。 STM32F0 系统主要由以下几个模块组成 : ● 二个主模块 : – Cortex-M0 内核及先进高性能总线 (AHB bus) – 通用 DMA (通用的直接存储器存取) ● 三个从模块 : – 内部 FLASH – 内部 SRAM – AHB和AHB到APB的连接桥挂在APB总线上和AHB的外设 5. ARM体系架构 面试题 从“英国苹果”到RISC芯片王者——ARM的前世今生之完整追溯 (baidu.com) 什么是ARM 1. ARM是一家公司只做技术服务知识产权设计ARM架构不产芯片也不出售芯片。 2. ARM处理器内核ARM处理器是英国Acorn有限公司设计的低功耗低成本的第一款RISC的微处理器经典处理器 ARM7\ARM9\ARM11,后续处理器16年开始以cortex命名。 COTEX——A 高性能的内核平板手机电脑 Cortex-A5低功耗适合入门级应用。 Cortex-A7高能效广泛应用于智能手机。 Cortex-A9高性能应用广泛。 Cortex-A15高性能用于更高端的设备。 Cortex-A5364位处理器注重功耗与性能平衡。 Cortex-A57高性能64位处理器。 Cortex-A72用于旗舰级设备。 Cortex-A75、Cortex-A76、Cortex-A77、Cortex-A78不断提升的性能和能 Cortex——R实时性要求较高的场景航天汽车导弹坦克 Cortex-R4适用于高性能实时应用。 Cortex-R5增强的实时性能。 Cortex-R7更高的性能和确定性。 Cortex-R8最新的实时处理器提供更高的性能和安全性。 Cortex——M低成本低功耗的解决方案嵌入式系统当中 Cortex-M0超低功耗适合简单应用。 Cortex-M0进一步降低功耗并提高性能。 Cortex-M3平衡性能和能效用于多种嵌入式应用。 Cortex-M4增加DSP功能适用于信号处理应用。 Cortex-M7最高性能的Cortex-M处理器适用于复杂的嵌入式系统。 Cortex-M23基于ARMv8-M架构支持TrustZone安全特性。 Cortex-M33更高的性能和安全性适用于高级嵌入式应用。 Cortex——X:超高性能 主要针对高端智能手机、平板电脑、笔记本电脑和其他需要高计算能力和能效的设备。 这些芯片的设计目标是提供领先的单线程性能和整体系统性能。 Cortex-X1 首款Cortex-X系列产品于2020年发布。 相较于Cortex-A77性能提升了约30%。 Cortex-X2 2021年发布基于ARMv9架构。 提供进一步的性能提升并改进了机器学习和安全功能 3. ARM是一款指令集 能够指挥处理器完成相应功能的命令的集合 5.1 什么是指令集呢 指令能够指挥处理器完成相应功能的命令- 指令集指令的集合 指令在程序中的作用 在程序中指令的组合形成了一系列步骤每个步骤执行特定的操作从而完成整个程序的功能。通过有序地执行这些指令处理器可以实现从简单的数学运算到复杂的逻辑控制、数据处理、设备管理等各种任务。 5.2 指令的分类掌握 RISCReduce精简指令集 精简指令集(RISC)--微处理器 只保留常用的的简单指令硬件结构简单复杂操作一般通过简单指令的组合实现一般指令长度固定且多为单周期指令。 RISC处理器在功耗、体积、价格等方面有很大优势所以在嵌入式移动终端领域应用极为广泛 优点便宜体积小功耗低指令简短对散热的要求不高 缺点没办法处理复杂的指令性能差 CISCComplex复杂指令集 复杂指令集(CISC)--电脑CPU 不仅包含了常用指令还包含了很多不常用的特殊指令硬件结构复杂指令条数较多一般指令长度和周期都不固定 CISC处理器在性能上有很大优势多用于PC及服务器等领域 优点性能好运算速度快 缺点CPU设计复杂体积大功耗高成本高散热要求高。 5.3 ARM是一款精简指令集 ARM指令集所有指令机器码都专用32bit存储空间代码灵活指令简洁执行ARM指令PC每次自加4 Thumb指令集所有指令机器码都专用16bit存储空间代码灵活指令简洁执行ARM指令PC每次自加2 6. Cortex-M0内核架构 Cortex-M0 微处理器主要包括处理器内核、嵌套向量中断控制器NVIC、调试子系统、内部总线系统构成。Cortex-M0 微处理器通过精简的高性能总线AHB-LITE与外部进行通信。 6.1 Cortex-M0特性 采用Thumb指令集 ARM指令是32位的而Thumb指令时16位的如果存储空间中可以放32条ARM指令就可以放64条Thumb指令因此在存放Thunb指令时代码密度高高性能使用ARMv6-M的体系架构中断数量可配置1-32个4级中断优先级门电路少低功耗 中断唤醒控制器(WIC)支持极低功耗休眠模式直接掉电休眠兼容性好 与Cortex-M1 处理器兼容向上兼容 Cortex-M3 和 Cortex-M4 处理器 可兼容对于程序员非常友好所以这一点也是很好用的可以很容易地升级、移植。支持多种嵌入式操作系统很简单的操作一同RTOS也被多种开发组件支持包括 MDKARM Keil 微控制器开发套件、RVDSARM RealView 开发组件、IAR C 编译器等。 6.2 Cortex-M0工作模式 线程模式芯片复位之后执行普通代码用户程序。 6.3 Cortex-M0工作状态 Thumb状态程序正常运行的状态 调试状态调试程序的时候你处理器的状态。 6.4 Cortex-M0指令集 ARM处理器支持两种指令集ARM 和 Thumb。 EPSR寄存器的T标志位负责指令集的切换Cortex-M0只支持Thumb指令。 ARM指令集 32位精简指令集 指令长度固定 降低编码数量产生的耗费减轻解码和流水线的负担 Thumb指令集指令宽度16位是ARM指令集的一个子集 与32位指令集相比大大节省了系统的存储空间密度高 Thumb指令集不完整所以必须配合ARM指令集一同使用 6.5 Cortex-M0的寄存器了解 R0-R1213个通用寄存器。其中 R0-R7为低端寄存器可作为16位或32 位指令操作数R8-R12为高端寄存器只能用作32位操作数 R13栈指针寄存器 SP(the stark pointer)Cortex-M0 在不同物理位置上存在两个栈指针主栈指针 MSP进程栈指针 PSP。 在处理模式(异常、中断)下只能使用主堆栈在线程模式下可以使用主堆栈也可以使用进程堆栈指针。 系统上电的默认栈指针是MSP。这样设计的目的是为了在进行模式转换的时候减少堆栈的保存工作。同时也可以为不同权限的工作模式设置不同的堆栈。 R14链接寄存器LR(the link register)用于存储子程序或者函数调用的返回地址。 R15程序计数器PC(the program counter register)存储下一条将要执行的指令的地址。 特殊寄存器 xPSR组合程序状态寄存器由三个程序状态寄存器组成 应用PSRAPSR保存程序计算结果的状态标志 N负数标志 Z零标志 C进位借位标志 V溢出标志 中断PSRIPSR包含当前ISR中断状态寄存器中断服务程序的异常编号 执行PSREPSR包含Thumb状态位T位的标志可以采用哪种指令MO支持两种指令集的切换。 7. GPIO 1. 基本概念 G030GPIO所在的位置 GPIO的全称是General purpose input output通用的输入输出接口 GPIO是嵌入式系统、单片机开发中最常用的接口用户可以通过编程灵活的对接口进行控制实现对电路板上LED、数码管、按键等常用设备控制驱动也可以作为串口的数据收发管脚或AD的接口等复用功能使用其作用和功能是非常重要的。 2. 实际应用 input——输入——数据采集各种传感器按键 output——输出——输出控制 LED灯数码管LCD 3. 功能描述 4.功能框图 VDD元器件内部的电压3.3v VSS公共地线 VCC接入电路的电压 施密特触发器 1. 去除噪声 由于外部输入的电信号可能会出现脉冲等噪声的影响为了让信号更加清晰所以就设置了TTL施密特触发器来进行整形。 2. 波形整形 会自动化过滤掉不稳定的波形 3. 提高抗干扰能力 由于施密特触发器具有滞回效应它能够提高电路的抗干扰能力。即便输入信号存在一定程度的抖动或者噪声施密特触发器仍能保持稳定的输出状态。 5. GPIO基本功能 5.1 输入功能 浮空输入 IO——施密特触发器——输入数据寄存器——CPU读取数据 让上下拉电阻都不接入电路 通俗讲就是让管脚什么都不接悬空着。 此时VDD和VSS所在路径的两个开关同时断开。因为没有上拉和下拉所以当IO口没有接输入的时候此时的电平状态会是一个不确定的值完全由外部输入决定。 由于浮空输入一般多用于外部按键输入结合图上的输入部分电路浮空输入状态下IO的电平状态是不确定的完全由外部输入决定如果在该引脚悬空的情况下读取该端口的电平是不确定的易受干扰。 优点输入的电平完全由外界决定与内部电路无关 缺点没有外接电路介入的时候IO引脚浮空电平不稳定 上拉输入 相比于浮空输入接入上拉电阻在没有信号的时候IO口识别的都是高电平。 IO——上拉电阻——施密特触发器——输入数据寄存器——CPU读取 当没有信号输入时IO口识别的都是高电平当外部电路输入的信号不稳定时上拉电阻就会将输入的信号拉高此时引脚始终读到高电平信号。首先以外部为主 优点外界无输入时电平被稳定在高电平 应用在电平信号不稳定时 下拉输入 下拉电阻接入电路在没有信号的时候IO口识别的都是低电平。 IO——下拉电阻——施密特触发器——输入数据寄存器——CPU读取。 输入的电平不会因上下浮动而导致输入信号不稳定当外部没有信号输入时下拉电阻会将输入信号钳在低电平此时引脚始终读到低电平信号。 模拟输入 IO——片上外设 信号进入后不经过上拉电阻或者下拉电阻关闭施密特触发器经由另一线路把电压信号传送到片上外设模块所以可以理解为模拟输入的信号是未经处理的信号是原汁原味的信号。 应用ADC 模拟信号和数字信号有什么区别呢 1. 时间连续性 模拟信号是连续的 数字信号是离散的 2. 传输方式上 模拟信号使用模拟量来表示电压信号 数字信号通过0/1构成的数据流来表示的 3. 保密性 数字信号的保密性更强 模拟信号保密性更差 5.2 输出功能 推挽输出 推挽描述电流的动作 推 N_MOS关闭P_MOS打开电流从内部的VDD给外部供电电流从内部流向外部。 推出去。 挽 N_MOS打开P_MOS关闭电流从外部流进来挽回来·。 输出数据寄存器1——输出控制‘0’——PMOS激活 输出数据寄存器0——输出控制‘1’——NMOS激活 输出寄存器上的’0’激活N-MOS而输出寄存器上的’1’将激活P-MOS。 具备输出高低电平的能力。 推挽输出就是可以需要利用两个不同的MOS管来实现输出。 推挽输出模式下P-MOS管N-MOS管通过设置位设置/清除寄存器或者输出数据寄存器的值途经P-MOS管和N-MOS管最终输出到I/O端口。 一般最常用的输出方式既能输出高电平也能输出低电平。 开漏输出 在开漏模式下只能输出低电平。输出引脚可以有两种状态 低电平状态逻辑0当内部晶体管导通时开关闭合引脚被拉到地电位输出为低电平0V或接近0V。高阻态逻辑1当内部晶体管不导通时开关断开引脚处于高阻态。外部上拉电阻将引脚电压拉高到Vcc电源电压输出为高电平。 特点 虽然我们可以看到开漏输出是没有办法在内部输出一个高电平但是这一个看似是缺点。其实实际上是一种优点。当给一个低电平的时候MOS管没有导通此时电压不确定导致无法输出高电平但是一旦我们在外部增加一个上拉那么这一个缺点就会被有效避免。并且因为是我们自己设计一个上拉这个上拉的电压是由我们自己确定这样我们就可以根据外部电路需要多少V的高电平来给这一个上拉的电压可以更好的适应更多情况。如下图我们可以给定任意的VDD电压来适应我们实际所需要的情况。 5.3 推挽输出与开漏输出区别 什么是线或逻辑与线与逻辑 在一个结点(线)上, 连接一个上拉电阻到电源 VCC 或 VDD 和 n 个 NPN 或 NMOS 晶体管的集电极 C 或漏极 D, 这些晶体管的发射极 E 或源极 S 都接到地线上, 只要有一个晶体管饱和, 这个结点(线)就被拉到地线电平上. 因为这些晶体管的基极注入电流(NPN)或栅极加上高电平(NMOS), 晶体管就会饱和, 所以这些基极或栅极对这个结点(线)的关系是或非 NOR 逻辑. 如果这个结点后面加一个反相器, 就是或 OR 逻辑. 注个人理解线与接上拉电阻至电源。(~A)(~B)~(AB)由公式较容易理解线与此概念的由来 如果用下拉电阻和 PNP 或 PMOS 管就可以构成与非 NAND 逻辑, 或用负逻辑关系转换与/或逻辑. 注线或接下拉电阻至地。(~A)(~B)~(AB); 这些晶体管常常是一些逻辑电路的集电极开路 OC 或源极开路 OD 输出端. 这种逻辑通常称为线与/线或逻辑, 当你看到一些芯片的 OC 或 OD 输出端连在一起, 而有一个上拉电阻时, 这就是线或/线与了, 但有时上拉电阻做在芯片的输入端内. 顺便提示如果不是 OC 或 OD 芯片的输出端是不可以连在一起的, 总线 BUS 上的双向输出端连在一起是有管理的, 同时只能有一个作输出, 而其他是高阻态只能输入. 6.GPIO的寄存器 寄存器地址 使能时钟的地址 7. 实验一 7.1 实验要求 点亮LED灯 7.2 实验分析 查看实物——》找到丝印查看原理图找到连接的引脚点亮灯 7.3 实验过程 1. 找丝印 2. 查看原理图 3. 寄存器配置 7.4 代码实现 纯C语言 如果启动文件有问题新建文件夹 int main(void)
{//配置时钟使能*(unsigned int *)0x40021034 | 11;//端口模式*(unsigned int *)0x50000400 ~(11);*(unsigned int *)0x50000400 | 10;//输出类型*(unsigned int *)0x50000404 ~(10);//输出数据*(unsigned int *)0x50000414 ~(10);while(1){}
} c程序优化 typedef struct{unsigned int MODER;unsigned int OTYPER;unsigned int XXXX;unsigned int PUPDR;unsigned int YYYY;unsigned int ODR;
}GPIO;
#define GPIOB (*(GPIO *)0X50000400)
#define RCC_GPIOB *(unsigned int *)0x40021034int main(void)
{RCC_GPIOB | 11;GPIOB.MODER ~(11);GPIOB.MODER | 10;GPIOB.OTYPER ~(10);GPIOB.ODR ~(10);while(1){ }
}CUBEMX实现简单 代码实现 RCC-IOPENR | 11;GPIOB-MODER ~(0x34); //清零GPIOB-MODER | 14;GPIOB-OTYPER ~(12);GPIOB-ODR ~(12);方法二更简单 HAL库函数实现 功能设置或清除选定的端口位 参数1.端口号 2.引脚号 3.电平状态 返回值无 功能电平状态切换 参数端口号 引脚号 返回值无。 延时函数 HAL_Delay(500); 毫秒级延时 8. 实验二 实验要求 按键控制灯的量灭 实验分析 找按键和灯的丝印五向按键--S1LED-》D7D9D10原理图 实验过程 原理图分析 CUBMX配置 HAL库函数分析 功能读取指定的引脚 参数 端口号 引脚 返回值引脚的值 代码实现 9. 抖动问题 机械按键通常由两个金属触点组成当按键按下或释放时这两个触点会迅速接触或分离。但由于机械结构的弹性这个过程并不是瞬间完成的而是会产生短暂的抖动导致在几毫秒内有多次接触和断开的现象。 消除抖动 方法一延时消抖 8. 串口通信 两个端一个发送端一个接收端数据的传递信息的交互 摩斯密码兴趣拓展 是由点.和划-组成的但它并不是严格意义上的二进制码。二进制码严格来说是由0和1两种状态构成的编码系统而摩斯密码更像是一种时长编码系统。 使用短信号点.、长信号划-以及不同的间隔时间。变长度编码不同字符用不同长度的点和划组合表示。 摩斯密码的结构 摩斯密码的每个字符由点.和划-组成通过不同的组合来表示不同的字母和数字。不同字符之间有不同的间隔时间来区分。 点.短信号划-长信号字符间隔字符内部点和划之间的间隔较短字符间隔字符之间的间隔较长单词间隔单词之间的间隔更长 例如 字母A的摩斯密码是. -字母B的摩斯密码是- . . . 1. 通信基础 通信的划分 根据通信方向划分 单工 一根信号线单向发送或者接收 要么收要么发只能作为接受或者发送设备。 比如收音机 半双工一根信号线可以双向进行但是不能同时 可以收可以发但是不能同时进行。 比如对讲机 全双工 两根信号线,可以在同一时刻收发信息。比如: 手机电脑 根据通信方式划分 串行通信指的是同一时刻只能收或发一个bit位信息因此只用1根信号线即可 串行传输数据一位一位串起来逐个传输数据按位顺序传输 优点占用的引脚资源少 缺点传输速度慢 并行通信指的是同一时刻可以收或发多个bit位的信息因此需要多根信号线才行 并行传输使用多根线同时传输一个字的多个位如 8 根线一次传输 8 个位。 优点传输速度快 缺点占用引脚多 根据时钟信号划分 同步通信通信双方根据同步信号通信比如双方有一个共同的时钟信号(SPI全双工 I2C半双工) 异步通信通信双方有自己独立的系统时钟大家约定好通信的速度。 异步通信不需要同步信号但是并不是说通信的过程不同步UART 通信速度单位时间内发送或者接收的数据位数 波特率一秒发送多少bit位 单位bit/s bps 常用的波特率9600bps 115200bps 电器协议补充 TTL、RS232、RS485的区别和简介_rs232和ttl-CSDN博客 TTL电平 特点 电平范围典型的TTL电平为0V和5V有时也使用3.3V。逻辑低00V通常0V - 0.8V逻辑高15V通常2V - 5V 通信方式单端信号通常用于短距离、低速率的数字电路和芯片之间的通信。 优点简单、成本低。 缺点抗干扰能力差传输距离短通常在几十厘米以内。 应用常用于微控制器和其他数字电路之间的信号传输。 RS232 电平范围 逻辑低03V至15V 逻辑高1-3V至-15V 通信方式单端信号全双工或半双工。 传输距离通常在15米以内理论上可达30米在低速率下。 波特率最高可达115200 bps常见的波特率有9600 bps、19200 bps等。 优点 抗干扰能力较强适用于较长距离的通信。 适合点对点通信。 缺点 信号电平相对较高可能需要专门的电平转换芯片如MAX232。 不适合多点通信。 应用早期的计算机串口通信、调制解调器、工业设备、串口打印机等。 RS485 电平范围 通信方式差分信号全双工或半双工。 传输距离理论上可达1200米在低速率下常见实际应用在几百米以内。 波特率最高可达10 Mbps但传输距离越长波特率通常越低。 优点 非常强的抗干扰能力适用于长距离和工业环境。 支持多点通信多达32个节点可以扩展到128个甚至更多。 缺点 需要差分驱动和接收器电路。 通信协议相对复杂需要适当的协议来管理总线冲突和通信。 应用工业自动化、楼宇控制、远程数据采集、串行联网设备等。 2. 串口通信协议 空闲状态始终保持在高电平为了提高抗干扰能力 起始位1位 低电平表示数据开始传输数据的起始 数据位9位/8位/7位可配置 检验位可选起偶校验 奇校验数据位上1的个数校验位上1的个数奇数 偶校验数据位上1的个数校验位上1的个数偶数 注意校验位用来校验数据传输过程中的错误可以是奇偶校验也可以不校验。 检验位的设置根据通信协议和数据传输的可靠性需求而定。 停止位1位 将电平信号拉高回到空闲状态表示传输的结束。 总结开始通信时我们要有一个起始位和结束位高信号表示通信停止当信号接收器检测到电平由高变低时表示开始通信准备开始读数据从前面开始读到停止位。 3. USART 3.1 简单介绍 USART支持同步/异步通信全双工串行 UART只支持支持异步通信没有时钟线全双工串行 是一种常见的外设用于串行通信。它通常嵌入在微控制器或微处理器中用于与外部设备进行数据交换。 USART具有以下功能和特点 通用性支持同步和异步通信模式因此可以与多种外部设备进行通信。收发数据可以发送和接收数据支持全双工通信。波特率控制支持灵活的波特率配置适应不同的通信速率要求。错误检测和处理具有错误检测和处理功能如奇偶校验、帧错误检测等确保通信的可靠性。流控制支持硬件流控制如RTS/CTS和软件流控制如XON/XOFF用于控制数据流。 USART通常用于串行通信接口如RS-232、RS-485、SPI串行外围接口、I2CInter-Integrated Circuit等。 3.2框图分析 发送数据寄存器发送数据寄存器用于存储即将发送的数据字节。当需要发送数据时CPU将待发送的数据加载到发送数据寄存器中。 发送移位寄存器用于数据的传输按照串行通信协议逐位移位发送一旦所有数据位都被发送完毕发送移位寄存器将发送停止位。 3.3 数据接收和发送的过程 数据接收过程由Rx端口接收到数据接收移位寄存器逐位放入到接收数据寄存器由CPU或者DMA调用 数据发送过程由数据总线写入发送数据寄存器发送移位寄存器逐位发送到TX数据发送端。 4. 串口相关寄存器 串口控制寄存器 USART_CR USART_CR1 USART_CR2 USART_CR3 决定数据帧的格式设备功能初始化、通信帧格式配置 波特率寄存器 USART_BRR 决定通信速度 bps bit/s 数据发送寄存器 USART_TDR 决定发送的数据将要发送的数据写入 数据接收寄存器 USART_RDR 决定接收的数据将要接收数据的读取 中断和状态寄存器 USART_ISR 5. 实验一串口发送实验 实验要求 单片机通过串口给你的电脑每隔1s发送一个hello world 实验过程 观察实物 丝印“p4” 2. 原理图分析 工程配置 代码实现 发送字符串的函数 实验二串口收发实验 实验要求 通过串口助手向单片机发送数据单片机接收到数据后原样返回。 代码实现 实现字符接收函数 Uart_getchar();实现字符串接收函数 Uart_Gets(); 9. 输入输出重定向 printf重定向 int printf(const char * format,...) printf函数底层调用的是fputc函数fputs是将要发送的数据写入到标准输出流stdout int fputc(int /*c*/, FILE * /*stream*/) 因此如果想让printf将数据输出到串口需要重写fputc 代码实现 主函数调用 重写FPUTC scanf重定向 10. 库函数实现 功能发送一个数据 参数句柄标志位 要输出的缓存区的首地址 发送的数据量大小 超时时间 返回值发送状态 功能接受一个数据 参数句柄 缓存区首地址数组首地址 接受的数据量 超时时间 参数接收状态 库函数代码实现