STM 32 芯片选型与挂载

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℃。

STM 32 芯片选型与挂载_第1张图片

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

你可能感兴趣的:(嵌入式STM32,stm32,mcu,芯片,gpio)