一、对于STM32F芯片的认识?
STM32是一种微控制器,主要有三种类型的MCU:主流级别MCU、高性能MCU、低功耗MCU。再详细一点,我们可以具体到STM32的命名规则,比如STM32F103C8T6中的“F”,代表的就是通用型,另外还有,比如S代表的是简单型、L代表的是低功耗、H代表高性能、AL是汽车应用低功耗型、AF是汽车应用通用型。
对于此次实验我们选择stm32f103c8t6芯片
二丶GPIO端口
GPIO(general porpose intput output):通用输入输出端口的简称。可以通过软件控制其输出和输入。stm32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通信,控制以及数据采集的功能。
2.初始化设置
1.打开GPIO口的时钟
-
将GPIOA GPIOB GPIOC三个时钟打开
-
#define RCC_APB2ENR (*(unsigned int *)0x40021018)
-
// 打开时钟
-
RCC_APB2ENR |= (1<<2); // 打开 GPIOA 时钟
-
RCC_APB2ENR |= (1<<3); // 打开 GPIOB 时钟
-
RCC_APB2ENR |= (1<<4); // 打开 GPIOC 时钟
2.初始化
采用推挽输出模式
端口1-7为低,端口8-15为高。每个引脚由四个位控制。
以GPIOB和0号引脚(B0)为例,将其设置为推挽输出,并设置最大速度为10MHz,则将控制B0的四个位设置为0001:
-
#define GPIOB_CRL (*(unsigned int *)0x40010c00)
-
// 最后四位变为0001
-
GPIOB_CRL |= (1<<0); // 最后一位变1
-
GPIOB_CRL &= ~(0xE<<0); // 倒数2、3、4位变0
对于GPIOB的B0、GPIOC的C15、GPIOA的A0,设置如下:
-
#define GPIOB_CRL (*(unsigned int *)0x40010C00)
-
#define GPIOC_CRH (*(unsigned int *)0x40011004)
-
#define G