一、单片机MCU

1.1 单片机和嵌入式

  1. 嵌入式系统
    以计算机为核心,tips:计算机【处理单元,内存 + 硬盘】
    可以控制的外部设备,传感器,电机,继电器
    嵌入式开发 数据源 --> 处理器(CPU MCU MPU) --> 执行器
    计算机通过硬件连接和程序控制,让整个设备可以满足用户的需求,例如 智能手表,汽车驾驶辅助,无人机,武器系统,智能家居。
  2. 单片机 --> MCU
    MCU (Microcontroller Unit) 微型控制单元,主要包括
    中央处理器,指令处理单元
    ROM 硬盘/存储空间
    RAM 运行内存
    可以认为 MCU 是一个小型计算机系统。具备独立运行控制执行的作用。

1.2 ARM公司

        ARM Holdings(Advanced RISC Machines)不生产芯片,仅提供芯片设计方案和芯片解决方案。
以下是 ARM 公司对外提供的芯片内核方案:
        Cortex-A 内核,更新频率更快,性能最好,紧跟市场潮流!!!主要用于要求性能较高,能
耗支持较高的使用场景,利用手机 SOC/高通,小米,联发科,苹果。车机芯片,ARM 开发
板。后续驱动课程使用的芯片 RK3399 (dual-core Cortex-A72 and quad-core Cortex-A53)
RK3588 基于 Cortex-A 内核
        Cortex-R 内核 常见场景有车辆 ECU,要求响应速度较快常见
        Cortex-M 内核 主要用于 MCU 微型处理器,目前主流的内核方案有 M0 M3 M4 M7, 常见
MCU STM32F1XX(M3 内核) STM32F4XX(M4 内核) STM32H7XX(M7 内核)

1.3 常用的32芯片

  • 国外芯片
    • ST 系列:由 STM 意法半导体公司生产,常用型号有 STMF1、STMF4、STMH7、STMLXX、STMW 等。
    • Ti 系列:美国德州仪器公司的产品,该公司是世界上最大的 DSP(数据信号处理)芯片提供商,例如 TM320F28335PGFA。
  • 国内芯片
    • GD 兆易创新:是目前国内 32 MCU 芯片领域的领头企业,内核采用 ARM 公司提供的 Cortex - M 系列,且完整兼容 STM32 芯片。
    • 乐鑫科技:有 ESP32 芯片,以及 WiFi 芯片 ESP8266。
    • 华大半导体。
    • 沁恒微电子。
    • 灵动微电子。
  • 国产自研芯片:架构、内核、知识产权均为国内自主研发。
    • 龙芯:主要面向服务器、PC 工业控制、武器装备、政府设施等领域的芯片解决方案。
    • 海思:华为旗下的芯片公司。
    • 国内车企(如吉利、蔚来、小鹏、长安等)都在自研芯片。
  • 目前国内大多数公司都在转向国产芯片方案,这是为了芯片安全和信息安全。学习 STM32 的重点内容是【寄存器操作方式】和【32 标准库方式】开发。

1.4 STM32开发板概述

  • STM32 是意法半导体公司基于 ARMv7 Cortex - M 内核设计的 32 位 MCU 芯片。
  • F 表示通用型号,还有 L、H、W、G 相关系列。
  • 103 表示增强型。
  • F1xx 表明当前内核为 Cortex - M3 内核。
  • ZET6 各部分含义:
    • Z:表示引脚数为 144。
    • E:表示闪存 Flash 为 512KB,属于大容量存储设备。
    • T:表示封装标准为 LQFP 封装。
    • 6:表示工作温度限制在 - 40℃~85℃。

二、 GPIO

2.1 GPIO概述

2.1 GPIO 概述
        GPIO(General Purpose Input/Output)是 STM32 微控制器最基本、最常用的外设之一,用于与外部设备进行数字信号交互(如控制 LED、读取按键、驱动传感器等)。
咱们学习 Hi3861 中利用 GPIO 完成了 LED 控制,按键控制,传感器数据读取,蜂鸣器控制,利用 GPIO 模版 PWM 控制舵机。
GPIO 的控制核心逻辑

  • 输入输出控制
  • 高低电平控制
    在当前 STM32F103ZET6 中一共有
  • 7 组 GPIO 分别对应 GPIOA~GPIOG 分组。
  • 同时每一个 GPIO 分组对应 16 个对外引脚,流入 GPIOA00~GPIOA15 ==>PA0~PA15
  • STM32F103ZET6 对外可以提供可编程 GPIO 引脚一共是 16 * 7 ==> 112 引脚

2.2 STM32F103ZET6 原理图简单分析

         原理图是开发中重要的参考依据,通过原理图分析当前 MCU 芯片引脚对应的功能模块,已经控制方式分析。以 LED 灯为例分析,当前开发板中 DS0 丝印位号对应的 LED 灯在原理图中,对应的引脚为 LED0。

2.3 GPIO STM32模式

在 STM32 开发中,操作 GPIO 需要确定的内容有:

  • 那一组 GPIO,例如 GPIOB。
  • 操作的 GPIO 是当前组内第几个 Pin 引脚,对应引脚为 5 引脚 ==> GPIOB5 ==> PB5。
  • 设置 GPIO 的工作模式。

2.3.1. 浮空输入模式(Floating Input
原理:在这种模式下,GPIO 引脚没有接上拉电阻或下拉电阻,其电平状态完全取决于外部电路。引脚处于高阻抗状态,输入电流几乎为零。
应用场景:适用于外部信号已经有明确的驱动能力和电平状态的情况,比如连接按键,按键
按下时直接将引脚接地,松开时引脚浮空,通过读取引脚电平判断按键状态。
2.3.2. 上拉输入模式(Pull - up Inpu
原理GPIO 引脚内部连接了上拉电阻,当外部电路没有对引脚进行驱动时,引脚电平被上拉到高电平。如果外部电路将引脚拉低,那么引脚电平就为低电平。
应用场景:常用于按键输入,当按键未按下时,引脚通过上拉电阻保持高电平;按键按下
时,引脚接地变为低电平,避免了引脚浮空可能带来的电平不稳定问题。
2.3.3. 下拉输入模式(Pull - down Input
原理:与上拉输入模式相反,GPIO 引脚内部连接了下拉电阻,当外部电路没有对引脚进行驱动时,引脚电平被下拉到低电平。如果外部电路将引脚拉高,那么引脚电平就为高电平。
应用场景:同样适用于按键输入等场景,当按键未按下时,引脚通过下拉电阻保持低电平;
按键按下时,引脚接高电平。
2.3.4. 模拟输入模式(Analog Input
原理:该模式下,GPIO 引脚用于模拟信号的输入,内部的数字逻辑电路被断开,引脚直接连接到模拟信号处理模块,如 ADC(模拟 - 数字转换器)。
应用场景:用于采集模拟信号,如温度传感器、压力传感器等输出的模拟电压信号,通过
ADC 将模拟信号转换为数字信号进行处理。
2.3.5. 开漏输出模式(Open - Drain Output
原理:在开漏输出模式下,GPIO 引脚内部的输出级只有 N 沟道 MOS 管,当输出为低电平
时,MOS 管导通,引脚接地;当输出为高电平时,MOS 管截止,引脚处于高阻态,需要外
部接上拉电阻才能输出高电平。
应用场景:常用于实现线与功能I2C 总线等通信协议,多个开漏输出引脚可以连接在一
起,只要有一个引脚输出低电平,总线就为低电平。
2.3.6. 推挽输出模式(Push - Pull Output
原理:推挽输出模式下,GPIO 引脚内部的输出级由 P 沟道 MOS 管和 N 沟道 MOS 管组成。当输出为高电平时,P 沟道 MOS 管导通,引脚输出高电平;当输出为低电平时,N 沟道 MOS 管导通,引脚输出低电平。
应用场景:适用于直接驱动一些负载,如 LED 灯,能够提供较强的驱动能力。
2.3.7. 复用开漏输出模式(Alternate Function Open - Drain Output
原理:该模式下,GPIO 引脚的功能由片上外设控制,输出级采用开漏输出结构。与普通开漏输出模式类似,需要外部接上拉电阻才能输出高电平。
应用场景:常用于一些通信协议和外设接口,如 SPI 总线的某些引脚、I2C 总线等,将 GPIO 引脚复用为外设的特定功能。
2.3.8. 复用推挽输出模式(Alternate Function Push - Pull Output
原理:此模式下,GPIO 引脚的功能由片上外设控制,输出级采用推挽输出结构,能够直接输出高电平和低电平。
应用场景:常用于一些需要较强驱动能力的外设接口,如 UART 通信的发送引脚、PWM
号输出等。

2.4 LED开发流程

2.4.1 LED 灯电路分析

2.4.2 LED STM32 开发流程

        1.【使能】时钟。
        2.GPIO PB5 PE5 设置【推挽输出模式(Push - Pull Output)】
        3. 利用寄存器控制 PB5 PE5 引脚电平模式

2.4.3 【时钟】小重点

        时钟可以认为是当前 MCU 的处理能力,运算能力。
        STM32F103ZET6 对应的最高主频 72MHz当前 MCU 1 秒中可以处理 72M 任务单元。每一个任 务单元对应的时间为 13.88 ns
        在 MCU 执行过程中,如果没有打开对应的外设时钟,对应外设不会在整个的 MCU 执行周期内容 工作,可以认为是没有开启任务模块。
        MCU 为了管理不同的外设,提供时【钟树管】理不同的模块。

2.4.4 LED 对应 GPIO 组时钟使能

【寄存器开发模式】
        利用 STM32 时钟寄存器,开启对应 APB2 中的 GPIOB GPIOE 两个 GPIO 组时钟使能。MCU 才可以在执行周期中,运行 GPIOB GPIOE 内容。
        对应文档中的内容是 RCC (Reset & Clock Control) 复位和时钟控制。

2.4.5 LED 对应 GPIO 引脚配置

使能之后,需要对引脚进行选择。 STM32 中的 GPIO 配置寄存器对应有两个寄存器
        GPIOx_CRL 低位寄存器 --> GPIO 0 ~ 7 Pin
        GPIOx_CRH 高位寄存器 --> GPIO 8 ~ 15 Pin
当前操作的引脚是 PB5 PE5 对应 GPIOx_CRL 低位配置寄存器。
GPIOx_CRL GPIOx_CRH 4 个二进制为对应一个 GPIO 引脚
        CNFx (x ==> 0~15) 配置当前 GPIO 

总结效果

  • 输出模式 CNF + MODE 寄存器位置效果,速度都使用 50MHz 作为基准
    • 0011 推挽输出模式
    • 0111 开漏输出模式
    • 1011 复用推挽输出模式
    • 1111 复用开漏输出模式
  • 输入模式 CNF + MODE 寄存器位置效果
    • 0000 模拟输入
    • 0100 浮空输入
    • 1000 上拉 / 下拉输入,需要后续配置 IDR 参数

2.4.6 引脚输出高低电平配置

        利用 GPIOx_ODR 寄存器配置当前指定引脚的输出高电平和低电平状态

2.4.7 代码实现

#include "stm32f10x.h"
/*
STM32 核心头文件,标准头文件,当前对应 STM32F10x 系列,
当前使用的芯片是 STM32F103ZET6
开发中,需要使用相关函数,相关类型,相关配置都在当前
头文件中。
*/
void Led_Delay(u32 tim);
int main(void)
{/*1. 时钟使用,RCC 配置当前 GPIOB 和 GPIOE 两个 GPIO 组使能。RCC ==> Reset & Clock ControlAPB2ENR 当前 APB2 Bridge 对应寄存器配置,当前 APB2ENR包括 【GPIOA ~ GPIOG】 ADC1,2,3 TIM1 TIM8 USART1 SPI1根据寄存器文档分析,目标当前寄存器中的数据效果为【高 16 位不考虑,对应保留位】0000 0000 0100 10000x01 ==> 0000 00010x01 << 6 ==> 0100 0000  (GPIOE使能位)0x01 << 3 ==> 0000 1000  (GPIOB使能位)0x01 << 6 | 0x01 << 3  = 0100 1000*/RCC->APB2ENR |= 0x01 << 6; // GPIOE 组使能RCC->APB2ENR |= 0x01 << 3; // GPIOB 组使能/*2. 配置 GPIOB --> PB5 和 GPIOE --> PE5 对应工作模式为【推挽输出模式】。二进制为效果为 0011 (CNF=00, MODE=11)需要配置 GPIOx_CRL 位 23:20 对应 CNF5 和 MODE5 因为GPIOx_CRL 默认值是 0x44444444 存在基础数据*//*2.1 对 GPIOx_CRL 位 23:20 默认数据进行擦除。0x0F ==> 0000 11110x0F << 20 ==> 对应位23-20~(0x0F << 20) ==> 清除掩码*/GPIOB->CRL &= ~(0x0F << 20);GPIOE->CRL &= ~(0x0F << 20);/*2.2 对 GPIOx_CRL 位 23:20 进行数据赋值 0011推挽输出模式配置: CNF=00, MODE=11 (50MHz)*/GPIOB->CRL |= 0x03 << 20;GPIOE->CRL |= 0x03 << 20;/*3. 控制高低电平,从而控制 LED 亮和灭MCU 引脚输出高电平 LED 灯灭MCU 引脚输出低电平 LED 灯亮GPIOx_ODR 控制位 5 对应 PB5 和 PE5 两个引脚对应 ODR 位 5 数据为 1 高电平,0 低电平*/while (1){GPIOB->ODR &= ~(0x01 << 5); // PB5 低电平 LED0 灯亮GPIOE->ODR |= (0x01 << 5);  // PE5 高电平 LED1 灯灭Led_Delay(200000);GPIOB->ODR |= (0x01 << 5);  // PB5 高电平 LED0 灯灭GPIOE->ODR &= ~(0x01 << 5); // PE5 低电平 LED1 灯亮Led_Delay(200000);}
}// 延时函数
void Led_Delay(u32 tim)
{while (tim--){for (int i = 0; i < 72; i++){// 空循环,用于延时调整}}
}

2.4.8 代码编译和烧录

https://github.com/0voice

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

22_基于深度学习的桃子成熟度检测系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)

目录 项目介绍&#x1f3af; 功能展示&#x1f31f; 一、环境安装&#x1f386; 环境配置说明&#x1f4d8; 安装指南说明&#x1f3a5; 环境安装教学视频 &#x1f31f; 二、数据集介绍&#x1f31f; 三、系统环境&#xff08;框架/依赖库&#xff09;说明&#x1f9f1; 系统环…

数据结构:二叉树oj练习

在讲今天的题目之前&#xff0c;我们还需要讲一下二叉树的以下特点&#xff1a; 对任意一颗二叉树&#xff0c;如果度为0的节点个数是n0&#xff0c;度为2的节点个数是n2&#xff0c;则有n0n21. 证明&#xff1a;二叉树总的节点个数是n&#xff0c;那么有nn0n1n2 二叉树的度为…

RabbitMQ高级特性——TTL、死信队列、延迟队列、事务、消息分发

目录 一、TTL 1.1设置消息的TTL 1.2设置队列的TTL 1.3两者之间的区别 二、死信队列 2.1死信的概念 2.2死信产生的条件&#xff1a; 2.3死信队列的实现 死信队列的工作原理 2.4常⻅⾯试题 三、延迟队列 3.1概念 3.2应用场景 3.3RabbitMQ 实现延迟队列的核心原理 1…

神经网络设计中关于BN归一化(Normalization)的讨论

在神经网络的结构中&#xff0c;我们常常可以看见归一化&#xff08;Normalization&#xff09;如BN的出现&#xff0c;无论是模型的backbone或者是neck的设计都与它有着重大的关系。 因此引发了我对它的思考&#xff0c;接下来我将从 是什么&#xff08;知识领域&#xff0c;诞…

MacOS 安全机制与“文件已损坏”排查完整指南

1. 背景说明macOS 为了保护系统安全&#xff0c;内置了多个安全机制&#xff1a;机制作用是否影响第三方 AppSIP (System Integrity Protection)保护系统关键文件/目录不被篡改高风险 App/驱动可能受限Gatekeeper限制未签名/未认证 App 运行阻止“未知开发者” App文件隔离属性…

package.json文件中的devDependencies和dependencies对象有什么区别?

前端项目的package.json文件中&#xff0c;dependencies和devDependencies对象都用于指定项目所依赖的软件包&#xff0c;但它们在项目的开发和生产环境中的使用有所不同。1.dependencies&#xff1a;dependencies是指定项目在生产环境中运行所需要的依赖项。这些依赖项通常包括…

【最新版】CRMEB Pro版v3.4系统源码全开源+PC端+uniapp前端+搭建教程

一.系统介绍 crmebPro版 v3.4正式发布&#xff0c;智能任务推送、动态标签管理、商城AI生产力&#xff0c;焕然一新&#xff0c;不负期待&#xff01;页面DIY设计功能全面升级&#xff0c;组件更丰富&#xff0c;样式设计更全面&#xff1b;移动端商家管理&#xff0c;让商城管…

AI 浪潮下 IT 从业者的职业展望:替代之惑与转型之道

一、引言1.1 科技变革的浪潮&#xff1a;AI 崛起与 IT 行业震荡在当今科技飞速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;无疑是最具影响力的变革力量之一。从实验室的前沿研究到广泛的商业应用&#xff0c;AI 以惊人的速度渗透到各个领域&#xff0c;彻底改变…

DSP音频算法移植优化工程师实战

以下以音频FIR滤波器算法为例&#xff0c;完整演示从MATLAB原型 → Python验证 → TI DSP C语言移植优化的全流程&#xff0c;包含关键代码和优化技巧&#xff1a;关键优化技术解析&#xff1a; 内存访问优化使用#pragma DATA_ALIGN确保64位对齐&#xff08;满足LDDW指令要求&a…

Spark 运行流程核心组件(三)任务执行

一、启动模式 1、standalone资源申请&#xff1a;Driver向Master申请Executor资源Executor启动&#xff1a;Master调度Worker启动Executor注册通信&#xff1a;Executor直接向Driver注册 2、YARNDriver向YARN ResourceManager(RM)申请AM容器RM分配NodeManager(NM)启动AM&#x…

rabbitmq发送的延迟消息时间过长就立即消费了

RabbitMQ延迟消息在设置过长时间后被立即消费的问题&#xff0c;通常与以下原因有关&#xff1a; TTL限制问题 RabbitMQ对消息TTL(Time To Live)有32位整数限制(0-4294967295毫秒)&#xff0c;约49.7天。超过该值的延迟时间会导致消息立即被消费解决方案&#xff1a;确保设置的…

kafka的pull的依据

1. 每次 pull() 是否必须在提交上一批消息的 offset 之后&#xff1f;绝对不需要&#xff01; 提交 offset 和调用 poll() (拉取消息) 是两个完全独立的行为。消费者可以连续调用 poll() 多次&#xff0c;期间完全不提交任何 offset。 这是 Kafka 消费者的正常工作模式。提交 o…

学习嵌入式的第二十一天——数据结构——链表

单向链表特点&#xff1a;存储的内存空间不连续 。为了弥补顺序存储存劣势。优势 插入&#xff0c;删除 O(1) 动态存储 &#xff0c;在程序运行期间决定大小。劣势&#xff1a; 不能随机访问 O(N) 节点-> 数据域指针域 顺序表(数组) 只有数据域链表的操作代码&#xff1…

Rust Web 全栈开发(十三):发布

Rust Web 全栈开发&#xff08;十三&#xff09;&#xff1a;发布Rust Web 全栈开发&#xff08;十三&#xff09;&#xff1a;发布发布 teacher_service发布 svr测试 teacher_service 和 svr发布 wasm-client测试 wasm-clientRust Web 全栈开发&#xff08;十三&#xff09;&a…

Zephyr 中的 bt_le_per_adv_set_data 函数的介绍和应用方法

目录 概述 1 函数接口介绍 1.1 函数原型 1.2 功能详解 2 使用方法 2.1 创建流程 2.1.1 创建扩展广播实例 2.1.2 设置周期性广播数据 2.1.3 配置周期性广播参数 2.1.4 启动广播 2.2 主流程函数 2.3 关键配置 (prj.conf) 3 高级用法 3.1 大数据分片传输 3.2 动态数…

Ansible 角色管理指南

Ansible 角色管理指南 实验环境设置 以下命令用于准备实验环境&#xff0c;创建一个工作目录并配置基本的Ansible设置&#xff1a; # 创建web工作目录并进入 [azurewhiskycontroller ~]$ mkdir web && cd web# 创建Ansible配置文件 [azurewhiskycontroller web]$ cat &…

【补充】数据库中有关系统编码和校验规则的简述

一、字符集和校验规则&#xfeff;1.创建数据库案例数据库创建方法&#xff1a;使用CREATE DATABASE语句创建数据库字符集指定方式&#xff1a;通过CHARACTER SETutf8指定数据库编码格式默认配置说明&#xff1a;未指定字符集时默认使用utf8和utf8_general_ci配置文件位置&…

计算机网络 HTTP1.1、HTTP2、HTTP3 的核心对比及性能分析

以下是 HTTP/1.1、HTTP/2、HTTP/3 的核心对比及性能分析&#xff0c;重点关注 HTTP/3 的性能优势&#xff1a;&#x1f4ca; HTTP 协议演进对比表特性HTTP/1.1 (1997)HTTP/2 (2015)HTTP/3 (2022)传输层协议TCPTCPQUIC (基于 UDP)连接建立TCP 三次握手 TLS 握手 (高延迟)同 HTT…

【计算机视觉与深度学习实战】07基于Hough变换的答题卡识别技术:原理、实现与生物识别拓展(有完整代码)

1. 引言 在人工智能和计算机视觉快速发展的今天,自动化图像识别技术已经渗透到社会生活的各个角落。从工业质检到医学影像分析,从自动驾驶到教育评估,计算机视觉技术正在重塑我们与数字世界的交互方式。在这众多应用中,答题卡识别技术作为教育信息化的重要组成部分,承载着…

《WASM驱动本地PDF与Excel预览组件的深度实践》

WASM为何能成为本地文件解析的核心载体,首先需要跳出“前端只能处理轻量任务”的固有认知,从“性能与兼容性平衡”的角度切入。PDF与Excel这类文件格式的解析,本质是对复杂二进制数据的解码与重构——PDF包含嵌套的对象结构、字体渲染规则和矢量图形描述,Excel则涉及单元格…