A系列:面向尖端,基于虚拟内存的操作系统

R系列:针对实时系统

M系列:针对MCU微控制

 

STM32是cortex-M3内核,采用ARM-V7哈弗结构

 

传统的ARM7是采用ARMv4T冯氏结构

 

Cortex-M3(ARM-V7)比ARM7 TDMI各方面的性价比更优

原子教你玩STM32

原子教你玩STM32

 

STM32芯片:内核部分、外设部分、调试系统、总线、存储器、时钟

复位部分

 

STM32供电电压在2-3.6V之间正常工作

 

STM32 F 103 Z E T 6

F:通用型

101:基本型  102:USB基本型 103:增强型  105、107:互联型

 

U/C/R/V/Z:36 48 64 100 144

 

4/6/8/B/C/D/E:16K 32K 64K 128K 256K 384K 512K

 

H/T/U/Y:BGA LQFP VFQFPN WLCSP64

 

6: 工业级稳定-40到85℃

7:工业级温度-40到105℃

 

DMA:动态数据存储,为CPU减负,直接进行数据交换

原子教你玩STM32

 

BOOT0 BOOT1

  0     X :

  0     X :从片上Flash代码区域启动,执行固件

  1     0 :系统存储器BootLoader区域,引导进行串口1下载

  1     1 :执行SRAM区域代码

原子教你玩STM32

先RST低,DTR高,所以RESET低电平复位,单片机复位

后RST低,DTR低,此时RESET为高复位结束,B0为高,进入ISP

通过CH340G的rst和dtr引脚间接控制单片机的RST和BOOT0引脚,实现的程序一键式下载

 

 

CORE:core_cm3.c  core_cm3.h  startup_stm32f10x_hd.s

 

OBJ:过程文件和输出文件hex

 

STM32F10x_FWLib:STM32固件库包inc和src

 

USER:main.c  stm32f10x.h  stm32f10x_conf.h  

stm32f10x_it.c  stm32f10x_it.h  system_stm32f10x.c

system_stm32f10x.h

 

SYSTEM:原子编写的usart.c  usart.h

delay.c  delay.h

system.c system.h

 

HARDWARE:自建外设分类文件夹

 

注意.h文件的路径包含(到每级文件夹)

全局宏定义的关键字

 

手册中有FT标识部分的表示可以容忍5V电压

原子教你玩STM32

GPIO口的使用:打开相应时钟

               配置相应的模式

               配置相应的速度

 

浮空输入模式:自由的输入端,电平传输最终到达相应的

寄存器,读取寄存器值

 

模拟输入模式:自由输入端,电压被采样到相应的外设部

               分,不到达输入寄存器

 

 

输出高低电平时,写位设置/清除寄存器---->输出数据寄

存器,控制后续电路的输出电平极性

原子教你玩STM32

 

GPIOx_CRL:端口配置低8位寄存器,每4位控制一个IO

例:PA0-PA7  PA0(3-2:配置输入/输出速度模式)

      (1-0:配置输入输出模式细化)

 

GPIOx_IDR:低16位有效,对应相应IO口的输入电平0/1          在输出模式下也可以读取其上电平,以验证

 

GPIOx_ODR:低16位有效,对应相应IO口的输出电平0/1

          在输入模式下兼有上下拉的选择功能

原子教你玩STM32

GPIO_BSRR:端口位设置/清除寄存器

          0-15位对应位1,输出高,低无效

          16-31位对应位1,输出低,低无效

          间接控制ODR寄存器设置IO口

 

每个IO口都可以作为中断输入

 

 

使能IO口时钟 RCC_APB2PeriphColckCmd();

初始化IO口模式,调用GPIO_Init();

原子教你玩STM32

操作IO口:GPIO_SetBits();  GPIO_ResetBits();

 

不同方法操作IO口,最终都是操作相应的底层寄存器ODR/IDR

 

位带操作:单个IO口的位重新定义为新的地址,可以直接操作地址

           如:PAout(1)=1;

 

 

位操作:GPIOA->CRL&=0XFFFFFF0F;

        GPIOA->CRL|=0XFFFFFF4F;  //0101

GPIOA->ODR|=1<<5;

TIMx->SR=(unint16_t)~TIM_FLAG;

 

Define宏定义:

#define sysclk_freq_72MHz  72000000

前为所定义的宏名,后为常数 表达式 格式串等

 

ifdef:条件编译

#ifndef

#define

....

#end if

 

 

Typedef:类型别名

typedef unsigned char  uint8_t;

typedef unsigned int   uint32_t;

typedef unsigned short int   uint16_t;

 

STM32,一切底层配置,最终都是配置相关寄存器

 

sfr   P0=0X80;//特殊功能寄存器地址

P0=0X00;//特殊功能寄存器赋值

 

GPIOA->ODR=0X00000000;

 

寄存器地址位置映射:

重要的是在顶层中将特定位置的顺序地址

强制类型转换:划分为一个结构体类型,方便查询使用

原子教你玩STM32

 

 

STM32时钟框图

原子教你玩STM32

 任何外设使用之前,必须使能相应的时钟

 

 

时钟结构体类型定义:与时钟相关寄存器的集合

原子教你玩STM32

 

 

时钟相关库函数:

原子教你玩STM32

 

 

 

 

 

STM32的USB slave模式下D+需要接上拉电阻到VCC

 USB转串口时只需要D+和D-引脚

Mini和Micro的座子的第4脚ID引脚默认下悬空,正常工作

 

 

 

 

 

相关文章:

  • 2021-11-11
  • 2021-04-16
  • 2021-09-24
  • 2021-06-09
  • 2022-02-04
  • 2021-11-13
  • 2021-11-23
  • 2021-07-30
猜你喜欢
  • 2021-09-16
  • 2021-05-20
  • 2021-04-18
  • 2021-07-03
  • 2021-12-15
  • 2021-10-21
  • 2021-12-06
相关资源
相似解决方案