单片机-初识单片机(keil安装以及编写简单驱动)(一)

news2024/9/21 16:43:01

目录

一、嵌入式介绍

1.嵌入式系统:

2.嵌入式操作系统

3.单片机:

二、STM32F103ZET6简介

1.单片机的组成:

2.单片机外观:

3.ARM公司

4.ST公司--意法半导体

三、资料部分

1.安装工具:

2.破解软件:

3.安装PACK包:

四、如何编写简单的驱动

1.查看原理图

2.IO口的命名方式:

3.单片机资源概述:

4.寄存器

5.配置寄存器(CRL和CRH寄存器):

6.输出寄存器:

7.IO口输入输出模式

输出模式:

输入模式:

五、代码的编写

1.时钟的概念

2.配置PB5(寄存器)

1).打开B端口的时钟

2).配置PB5--通用推挽输出

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

六、驱动安装:

七、寄存器操作的补充

GPIO_TypeDef内容:


一、嵌入式介绍

1.嵌入式系统:

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

2.嵌入式操作系统

嵌入式操作系统(Embedded Operating System,简称:EOS)是指用于嵌入式系统的操作系统。嵌入式操作系统是一种用途广泛的系统软件,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器等。嵌入式操作系统负责嵌入式系统的全部软、硬件资源的分配、任务调度,控制、协调并发活动。它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。在嵌入式领域广泛使用的操作系统有:嵌入式实时操作系统µC/OS-II、嵌入式Linux、Windows Embedded、VxWorks、Intewell操作系统 等,以及应用在智能手机和平板电脑的Android、iOS、华为鸿蒙等。

3.单片机:

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

单片机又称单片微控制器(MCU),它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。

单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。

mcu cpu gpu......

二、STM32F103ZET6简介

1.单片机的组成:

CPU--Cortex_M3(内核)

调试系统--下载 debug调试

内部总线--用于连接内核和外部设备

外设--串口 AD转换 定时器。。。。。

存储器--flash(闪存) ram 。。。。。

时钟和复位--提供工作频率,上电复位

IO--输入输出

2.单片机外观:

四周裸漏的金属状的引脚就是IO口

3.ARM公司

ARM公司是一个芯片公司

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

4.ST公司--意法半导体

https://www.st.com/content/st_com/zh/search.html#q=STM32-t=products-page=NaN

ST公司获得ARM公司的授权(钱),就可以使用ARM公司的不同架构下的处理器,拿过来之后,通过芯片制造厂商进行生产,最终得到了我们现在使用的芯片。

台积电 三星 联发科...... 制造芯片 4nm

三、资料部分

1.安装工具:

1.安装包直接双击安装即可(安装路径不要有中文)

中间会出现安装驱动,点击安装即可

安装完毕之后不要打开keil,如果打开了就直接×掉:

直接关闭即可。

安装完毕之后,如下所示:

2.破解软件:

以管理员权限打开KEIL5工具

点击注册管理选项:

打开注册机生成注册码:

温馨提示:打开注册机之前,把电脑声音关小点,这个软件自带音乐有点大

注册码:9WSKC-7V6GL-Z94G9-4JNYT-95MII-G6T57

将注册码复制到keil工具指定位置:

3.安装PACK包:

四、如何编写简单的驱动

1.查看原理图

LED_PB5--网络标号,在原理图中都是一一对应的

由原理图可得,

PB5输出高电平---LED灭

PB5输出低电平---LED亮

2.IO口的命名方式:

PB5---B端口中的第五个管脚

端口:是为了方便管理IO口,引入的一个概念,使用英文字母表示A B C D.......

每一个端口中有16个管脚,比如B端口,PB0--PB15

3.单片机资源概述:

单片机中总共的引脚是144个

但是可以让工程师编程使用的只有112个--成为IO口(既可以输入也可以输出)

供电--3.3V(单片机5V供电也没问题)

当前使用的是3.3V供电,编程中使用的都是二进制(计算机),两者如何对应????

单片机内部,使用的模数转换,将模拟信号转换为数字信号

高电平--(2.4--3.6V) 数字量--数字1

低电平--(0--1.4V) 数字量--数字0

4.寄存器

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

按照功能的不同,可将寄存器分为基本寄存器和移位寄存器两大类。基本寄存器只能并行送入数据,也只能并行输出。移位寄存器中的数据可以在移位脉冲作用下依次逐位右移或左移,数据既可以并行输入、并行输出,也可以串行输入、串行输出,还可以并行输入、串行输出,或串行输入、并行输出,十分灵活,用途也很广。

寄存器就是用来保存数据(二进制数据)

基本寄存器--用于配置或者控制

移位寄存器--负责数据的位移

我们需要使用到的寄存器:

5.配置寄存器(CRL和CRH寄存器):

6.输出寄存器:

7.IO口输入输出模式

输入输出方式总共是8种,我们需要根据不同的应用场景和外部设备合理的选择输入输出方式:

比如:LED灯--PB5

PB5配置为输出模式,但是应该选择哪一种???

输出模式:

通用推挽输出:在我们的单片机输出模式下,IO口既可以输出高电平也可以输出低电平

通用开漏输出:在我们的单片机输出模式下,IO口只可以输出低电平,无法输出高电平,需要外界上拉电阻才可以输出高电平

复用推挽输出:在我们的单片机输出模式下,除了简单的输出高低电平之外的功能(片上外设部分)

复用开漏输出:在我们的单片机输出模式下,除了简单的输出低电平之外的功能(片上外设部分)

片上外设:指的就是我们单片机芯片中自带的功能(除了简单的按位输出高低电平)

串口(USART) 定时器 SPI IIC......属于片上外设

片上外设查看以下手册:中文手册的20页

输入模式:

模拟输入:主要就是用于AD转换,将模拟量转数字量

浮空输入:在输入模式中,IO口既不连接上拉也不连接下拉,电平状态是不确定的

上拉输入:在输入模式中,IO口连接上拉,将电平拉高

下拉输入:在输入模式中,IO口连接下拉,将电平拉低

五、代码的编写

LED灯---PB5管脚

本质上配置PB5--如何配置?

根据以上原理图可得,PB5--输出模式,输出模式中有4种配置,到底用哪一种???

通用推挽输出(输出的是开关量,0或者1单个Bit)

PB5--通用推挽输出

1.时钟的概念

当前使用的单片机时钟最大:72MHZ,这也是我们当前使用的时钟频率

时钟的大小决定了,我们处理器运算速度的快慢

STM32单片机中,每一个外设或者端口都有自己独立的时钟源开启控制位

2.配置PB5(寄存器)

寄存器操作中的原则,只改变你需要操作的位,不能改变其他位。

1).打开B端口的时钟

B端口的使用来源是APB2总线

RCC-APB2ENR |=0X01<<3;

0x01<<3 ------->1000

RCC-APB2ENR | 1000 ----->1写入了第三位,而且没有改变其他位数据。

2).配置PB5--通用推挽输出

GPIOB_CRL寄存器

GPIOB_CRL |=0x01<<20

0000 0000 0001 0000 0000 0000 0000 0000 (0x01<<20)

0100 0100 0100 0100 0100 0100 0100 0100 原始值

0100 0100 0101 0100 0100 0100 0100 0100 结果(错误)

0100 0100 0001 0100 0100 0100 0100 0100 结果(正确)

清零操作:GPIOB_CRL &=~(0x0F<<20) //因为CRL寄存器初始值不为0

0000 0000 1111 0000 0000 0000 0000 0000 0x0F<<20

1111 1111 0000 1111 1111 1111 1111 1111 ~(0X0F<<20)

0100 0100 0100 0100 0100 0100 0100 0100 原始值与 ~(0X0F<<20)

0100 0100 0000 0100 0100 0100 0100 0100 结果(清零之后的结果)

再次运行 GPIOB_CRL |=0x01<<20

GPIOB_CRL初始值:          0100 0100 0000 0100 0100 0100 0100 0100

GPIOB_CRL | (0x01<<20)   0000 0000 0001 0000 0000 0000 0000 0000

结果:                                0100 0100 0001 0100 0100 0100 0100 0100

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

GPIOB_ODR寄存器

拉高:GPIOB_ODR |=0x01<<5

拉低:GPIOB_ODR &=~(0x01<<5)

六、驱动安装:

KEIL的相关配置修改:

#include "stm32f10x.h"   // 相当于51单片机中的  #include <reg51.h>

void Led_Config(void);
void delay_tim(u32 tim);
int main(void)
{
    // 来到这里的时候,系统的时钟已经被配置成72M。
    Led_Config();
    while(1)
    {
    GPIOB->ODR &=~(0X01<<5);
      delay_tim(1000000);
        GPIOB->ODR |=(0X01<<5);
        delay_tim(1000000);
    }
    
}

void Led_Config(void)
{
    //时钟
    RCC->APB2ENR |=0X01<<3;
    //配置通用推挽输出
    GPIOB->CRL &=~(0X0F<<20);//清零
    GPIOB->CRL |=0x01<<20;//通用推挽输出--10MHZ    
}

void delay_tim(u32 tim)
{
    while(tim--);
}

七、寄存器操作的补充

GPIOB->CRL &=~(0X0F<<20);
GPIOB--代表什么意思? 地址
#define GPIOB               ((GPIO_TypeDef *) GPIOB_BASE)
#define GPIOB_BASE            (APB2PERIPH_BASE + 0x0C00)
#define APB2PERIPH_BASE       (PERIPH_BASE + 0x10000)
#define PERIPH_BASE           ((uint32_t)0x40000000)
GPIOB端口基地址:0x40010c00 

GPIO_TypeDef内容:

typedef struct
{
  __IO uint32_t CRL;
  __IO uint32_t CRH;
  __IO uint32_t IDR;
  __IO uint32_t ODR;
  __IO uint32_t BSRR;
  __IO uint32_t BRR;
  __IO uint32_t LCKR;
} GPIO_TypeDe

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

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

相关文章

【学习笔记之vue】const fileFilter = options?.fileFilter || (() => true);

运行vue3时出现下面这个问题&#xff0c;大概就是不能识别出es6的格式 ERROR SyntaxError: Unexpected token . F:\front\node_modules\unimport\dist\shared\unimport.af6409e3.cjs:976const fileFilter options?.fileFilter || (() > true);检查了一下现node版本是12版…

Self-study Python Fish-C Note19 P62to63

类和对象 (part 2) 本节主要介绍 类和对象的构造函数、重写、钻石继承、Mixin及案例源码剖析&#xff08;原视频P62-63)\ 构造函数 之前我们在函数章节里说&#xff0c;函数是可以通过参数来进行个性化定制的。类在实例化的时候其实也是支持个性化定制对象的。 定义类的时候…

Vue.js入门系列(十八):利用浏览器本地存储实现TodoList数据持久化

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

基于Python的机器学习系列(17):梯度提升回归(Gradient Boosting Regression)

简介 梯度提升&#xff08;Gradient Boosting&#xff09;是一种强大的集成学习方法&#xff0c;类似于AdaBoost&#xff0c;但与其不同的是&#xff0c;梯度提升通过在每一步添加新的预测器来减少前一步预测器的残差。这种方法通过逐步改进模型&#xff0c;能够有效提高预测准…

欧洲游戏市场的文化和语言特征

欧洲游戏市场是一个由无数文化和语言特征塑造的丰富多样的景观。作为世界上最大、最多样化的游戏地区之一&#xff0c;欧洲为旨在创造与广大受众产生共鸣的内容的开发者带来了独特的挑战和机遇。 欧洲市场最引人注目的方面之一是语言的多样性。欧盟有24种官方语言和众多地区方…

开源软件指南

目录 什么是开源软件 开源软件的历史和哲学 什么是开源许可证 开源许可证的类型 ​编辑 开源合规性 版权和知识产权合规性 安全合规性 什么是开源软件政策 开源软件安全 库存和软件物料清单(SBOM) 依赖项更新 开源漏洞扫描 二进制存储库管理器 开源软件的当前趋势…

C#语言实现最小二乘法算法

最小二乘法&#xff08;Least Squares Method&#xff09;是一种常用的拟合方法&#xff0c;用于在数据点之间找到最佳的直线&#xff08;或其他函数&#xff09;拟合。以下是一个用C#实现简单线性回归&#xff08;即一元最小二乘法&#xff09;的示例代码。 1. 最小二乘法简介…

【kubernetes】金丝雀部署

概念&#xff1a; 金丝雀发布&#xff08;又称灰度发布、灰度更新&#xff09;&#xff1a;金丝雀发布一般先发1台&#xff0c;或者一个小比例&#xff0c;例如2%的服务器&#xff0c;主要做流量验证用&#xff0c;也称为金丝雀 (Canary) 测试 &#xff08;国内常称灰度测试&a…

一文读懂Linux用户密码管理

目录 前言1. 基本知识2. 命令行 前言 作为全栈人员&#xff0c;对于Linux的账号密码管理也要熟知 下述文章直奔主题&#xff0c;直接讲解知识点 1. 基本知识 修改密码、查看密码哈希值、管理密码到期时间等 用户的密码和相关信息主要存储在两个文件中&#xff1a; /etc/pa…

随笔九、SARADC按键程控测试

目录 1. 泰山派环境 2. 按键3分析 3. 编程测试 1. 泰山派环境 泰山派开发板上有3个按键 按键1是电源按键PWRON&#xff0c;实测按几下会导致开发板重启 按键2是复位按键RESET&#xff0c;按下立马复位重启 按键3是升级按键RECOVER&#xff0c;配合RESET按键可以使开发板进…

现在做项目不看能力!

有人还在执着于能力&#xff0c;但当你多接触一些高手之后&#xff0c;你会发现他们想问题想得很透彻&#xff0c;什么能力&#xff0c;其实不重要。能力是辅助的&#xff0c;在互联网赚钱机会是更重要的&#xff0c;能力不是重点&#xff0c;优先的是执行力。执行力才是第一生…

泛微E9开发 获取浏览按钮的显示值

获取浏览按钮的显示值 1、显示效果2、实现方法3、标准API3.1.获取浏览按钮的显示值3.1.1.格式3.1.2.参数说明3.1.3.案例 3.2. 获取选择框字段的显示值3.2.1.获取选择框字段的显示值3.2.2.格式3.2.3.参数说明3.2.4.案例 1、显示效果 2、实现方法 <script>debugger;var tb…

IO练习:用信号实现司机和售票员问题

【1】问题描述 1&#xff09;售票员捕捉SIGINT&#xff08;代表开车&#xff09;信号&#xff0c;向司机发送SIGUSR1信号&#xff0c;司机打印&#xff08;lets gogogo&#xff09; 2&#xff09;售票员捕捉SIGQUIT&#xff08;代表停车&#xff09;信号&#xff0c;向司机发送…

x-cmd pkg | lazydocker - Docker 和 docker-compose 的 Terminal UI

目录 简介快速上手功能特点竞品和相关项目进一步探索 简介 lazydocker 是由 Jesse Duffield 用 Go 语言开发的 Docker 和 docker-compose 的 Terminal UI 管理工具。它提供 docker 的终端图形界面&#xff0c;支持鼠标操作和键盘快捷键&#xff0c;能实时监控 docker 容器&…

python简介及开发环境配置总结

参考&#xff1a;Python 基础教程 | 菜鸟教程 (runoob.com) Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言。 Python 由 Guido van Rossum 于 1989 年底发明&#xff0c;第一个公开发行版发行于 1991 年。像 Perl 语言一样, Python 源代码同样遵循 GPL(GNU G…

国风高铁站可视化:传统文化与现代科技的融合

图扑国风高铁站可视化系统展示了浓厚的传统文化元素&#xff0c;结合现代科技&#xff0c;使旅客在便捷出行的同时体验独特的文化风情。高铁站可视化管理系统通过实时监控和数据分析&#xff0c;为车站运营人员提供全面、直观的管理工具&#xff0c;提升决策效率。

物联网架构之HBase

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

06.登录页面开发

1. 前言 前面已经完成了一些基础的配置&#xff0c;接下来开始进入真正的开发阶段。开发过程中会涉及到一些其它插件的集成&#xff0c;这里用到什么就记录一下使用的心得体会。 这里需要交代一下&#xff0c;项目里的文件命名规则&#xff0c;以及文件结构&#xff0c;views…

数学建模之入门篇

目录 什么是数学建模 建模、编程、写作 一、初步建模选择模型 二、进阶熟练掌握 1. 数学模型 线性规划 图与网络模型及方法 插值与拟合 灰色预测 动态规划 层次分析法 AHP 整数规划 目标规划模型 偏最小二乘回归 微分方程模型 博弈论 / 对策论 排队论模型 存…

Java笔试面试题AI答之面向对象(5)

文章目录 25. Java 包装类的实例是否可变&#xff1f;不可变类&#xff08;Immutable Classes&#xff09;特殊情况总结 26. 简述Java什么是自动装箱和自动拆箱&#xff1f;自动装箱&#xff08;Autoboxing&#xff09;自动拆箱&#xff08;Unboxing&#xff09;注意事项 27. J…