关注分享主机优惠活动
国内外VPS云服务器

STM32学习笔记第二章STM32资源介绍

总结:总线上挂有大量外设。 外设地址映射 片上外设分为三个总线。 根据外设速度,不同的总线安装不同的外设,慢速外设和快速外设。

第二章STM32资源概述

2.1芯片选型

STM32-F1系列(图2-1):
基本类型、主频为72M(核心为cortex-M3),CPU位数为32。
使用的芯片是STM32F103vet6
STM32代表产品类型,以STM32F103VET6为例
F为通用系列的子系列
103为增强系列
/ > V 表示 100 个引脚
E 表示嵌入式 flashh中的数字6代表32K字节flash,8代表64K字节flash,B代表128K字节flash,C代表256K字节flash,D代表384K字节flash,E代表512K字节flash。
T代表封装,H代表BGA封装,T代表LQFP封装,U代表VFQFPN封装。
6表示工作温度范围,6表示-40~85℃,7表示-40~105℃。

图2-1
APB1总线上安装的外设包括DAC、PWR、BKP、bxCAN、USB、I2C2、I2C1、UART5、UART4、USART3、USART2 、SPI3/I2S、SPI2/I2S、IWDG、WWDG、RTC、TIM7、TIM6、TIM5、TIM4、TIM3、TIM2等。
APB2总线上安装的外设包括ADC1、ADC2、ADC3,包括USART1。 、SPI1、TIM1、TIM8、GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、GPIOG、EXT、IAFIO 等
APB1:
DAC:数模转换
PWR:电源功耗控制
br /> BKP:备份数据
BxCAN:CAN总线通讯方式。 STM32主要负责程序执行,而CAN总线只是一种通信协议。 STM32之间的通信可以通过CAN总线交换数据
USB虚拟接口
I2C串行通信协议、i2c接口
UART调试串口
USART通用同异步接收器
SPI串行外设接口
IWDG 独立看门狗
WWDG 窗口看门狗
RTC 实时时钟
TIM 定时器
APB2:
ADC 模数转换
GPIO(abcdef)
EXT 外部中断事件控制器

2.2 STM32 内存映射

内存映射是指片内片外flash、RAM、外设、boot block等的统一编程。 地点。 也就是说,我们使用地址来表示对象。 该地址大部分是由制造商指定的,用户只能使用,而不能更改。 仅当连接外部 RAM 或 FLASH 时,用户才能自定义。

图2-2
内存块0内部区域功能划分
① 选项字节:读写保护、BOR级别、软/硬件视图 使用配置看门狗在器件处于待机或停止模式时复位。 如果芯片意外锁死,可以从RAM启动并更改这部分相应的寄存器位。 地址范围为0x1FFF F800 - 0x1FFF F80F。
②系统存储器:存放有ST在出厂时编程好的ISP bootloader(即bootloader),用户不能修改。 通过串口下载时需要这部分程序。 地址范围为0x1FFF F000- 0x1FFF F7FF。
③FLASH:程序放这里。 地址范围为 0x0800 0000 至 0x0807 FFFF (512KB)。
④BOOT引脚是FLASH、系统存储器、SRAM的别称。 地址范围为 0x0000 0000 至 0x0007 FFFF。
⑤其他保留。
内部存储区Block1的功能划分
Block1用于设计内置SRAM。 我们使用的STM32F103VET6芯片有64KB的SRAM。 Block1内部区域SRAM(64KB)的功能划分地址范围为:0x2000 0000 ~0x2000 FFFF,其他保留。
内部SRAM区域大小为512MB,供芯片制造商用来连接片上SRAM。 该区域是通过系统总线访问的。 在这个区域的底部,有一个 1MB 的区间称为“bitstrip 区域”。 这个bitband区域还有一个相应的32MB“bitband别名(alias)区域”,可以容纳8M“位变量”(8051只有128个位变量)。 位带区域对应最低的1MB地址范围,位带别名区域中的每个字对应位带区域中的一位。 位带操作仅适用于数据访问,不适用于指令提取。 位带功能允许将多个布尔数据打包到单个字中,但可以像访问常规内存一样从位带别名区域使用它。
存储器Block2内部区域的功能划分:
Block2用于设计芯片上的外设。 根据外设总线速度的不同,该块分为两部分:APB(APB1和APB2)和AHB。 Block2 内部区域功能划分:
①APB1 总线外设,地址范围为:0x4000 0000 ~ 0x4000 77FF;
②APB2 总线外设,地址范围为:0x4001 0000 ~ 0x4001 3FFF;
③AHB 总线假设外部地址范围为 0x4001 8000 至 0x5003 FFFF。
内存块2是片上外围区域。 总共32位,以4字节为单位。 每个单元对应不同的功能。 控制这些单元可以让您操作外围设备。
直接输入地址非常麻烦,而且缺乏通用性。
例如GPIOB口的输出数据寄存器ODR的地址为0x4001 0C0C。 该寄存器为32位,低16位有效,对应16个外部IO。 向相应IO写入0/1将输出低/高电平。

2.3 STM32外设地址映射

片内外设分为3条总线。 不同的总线根据外设的速度承载不同的外设。 APB1 安装速度慢的外围设备。 APB2 和 AHB 设备配备了高速外设。

图2-3

图2-4

图2-5

图2-6

图2-7

寄存器地址 = 基址 + 偏移地址
GPIOB_CRL = 0x4001 0C 00UL
GPIOB_CRH = 0x4001 0C 04UL
GPIOB_IDR = 0x4001 0C 08UL
GPIOB_ODR = 0x4001 0C 0CUL
GPIOB_BSRR = 0x4001 0C 10UL
GPIOB_BRR = 0x4001 0C 14UL
GPIOB_LCKR = 0x4001 0C 18UL
从这里
GPIOA_CRL =0x4001 08 00UL
GPIOC_CRL =0x4001 10 00UL
> ...
C语言中的最小类型:字节类型,位,32位=4字节
连续存储节省空间
定义的结构体和寄存器大小是一一对应的,基数。地址是结构体绑定,结构体操作相当于寄存器操作。
给结构体指针赋值,使用“->”和“.”。 为常规变量赋值。 指针通常用于程序内寻址,因此您应该仔细研究它们。
HES外部高速时钟,HSI内部高速时钟

2.4 STM32第一个例程

2.4.1 Cube MX搭建工程

图 2-8

图 2-9

图 2-10

图 2 - 11

图 2-12

图 2-13 内部配置时钟

图 2[k4 ]14
/>点击右上角:GENERATE CODE生成工程文件

2.4.2编程

源代码(LED灯亮,LED1闪烁):

 //主程序部分 /* USER CODE BEGIN WHILE */ 同时 (1) {Scan_keys( ); /* 用户代码结束时 */ / * 用户代码 BEGIN 3 */HAL_GPIO_WritePin(GPIODGPIO_PIN_4GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOD,span>GPIO_PIN_5,GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOD,GPIO_PIN_6, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIODGPIO_PIN_3GPIO_PIN_SET );HAL_Delay(500);HAL_GPIO_WritePin(GPIODGPIO_PIN_3,GPIO_PIN_RESET);HAL_Delay(500); } /* USER CODE END 3 */ 注意:需要注意代码规范,将代码写在/ * USER CODE BEGIN 1 */ /* USER CODE END1 */,否则在更改 CubeMX 时,注释块之外的内容将被删除。  

代码说明:
两个GPIO输出HAL库函数
1. GPIO电平输出HAL库函数
void HAL_GPIO_WritePin (GPIO_TypeDefGPIOx, unit16_tGPIO_Pin, GPIO_PinState PinState);
三个参数:
GPIOx:目标管脚端口号
GPIO_pin:目标管脚号
PinState:高电平——GPIO_PIN_SET;
> 低电平——GPIO_PIN_RESET ;
2.GPIO电平翻转HAL库函数
void HAL_GPIO_TogglePin(GPIO_TypeDef
GPIOx,unit16_tGPIO_Pin);

未经允许不得转载:主机频道 » STM32学习笔记第二章STM32资源介绍

相关推荐

评论 抢沙发

评论前必须登录!