STM32学习之路01

STM32:ST 是公司名,M就是microcontroller,32就是指32位相应的有stm8只有八位。使用ARM的Cortex-M的内核。
外设

英文缩写名称描述
NVIC嵌套向量中断控制器 用来管理中断的设备,例如配置优先级等
Systick系统滴答定时器为操作系统提供定时服务,STM32可以植入操作系统,例如FreeRTOS、UCOS等,利用定时服务可以实现任务切换的功能
RCC复位和时钟控制配置时钟,操作stm32之前需要进行使能
GPIO通用IO口通用IO口
AFIO复用IO口复用功能的重定义和中断端口的配置
EXTI外部中断用于外部中断
TIM定时器非常常用
还有好多不想写了

芯片命名规则

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

系统结构

在这里插入图片描述
Cortex-M3是单片机的内核,有三根总线与外部相连接,ICode和Dcode用来读取Flash中的数据,Flash闪存中存储着程序代码,DCode用来加载数据,ICode用来加载指令。System则连接了AHB系统总线、SRAM、FSMC。SRAM用来存储这运行时的数据。.AHB系统总线上挂载了基本外设(复位时钟)或者高性能外设,SDIO也是连接到AHB系统总线上。AHB系统总线还通过两个桥接接到了APB2和APB1上,因为通信协议不同需要桥接来进行转换。性能:AHB>APB2>APB1,AHB和APB2的频率一般在72Mhz而APB1一般是36MHz。
DMA1和DMA2可以看做CPU的小秘书,它可以负责大数据的搬运。

新建STM32工程

1.可以基于寄存器开发,使用51单片机一样,直接对寄存器中的数据进行更改设置。
2.可以基于标准库函数,基于官方封装好的函数进行开发。
3.可以基于Hal库,Hal库可以使用图形化的方式进行开发。

这里使用标准库函数进行入门:
首先得要准备好stm32的标准库文件,我放到了百度云盘:
链接:https://pan.baidu.com/s/1-srQyac9KYKBTa1Bf0YyUQ
提取码:u1f2
下后解压:
在这里插入图片描述
Libraries就是库函数的文件,Project是官方示例工程。
首先将stm32的启动文件放置到工程项目中。
启动文件在下面路径下:
Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm
在这里插入图片描述
在工程目录下新建start目录,将启动文件都放到这里目录下面。
复制STM32F10x目录下的stm32f10x.h、system_stm32f10x.c和system_stm32f10x.h到start目录下面:
在这里插入图片描述
stm32f10x.h是stm32寄存器的声明文件,system_stm32f10x.c是主要用来配置stm32的时钟的。
在Libraries\CMSIS\CM3\CoreSupport目录下是内核寄存器的描述文件:
在这里插入图片描述
同样将这两个文件也放置到目录下面。
之后在Keil中添加所需的文件
在这里插入图片描述
在工程中建立User目录,将建立main.c文件放置到User目录下:

#include "stm32f10x.h"                  // Device header
int main(){
	while(1){
	
	}
}

如果是基于寄存器开发的话,工程就到此为止了。

GPIO——通用输入输出口

有八种输入输出模式。
引脚电平:0v~3.3v,部分可以忍耐5v。具体哪一些可以忍耐可以看看手册。
输出模式可以输出高低电平,有驱动能力。
输入模式可以读取外部输入的高低电平。

stm32中的GPIO挂载在APB2外设中。
stm32的GPIO外设名称是按照GPIOA、GPIOB、GPIOC等这样设置的。

基本结构图:
在这里插入图片描述
每一个引脚对应寄存器中的一位,stm32是32位的,内部寄存器是32位的,io对应的寄存器对应的低16位对应io口,而高16位没有用到。驱动器是负责增加io口的驱动能力。

引脚内部结构

下面是引脚对应的内部电路图:
在这里插入图片描述

输入部分

保护二极管:保护io引脚,当高电压接入时电流会从保护二极管通过。
在这里插入图片描述

上下拉电阻:用来控制io口默认值的。
在这里插入图片描述
施密特触发器:稳定高低电平,当电压低于某值时,输出低电平,当电压高于某值时输出高电平。
在这里插入图片描述
模拟输入在施密特触发器之前,接受模拟信号放大。复用功能输入在施密特触发器之后,用来扩展其他功能。

输出部分

在这里插入图片描述
使用位设置/清除寄存器可以直接对寄存器上的某一位进行更改。
输出数据寄存器可以读写,如果是写的话需要将32位数据整体写入。
在这里插入图片描述
通过寄存器或者外部复用功能输出来进行输出控制,控制P-mos和N-mos来控制推挽、开漏、输入模式。

8种模式

在这里插入图片描述
在这里插入图片描述
在输入模式下,输出驱动是断开的。
在这里插入图片描述

模拟输入模式施密特触发器是关闭的,直接连接模拟输入,模数转换时使用。
在这里插入图片描述
在输出模式下输入模式也是有效的。

外设的GPIO的设置

通过设置对应的寄存器来配置gpio的模式:
没有GPIO的引脚是由4位进行配置,16个io引脚就需要64位进行控制,也就是两个寄存器(一个寄存器有32位),这两个寄存器分别为端口配置低寄存器端口配置高寄存器
端口输入寄存器用来存放输入的高低电平,低十六位对应16个引脚,高十六位没有使用。
端口输出数据寄存器用来控制输出高低电平,低十六位店员16个引脚,高十六位没有使用。
位设置/清除寄存器 高十六位用来进行位清除的,写0无没有影响,写1用来进行位清除的。低十六位用来位设置的,写0没有影响,写1则是设置为1。如果高位和低位同时设置1,则低位优先。
端口位清除寄存器低十六位进行位清除置0。
使用端口位清除寄存器来进行位置0,使用位设置/清除寄存器的低十六位进行位置1,会方便些。

关于三极管的小知识

使用npn的集电极接正极,发射级接负载。pnp则就是相反的。
在npn的基级加入下拉电阻,io口处于高阻态时下拉电阻可以让基级保持为低电平防止外界信号干扰。
三极管的三个引脚分别叫e、c、b。e对应的是发射极,c对应的是集电极,b对应的是基极。
三极管的集电极和发射级可以反接,这样接会导致三级管的耐压值会降低且β也将大大降低。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值