STM 32 芯片选型与挂载

本文详细介绍了STM32-F1系列芯片的选型规则,包括系列分类、引脚数量、内嵌Flash容量和封装类型。STM32的外设挂载在APB1和APB2总线上,如DAC、PWR、I2C、UART、SPI等。同时,文章讲解了GPIO口的结构和地址映射,以及如何通过GPIO_TypeDef结构体访问寄存器。此外,还定义了GPIO_PIN_xxx常量用于GPIO引脚的操作。
摘要由CSDN通过智能技术生成

stm32 芯片的选型,分类,挂载 及GPIO口的分析

(本文章程序均为样例,仅限于理解,如有错误还望指正)

1.嵌入式芯片的选型
STM32-F1系列:
基础型,主频为72M(内核为cortex-M3),CPU位数=32。
我们所用的芯片是STM32F103vet6
STM32:表示产品的类型,以STM32F103VET6为例
F:表示通用系列的子系列
103:代表增强型系列
V:代表的引脚数100引脚
E:代表内嵌flash数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.外部挂载分析
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:电源功耗控制
BKP:备份数据
BxCAN:CAN总线是一种通信方式。STM32主要负责程序的运行,而CAN总线只是一种通信协议。STM32之间的通信可以通过CAN总线进行数据交换
USB 虚拟接口
I2C 串行通信协议,i2c接口
UART 调试串口
USART通用同步/异步接收器
SPI串行外设接口
IWDG独立看门狗
WWDG 窗口看门狗
RTC实时时钟
TIM 定时器
……………………………………………………………………APB2
ADC模数转换
GPIO(abcdef)
EXT 外部中断事件控制器
APB2负责AD,I/O,高级TIM,串口1。
APB1负责DA,USB,SPI,I2C,CAN,串口2345,普通TIM

#define GPIOA ((GPIO_TypeDef *)GPIOA_BASE)
1.GPIOA_BASE被强制转换为地址,空间以GPIO_TypeDef的类型进行构建,首址为GPIOA_BASE,空间内有成员,之间依各自固有类型顺序分配相应空间;
2.GPIOA宏展开,即为紧跟其后的具体内容,这样它就是一个指针了:指向以GPIOA_BASE为首址的结构体空间。所以您给出GPIOA->某成员,则操作成立,如取该成员地址、赋值等。

typedef struct
{
  __IO uint32_t CRL;//0x00
  __IO uint32_t CRH;//0x04字节也可以写32bit
  __IO uint32_t IDR;//0x08
  __IO uint32_t ODR;//0x0c 
  __IO uint32_t BSRR;//0x10
  __IO uint32_t BRR;//0x14
  __IO uint32_t LCKR;//0x18
} GPIO_TypeDef;

访问gpio_typedef各寄存器地址

GPIOB_CRL	= 0x40010C00UL
GPIOB_CRH	= 0x40010C04UL
GPIOB_IDR	= 0x40010C08UL
GPIOB_ODR	= 0x40010C0cUL  
GPIOB_BSRR	= 0x40010C10UL  
GPIOB_BRR	= 0x40010C14UL 
GPIOB_LCKR	= 0x40010C18UL 

每一个地址相差4bit

#define GPIOA_BASE            (APB2PERIPH_BASE + 0x00000800UL)

声明GPIOA_BASE的GPIOA相对于APB2的偏移地址

#define APB1PERIPH_BASE       PERIPH_BASE
#define APB2PERIPH_BASE       (PERIPH_BASE + 0x00010000UL)

声明外设总线的地址

#define PERIPH_BASE           0x40000000UL

宏定义PERIPH_BASE的地址

#define GPIO_PIN_0                 ((uint16_t)0x0001)  /* Pin 0 selected    */
#define GPIO_PIN_1                 ((uint16_t)0x0002)  /* Pin 1 selected    */
#define GPIO_PIN_2                 ((uint16_t)0x0004)  /* Pin 2 selected    */
#define GPIO_PIN_3                 ((uint16_t)0x0008)  /* Pin 3 selected    */0000 0000 0000 1000
#define GPIO_PIN_4                 ((uint16_t)0x0010)  /* Pin 4 selected    */
#define GPIO_PIN_5                 ((uint16_t)0x0020)  /* Pin 5 selected    */
#define GPIO_PIN_6                 ((uint16_t)0x0040)  /* Pin 6 selected    */
#define GPIO_PIN_7                 ((uint16_t)0x0080)  /* Pin 7 selected    */
#define GPIO_PIN_8                 ((uint16_t)0x0100)  /* Pin 8 selected    */
#define GPIO_PIN_9                 ((uint16_t)0x0200)  /* Pin 9 selected    */
#define GPIO_PIN_10                ((uint16_t)0x0400)  /* Pin 10 selected   */
#define GPIO_PIN_11                ((uint16_t)0x0800)  /* Pin 11 selected   */
#define GPIO_PIN_12                ((uint16_t)0x1000)  /* Pin 12 selected   */
#define GPIO_PIN_13                ((uint16_t)0x2000)  /* Pin 13 selected   */
#define GPIO_PIN_14                ((uint16_t)0x4000)  /* Pin 14 selected   */
#define GPIO_PIN_15                ((uint16_t)0x8000)  /* Pin 15 selected   */
#define GPIO_PIN_All               ((uint16_t)0xFFFF)  /* All pins selected */

定义一个名为GPIO_Pin_0的符号,该符号等价于((u16)0x0001),也就是一个无符号短整型的0x0001。(其余同上)

typedef enum //用于枚举
{
  GPIO_PIN_RESET = 0u,
  GPIO_PIN_SET
} GPIO_PinState;	 

GPIO_PIN_RESET = 0U
GPIO_PIN_SET =1U

其中:
0U 表示 无符号整型 0
1U 表示 无符号整型 1

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值