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

目录

一、嵌入式介绍

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

  • 16
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值