1.STM32简介
STM32是ST公司基于ARM Cortex-M内核开辟的32位微控制器;
STM32常应用在嵌入式范畴,如智能车、无人机、机器人、无线通讯、物联网、工业控制、娱乐电子产品等;
STM32F1系列是主流系列,有177的内核跑分和72Mhz的Cortex-M3内核;
2.ARM
既指ARM公司,也指ARM处置惩罚器内核。
ARM公司是环球领先的半导体知识产权(IP)提供商,全天下凌驾95%的智能手机和平板都采用ARM架构;
ARM公司筹划ARM内核,半导体厂商美满内核周边电路并生产芯片;
最乐成的产品为32 位嵌入式 CPU 核–ARM 系列,最常用的是ARM7 和 ARM9
STM32 基于 ARM Cortex 内核的 32 位 MCU 和 MPU 产品系列图:
A系列:应用(application),主要用于手机,苹果手机、高通手机芯片、联发科手机芯片;
R系列:RealTime,主要面向实时性很高的场景,硬盘控制器
M系列:Microcontroller,主要应用在单片机范畴;
3.STM32F103ZET6/STM32F103C8T6
系列:主流系列STM32F1
内核:ARM Cortex-M3
主频:72MHz
RAM:20K (SRAM)
ROM:64K (Flash)
供电:2.0~3.6V (尺度3.3V)
封装:LQFP48


- NVIC和SysTick是内核内的外设,别的是内核外的外设
NVIC: 内核内用于管理中断的设备,比如配置中断优先级这些东西
SysTick: 内核内里的一个定时器,主要用来给操纵体系提供定时服务
- RCC:对体系的时钟进行配置,就是使能各模块的时钟。在STM32中,其它的这些外设在上电的环境下默认是没偶然钟的,不给时钟的环境下,操纵外设是无效的。外设也不会工作,如许的目标是降低功耗。以是,在操纵外设之前,必须要先使能它的时钟。因此,必要用RCC来完成时钟的使能
- GPIO:用GPIO来点灯,读取按键
- AFIO:完成复用端口的重定义,另有中断端口的配置
- EXTI:外部中断,配置好外部中断后,当引脚有电平变革时,就可以触发中断,让CPU来处置惩罚使命。
- TIM:分为高级定时器、通用定时器、基本定时器;通用定时器:不光完成定时中断使命,还可以完成测频率、天生PWM波形、配置成专用的编码器接口等功能。
- ADC:该STM32内置了12位的AD转换器,可以直接读取IO口的模拟电压值,无需外部毗连AD芯片。
- DMA:可以帮助CPU完成搬运大量数据如许的繁杂使命
- USART:即支持异步串口,也支持同步串口,ESP8266WIFI模块、GSM模块、蓝牙模块、GPS模块、指纹识别模块、IOT模块、串口屏等
- I2C和SPI:STM32也内置了它们的控制器,可以用硬件来输出时序波形
- IIC:EEPROM、MPU6050陀螺仪、0.96寸OLED屏、电容屏等
- SPI:串行FLASH、以太网W5500、VS1003/1053音频模块、SPI接口的OLED屏、电阻屏等
- AD/DA:光敏传感器模块、烟雾传感器模块、可燃气体传感器模块、简易示波器等
- CAN和USB:CAN和USB通信
- SDIO:可以用来读取SD卡;
- FSMC:可变静态存储控制器,可以用于扩展内存,或者配置成其他总线协议,用于某些硬件的操纵;
- RTC:在STM32内部完成年月日、时分秒的计时功能;可以接外部备用电池,纵然掉电也能正常运行;
- CRC:是一种数据的校验方式,用于判断数据的精确性。
- PWR:可以让芯片进入睡眠模式等状态,来达到省电的目标;
- BKP:是一段存储器,当体系掉电时,仍可由备用寄存器保持数据,这个根据必要,可以完成一些特殊功能;
- IWDG和WWDG:当单片机因为电磁干扰死机或者步伐筹划不合理出现死循环时,看门狗可以及时复位芯片,包管体系的稳固;
- DAC:可以在IO口直接输出模拟电压;
- USB OTG:用OTG功能,可以让STM32作为USB主机去读取其他USB设备
- Syste Core: DMA, IWDG, WWDG, GPIO, NVIC, SYS, RCC
- Analog: ADC, DAC
- TIMES: RTS, Tim
- Connectivity: CAN, FSMC, USB, SDIO, IIC, SPI, I2C, USART
- MultiMedia: I2S2, I2S3
- Computing: CRC
4.STM32命名规则
5.STM32最小体系板
- 滤波电容: 在3.3V和GND之间接一个滤波电容,来包管供电电压的稳固
- 晶振电路:接了一个8MHz的主时钟晶振,STM32的主晶振一般都是8MHz。
- 启动配置:H1相称于开关,拨动开关,就可以让BOOT引脚选择接3.3V还是GND了。
- 下载端口:如果用STLINK下载步伐的话,必要把SWDIO和SWCLK这两个引脚引出来方便接线。别的再把3.3V和GND引出来,这个GND是必须引出来的,3.3V如果板子自己有供电的话,可以不引
6.STM32开辟方式
STM32的开辟有基于寄存器、基于尺度库也就是库函数的方式和基于HAL库的方式。
基于寄存器:是用步伐直接配置寄存器,来达到我们想要的功能。
基于库函数:是使用ST官方提供的封装好的函数。通过调用这些函数来间接地配置寄存器。
基于HAL库:可以用图形化界面快速配置STM32,可以快速上手STM32,但隐藏了底层逻辑。
基于寄存器:
- // 配置寄存器,点灯
- // 1. RCC寄存器,来使能GPIOC的时钟,GPIO都是APB2的外设,
- // 因此APB2外设时钟使能寄存器RCC_APB2ENR里面配置
- // IOPCEN是使能GPIOC的时钟
- // 2. 配置PC13口的模式
- // 配置高寄存器GPIOx_CRH,x对应A~E中任意一个字母,
- // CNF13和MODE13用来配置13号口
- // CNF13配置为00和MODE13配置为11
- // 3. 端口输出数据寄存器GPIOx_ODR,低电平亮,高电平灭。
- RCC->APB2ENR = 0x00000010;
- GPIOC->CRH = 0x00300000;
- GPIOC->ODR = 0x00002000;
复制代码 基于库函数:
- // 使用库函数来点灯
- // 1. 使能时钟,第一个参数选择外设,第二个选择新的状态
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
- // 2. 配置端口模式,GPIO_Init
- // 第一个参数是选择哪个GPIO,第二个是参数的结构体
- // 是PC13口的LED,所以第一个参数写GPIOC
- // 先定义一个结构体GPIO_InitStructure,有三个参数,
- // 分别是GPIO模式、GPIO端口、GPIO速度
- GPIO_InitTypeDef GPIO_InitStructure;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOC,&GPIO_InitStructure);
- // 点灯,GPIO_SetBits将端口设置为高电平
- GPIO_SetBits(GPIOC,GPIO_Pin_13);
- // 点灯,GPIO_ResetBits将端口设置为低电平
- // GPIO_ResetBits(GPIOC,GPIO_Pin_13);
复制代码 7.STM32体系架构
STM32F103芯片的体系架构
- FLASH
- SRAM
- BUS
- Cortex-M3内核
- 外设,通信协议
3个被动单元:
4个驱动主动单元:
- Cortex-M3内核DCode总线DBuse
- 内核体系总线
- DMA1
- DMA2
其他单元;
8.STM32时钟体系
筹划了一个时钟树:
- HSI振荡器时钟(High Speed Internal oscillator,高速内部时钟)
- HSE振荡器时钟(High Speed External(Oscillator / Clock),高速外部时钟)
- PLL时钟(Phase Locked Loop 锁相环/倍频器)
- LSI时钟(Low Speed Internal,低速内部时钟)
- LSE时钟(Low Speed External oscillator,低速外部时钟)。
9.STM32中断体系
Cortex-M3内核支持256个中断,其中包罗了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。
STM32有84个中断,包括16个内核中断和68个可屏蔽中断,具有16级可编程的中断优先级。
STM32F103系列70个中断(咱们如今使用的芯片)有10个内核中断和60个可编程的外部中断。
10.STM32定时器
- 体系定时器(SysTick体系)是属于CM3内核,内嵌在NVIC中。
- 体系定时器是一个24bit的向下递减的计数器,计数器每计数一次的时间为1 / SYSCLK,一般我们设置体系时钟SYSCLK(与AHB相同)即是72M。当重装载数值寄存器的值递减到0的时间,体系定时器就产生一次中断,以此循环往复。
- SysTick定时器能产生中断,CM3为它专门开出一个非常类型,并且在向量表中有它的一席之地。它使操纵体系和其它体系软件在CM3器件间的移植变得简单多了,因为在所有CM3产品间SysTick的处置惩罚方式都是相同的。
- 体系定时器一般用于操纵体系,用于产生时基,维持操纵体系的心跳。SysTick定时器除了能服务于操纵体系之外,还能用于其它目标:如作为一个闹铃,用于测量时间等。
有4个寄存器与SysTick有关。在core_cm3.h中可以看到有个类型定义的就是SysTick。
- typedef struct
- {
- __IO uint32_t CTRL; /*!< Offset: 0x00 SysTick Control and Status Register */
- __IO uint32_t LOAD; /*!< Offset: 0x04 SysTick Reload Value Register */
- __IO uint32_t VAL; /*!< Offset: 0x08 SysTick Current Value Register */
- __I uint32_t CALIB; /*!< Offset: 0x0C SysTick Calibration Register */
- } SysTick_Type;
复制代码 CTRL: SysTick控制和状态寄存器。
LOAD: SysTick重装载寄存器。
VAL: SysTick当前数值寄存器。
CALIB: SysTick 校准数值寄存器。很少用到。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |