恭喜大家完成了C语言的学习,现在咱们来到咱们的硬件MCU阶段,咱们这里的工程用的是keil,环境搭建不再赘述,希望大家在这一阶段仍然学的愉快

1.资料部分

用的最多的就是STM32f103的手册,搭配STM32F103ZET6的开发板

2.概念部分

嵌入式系统:

嵌入式系统是以应用为中心,以现代计算机技术为基础,能够根据用户需求(功能、可靠性、成本、体积、功耗、环境等)灵活裁剪软硬件模块的专用计算机系统。

专用计算机:

专用计算机,专为解决某一特定问题而设计制造的电子计算机。一般拥有固定的存储程序。如控制轧钢过程的轧钢控制计算机,计算导弹弹道的专用计算机等,解决特定问题的速度快、可靠性高,且结构简单、价格便宜。

单片机:

单片机MCU(Single-Chip Microcomputer)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。

CPU:

中央处理器(Central Processing Unit,简称CPU)作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。CPU自产生以来,在逻辑结构、运行效率以及功能外延上取得了巨大发展。 

ARM:

arm公司:

ARM处理器是英国Acorn有限公司设计的低功耗成本的第一款RISC微处理器。全称为Advanced RISC Machine。ARM处理器本身是32位设计,但也配备16位指令集,一般来讲比等价32位代码节省达35%,却能保留32位系统的所有优势。

arm架构:

ARM架构,曾称进阶精简指令集机器(Advanced RISC Machine)更早称作Acorn RISC Machine,是一个32位精简指令集(RISC)处理器架构。还有基于ARM设计的派生产品,重要产品包括Marvell的XScale架构和德州仪器的OMAP系列。

我们现在使用的单片机都是基于ARM架构(精简指令集使用的是汇编)下的产物,有了架构之后,根据不同的架构设计不同的芯片

咱们现在使用的芯片就是ST公司设计的。

意法半导体(ST)集团于1987年6月成立,是由意大利的SGS微电子公司和法国Thomson半导体公司合并而成。1998年5月,SGS-THOMSON Microelectronics将公司名称改为意法半导体有限公司。意法半导体是世界最大的半导体公司之一,2006年全年收入98.5亿美元,2007年前半年公司收入46.9亿美元

ARM公司和ST公司的关系:

ARM公司主要是设计芯片处理器(图纸)不去生产芯片,ST公司得到授权之后,可以在ARM公司的处理器基础上,去扩展芯片功能,比如添加ADC 串口 定时器.......,ST公司对芯片设计完善之后,交由专门的芯片制造公司进行生产。

寄存器:(按位存储)

寄存器的功能是存储二进制代码,它是由具有存储功能的触发器组合起来构成的。一个触发器可以存储1位二进制代码,故存放n位二进制代码的寄存器,需用n个触发器来构成。

触发器:

双稳态触发器是一种具有记忆功能的

逻辑单元电路。它能储存一位二进制码。它有两个稳定的工作状态,在外加信号触发下电路可从一种稳定的工作状态转换到另一种稳定的工作状态。

逻辑单元:

逻辑单元(LU)是进入IBM系统网络体系结构(SNA)的

网络端口,通过它用户可以访问网络资源,或一个程序员与另一个程序员通信。

3.初识单片机

1.单片机的资源

2.驱动LED灯(经典案例--入门)

1.LED灯在哪一个IO口上连接

什么是IO口:单片机中的输入输出管脚

单片机中的IO口的表示方式:

PG2--(p--port G--端口序号 2--特定端口下的引脚顺序--序列号)

G端口中的第二个管脚

PA0--端口A中的第0个管脚

每一个端口中最多有几个引脚???16个

PA16---不存在的

我们的单片机总共由144个管脚,但是可以供我们使用的管脚是112个,7个端口(A B C D E F G)

3.查看原理图:

0

低电平:0V--1.5V 数字量:0

由原理图可得到,LED灯(D0)连接的是单片机中的PB5管脚:

D0--亮--PB5输出一个低电平

D0--灭--PB5输出一个高电平

单片机开发中,前期最重要的就是如何判断一个IO口的输入输出功能

输出--驱动外部电路,根据IO口的电平状态,执行相关的功能 led

输入--MCU用于检测外部电路的电平状态的改变,KEY

4.根据手册编写代码

内存的区分:

GPIO功能描述

IO口输入输出方式8种:

 

输出:

通用开漏输出:通用的开漏输出,只能输出低电平,无法输出高电平,只能处于高阻态(断路)

通用推挽输出:既可以输出高电平,也可以输出低电平。

复用开漏输出:具有通用开漏的特性,但是他的应用场合都是在单片机中除了IO口输出单一的开关量之外的,其他外设功能设置,比如IIC。

复用推挽输出:具有通用推挽的特性,但是他的应用场合都是在单片机中除了IO口输出单一的开关量之外的,其他外设功能设置,比如SPI 串口 定时器.......。

输入:

浮空输入:既不连接高电平也不连接低的电平(初始状态),当前管脚的状态完全由外部设备决定,这一种输入方式在51单片机是很危险的。但是在STM32中可以接受的,内部会去处理这个引脚的电平状态,一般都会外加上拉或者下拉电阻。

上拉输入:在IO口作为输入状态的时候,连接上拉电阻,起始状态---高电平

下拉输入:在IO口作为输入状态的时候,连接下拉电阻,起始状态---低电平

模拟输入:主要是用于AD转换

复用功能参考列表:

在以上手册的第31页:

时钟

在我们的单片机中时钟的大小,主要是决定了单片机处理器处理数据的快慢。

内核:

时钟大小:72MHZ

内存大小:

256 to 512 Kbytes of Flash memory---相当于硬盘 up to 64 Kbytes of SRAM--相当于运行内存

单片机中的io口中,每一个端口都有一个独立的时钟,那么也就是说,你在使用某一个IO口的时候,必须要先操作时钟(打开)

5.操作PB5步骤:

1.打开时钟

由上图可得,B端口时钟连接在APB2总线上的

时钟的配置在我们的中文参考手册的第六章节

RCC_APB2ENR |=0X01

2.配置PB5工作模式--通用推挽输出

复位值:寄存器的初始数值

20--23--0010

当寄存器的初始值不为零,或者当前不知道寄存器的初始值是多少,建议先清零需要操作的位,然后再次执行相关操作。

3.输出高电平或者低电平

PB5拉高---GPIOB |=(0X01PB5拉低---GPIOB &=~(0X01

6.写代码驱动LED灯

编写代码的步骤:

1.打开B端口的时钟

2.配置PB5管脚

3.设置PB5的输出状态(高电平或者低电平)

添加文件:

保存文件到以下路径中:(api是我们自己新建的文件夹)

.h文件的保存方式和路径与.c文件是一样的;

添加文件到工程:

添加.h文件到工程:

寄存器的编写方式:

led.c#include "led.h" void Led_Config(void){ // 1.打开B端口的时钟 RCC->APB2ENR |=(0X01<<3);//2.配置PB5管脚 GPIOB->CRL &=~(0x0f<<20); GPIOB->CRL |=(0x02<<20);//3.设置PB5的输出状态(高电平或者低电平) GPIOB->ODR |=(0X01<<5);}
led.h#ifndef _LED_H_ 
#define _LED_H_ 
#include "stm32f10x.h"//stm32中的相关宏定义类型等存在的位置 
void Led_Config(void); #endif
main.c#include "stm32f10x.h" // 相当于51单片机中的 #include <reg51.h> #include "led.h"
void delay(u32 tim)
int main(void) { 
// 来到这里的时候,系统的时钟已经被配置成72M。Led_Config(); 
while(1) 
{ GPIOB->ODR |=(0X01<<5); delay(2000000); 
GPIOB->ODR &=~(0X01<<5); delay(2000000); } 
} 
void delay(u32 tim){ while(tim--); }

库函数的编写方式:

//库函数的编写方式
void led_Init(void)
{
GPIO_InitTypeDef gpio_initsources;//打开时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);gpio_initsources.GPIO_Pin=GPIO_Pin_5;gpio_initsources.GPIO_Mode=GPIO_Mode_Out_PP;gpio_initsources.GPIO_Speed=GPIO_Speed_2MHz;//配置PB5//void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);GPIO_Init(GPIOB,&gpio_initsources);}

main.c


main.c
int main(void)
{// 来到这里的时候,系统的时钟已经被配置成72M。//Led_Config();//寄存器led_Init();while(1){
//        GPIOB->ODR |=(0X01<<5);GPIO_SetBits(GPIOB,GPIO_Pin_5);delay(2000000);
//        GPIOB->ODR &=~(0X01<<5);GPIO_ResetBits(GPIOB,GPIO_Pin_5);delay(2000000);}
}

安装一个STLINK的驱动:

网上找一个直接按照提示安装即可

下载完成之后,直接运行。

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

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

相关文章

three案例 Three.js波纹效果演示

波纹效果&#xff0c;在智慧城市可视化开发中经常用到&#xff0c;这里分享一个比较好玩的案例 以下是详细的步骤&#xff1a; 初始化部分&#xff1a;设置 Three.js 环境&#xff0c;包括场景、相机、渲染器和控制器 几何体和纹理&#xff1a;创建平面几何体并加载波纹纹理 着…

Flutter-详解布局

上一章我们详细的学习了 Flutter 中的Widget&#xff0c;这一章我们将要学习 Flutter 的布局&#xff0c; 在上一章我们了解到了&#xff1a;Everything is a widget&#xff0c;在 Flutter 中几乎所有的对象都是一个 Widget &#xff0c;当然也包括布局&#xff0c;Flutter 的…

EPLAN 电气制图:建立自己的部件库,添加部件-加SQL Server安装教程(三)上

在智能电气设计领域&#xff0c;EPLAN 作为主流的设计软件&#xff0c;其部件库的完善程度直接影响项目设计的效率与质量。本文将从实际操作出发&#xff0c;详细讲解如何在 EPLAN 中建立专属部件库并添加部件&#xff0c;为电气设计奠定坚实基础。一、部件库&#xff1a;电气设…

静态路由进阶实战全解

一、项目背景二、项目拓扑图三、设备命名与IP地址规划设备名接口编号IP地址规划R1GE0/0192.168.1.1/24GE0/1172.16.1.1/24R2GE0/0192.168.1.2/24GE0/1192.168.2.2/24R3GE0/0192.168.2.3/24GE0/1192.168.3.3/24GE0/2192.168.4.3/24R4GE0/0192.168.3.4/24GE0/1192.168.4.4/24GE0/…

stm32hal模块驱动(3)ssd1305 oled驱动

SD1305 OLED 驱动芯片详细介绍SSD1305 是 Solomon Systech 公司生产的一款 OLED 显示控制器/驱动器&#xff0c;专为 128x64 或 128x32 点阵的 OLED 显示屏设计。下面我将从多个方面详细介绍这款驱动芯片。一、SSD1305 基本特性显示分辨率&#xff1a;最大支持 128 segments 6…

安全为先:如何在 Python 中安全处理数据库连接与敏感信息

安全为先:如何在 Python 中安全处理数据库连接与敏感信息 引言:Python 与安全的数据库交互 自 1991 年诞生以来,Python 凭借其简洁优雅的语法和强大的生态系统,成为 Web 开发、数据科学、人工智能和数据库交互的首选语言。作为“胶水语言”,Python 不仅让开发者能够快速…

服务器经常出现蓝屏是什么原因导致的?如何排查和修复?

服务器出现蓝屏&#xff08;BSOD&#xff0c;Blue Screen of Death&#xff09;是一个严重的问题&#xff0c;通常表明系统内核或硬件发生了不可恢复的错误。蓝屏不仅会导致服务器宕机&#xff0c;还可能对业务运行造成重大影响。要有效解决蓝屏问题&#xff0c;需要先找到根本…

为什么elementui的<el-table-column label=“名称“ prop=“name“ label不用写成:label

在 Vue.js 中&#xff0c;label 和 prop 是 el-table-column 组件的普通属性&#xff0c;而不是动态绑定的表达式。因此&#xff0c;不需要使用 : 来绑定它们。 1. Vue.js 中的属性绑定 在 Vue.js 中&#xff0c;属性绑定有两种方式&#xff1a; 静态属性绑定&#xff1a;直接写…

分布式光纤传感:为储能安全保驾护航

储能系统是指一种能够将电能、化学能、动能等形式的能量进行转化、储存和释放的装置&#xff0c;广泛应用于可再生能源发电、智能电网、电动车等领域。储能行业这几年得到了稳步发展&#xff0c;受到政府机构、行业协会、大型能源企业、电网公司、系统集成商、检测认证机构等业…

从历史航拍图像中去除阴影

在光学遥感中&#xff0c;阴影是影响土地覆盖制图精度和分辨率的一个因素&#xff0c;无论是历史影像&#xff08;黑白影像&#xff09;还是近期影像&#xff08;全彩影像&#xff09;。阴影的产生取决于太阳光照&#xff08;太阳方位角和天顶角&#xff09;、相机视点&#xf…

UE material advance 学习笔记

如何体现轮胎速度的快速感&#xff1a;就是增加一个radial blur&#xff0c;会让视觉效果感觉轮胎已经转冒烟了&#xff0c;但是上面两个轮胎的转速其实是相同的这种磨砂的感觉&#xff0c;可以用上ditherAA来实现只看法线这一块&#xff0c;ditherAA就是让他的表面颜色有大量的…

Vue--2、Vue2 项目配置与组件化开发

一、Vue2 项目环境搭建1. 环境准备安装 Node.js&#xff1a;推荐使用 nvm 管理多版本 Node# 安装Node 16.20.2 nvm install 16.20.2 # 切换至指定版本 nvm use 16.20.2 # 验证安装 node -v && npm -v安装 Vue CLI 脚手架&#xff1a;# 国内镜像源安装 npm install --re…

虚幻基础:函数的返回节点

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录函数的返回节点&#xff1a;返回执行后的值返回执行后的值若不执行第一次 返回参数的默认值第二次 返回上一次执行值示例函数的返回节点&#xff1a;返回执行后的值 返回执行后的值 若不执行 第一次 返回参数的默…

FFmpeg 升级指北

近期我参与了部门底层库依赖的 FFmpeg 从 3.4 升级至 7.0.2 的工作&#xff0c;在此分享一些经验和遇到的 API 变动。 将 FFmpeg 升级到高版本后&#xff0c;编译过程中遇到大量报错是常态。这些错误通常源于 API 接口变更或结构体字段调整。此时不必惊慌&#xff0c;核心解决…

RISCV Linux 虚拟内存精讲系列三 -- setup_vm()

在 Linux 使用虚拟地址前&#xff0c;需要先配置页表&#xff0c;这就是 setup_vm() 的作用。然而&#xff0c;Linux 的页表配置&#xff0c;并不是一次过完成的&#xff0c;分了两个阶段&#xff0c;如下&#xff1a;在 setup_vm() 中&#xff0c;主要初始化了&#xff1a;1. …

创客匠人:解析创始人 IP 打造的底层逻辑与知识变现路径

在数字经济时代&#xff0c;创始人 IP 的价值被不断放大&#xff0c;而知识变现作为 IP 商业闭环的核心环节&#xff0c;正成为无数创业者探索的方向。创客匠人深耕知识付费领域多年&#xff0c;见证了大量创始人从 0 到 1 打造 IP 并实现变现的全过程&#xff0c;其背后的逻辑…

Visual Studio 2022 MFC Dialog 添加Toolbar及Tips提示

主要步骤&#xff1a;在主框架类中添加消息处理函数声明在 OnCreate 函数中启用工具栏提示在消息映射中注册 TTN_NEEDTEXT 消息使用 OnToolTipText 函数实现自定义提示文本1.在主程序的.h文件中加入afx_msg BOOL OnToolTipText(UINT id, NMHDR* pNMHDR, LRESULT* pResult); 2.在…

2025Q2大模型更新汇总(大语言模型篇)

摘要 2025年Q2大语言模型更新汇总&#xff1a; Qwen3&#xff0c;Deepseek-R1-0528&#xff0c;Doubao-Seed-1.6, MiniMax-M1, GPT4.1/O3/O4&#xff0c;Claude4/Gemini2.5 Qwen3 • 开源MOE模型&#xff0c; • MOE模型&#xff1a;Qwen3-235B-A22B&#xff0c;Qwen3-30B-…

【STM32】定时器中断 + 含常用寄存器和库函数配置(提供完整实例代码)

通用定时器基础知识 参考资料:STM32F1xx官方资料:《STM32中文参考手册V10》-第14章通用定时器 通用定时器工作过程: 时钟选择 计数器时钟可以由下列时钟源提供: ① 内部时钟(CK_INT) ② 外部时钟模式1:外部输入脚(TIx) ③ 外部时钟模式2:外部触发输入(ETR) ④ 内部触…

集群Redis

文章目录前言一、Redis主从复制配置1.1.配置文件redis_master.conf,redis_slave.conf1.2.启动服务1.3.检查成果二、Redis集群配置2.1.服务器40.240.34.91集群配置2.2.其它服务器xxx.92,xxx.93集群配置2.3.启动服务2.3.启动集群服务2.4.检查成果三、优劣四、结束前言 提示&…