1、首先我们先认识一下ROM和RAM以及一些其他常见的
![](https://img-blog.csdnimg.cn/e6f3fdc7be7444358202addc81c1b2c0.png)
二、stm32介绍
1、ARM的介绍
ARM架构,是一个精简指令集(RISC)处理器架构家族,其广泛地使用在许多 嵌入式系统设计 ARM的经营模式在于出售其IP核,授权厂家依照设计制作出建构于此核的微控制 器和中央处理器。
2、stm32的介绍stm32F103C8T6
ST:指意法半导体
M:指定微处理器32:表示计算机处理器位数
ARM分成三个系列:
Cortex-A:针对多媒体应用
Cortex-R:针对对实时性和性能有一定要求的场景
Cortex-M:针对低功耗高性能的场景 Cortex-M0、Cortex-M3、Cortex-M4广泛应用于智能手环、飞行器、平衡车、POST机、智能家电、3D打印机、工农业等各个领域,完成终端控制、边缘计算等任务,是大数据背景下信息和流量的入口。
不同场景应用具体可以参考产品选型手册:《STM8和STM32产品选型手册》
3、stm32最小系统
stm32芯片型号:stm32f103c8t6 最小系统有5部分组成(电源电路、时钟电路、boot电路、下载/调试接口、复位电路)
三、GPIO的使用流程
1、使能GPIO时钟API
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState)
功能:使能APB1或APB2的外设时钟。
参数:RCC_APB2Periph支持的外设:
RCC_APB2Periph_AFIO, RCC_APB2Periph_GPIOA, RCC_APB2Periph_GPIOB,RCC_APB2Periph_GPIOC, RCC_APB2Periph_GPIOD,
RCC_APB2Periph_GPIOE,RCC_APB2Periph_GPIOF, RCC_APB2Periph_GPIOG, RCC_APB2Periph_ADC1,RCC_APB2Periph_ADC2,
RCC_APB2Periph_TIM1, RCC_APB2Periph_SPI1,RCC_APB2Periph_TIM8, RCC_APB2Periph_USART1, RCC_APB2Periph_ADC3,
RCC_APB2Periph_TIM15, RCC_APB2Periph_TIM16, RCC_APB2Periph_TIM17,RCC_APB2Periph_TIM9, RCC_APB2Periph_TIM10,
RCC_APB2Periph_TIM11
NewState设置是否使能
ENABLE or DISABLE
2、初始化GPIO
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
功能:
主要完成:操作引脚、输入输出模式、速率的设置
参数:
GPIOx:操作的GPIO组,其中x为(A,B...G)比如GPIOA、GPIOB、GPIOC等
GPIO_InitStruct:GPIO初始化结构体指针
typedef struct{
uint16_t GPIO_Pin;//GPIO_Pin的值为:GPIO_Pin_0~GPIO_Pin_15 或则GPIO_Pin_All
GPIOSpeed_TypeDef GPIO_Speed;//GPIO_Speed_10MHz = 1,GPIO_Speed_2MHz,GPIO_Speed_50MHz
GPIOMode_TypeDef GPIO_Mode;
}GPIO_InitTypeDef;
3、设置电平
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//置1
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//置0
四、一个简单的点亮LED灯的案例
#include "stm32f10x.h"
void led_init(void);
void led_on(void);
void led_off(void);
void my_delay(int ms);
int main()
{
led_init();
while(1)
{
//亮
led_on();
//延时
my_delay(500);
//灭
led_off();
//延时
my_delay(500);
}
return 0;
}
void led_init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
//1、设置时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
//2、初始化GPIO PC13 输出
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;//速率
GPIO_Init(GPIOC,&GPIO_InitStruct);
//3、设置电平 高电平灭
GPIO_SetBits(GPIOC,GPIO_Pin_13);//置1
return;
}
void led_on(void)
{
GPIO_ResetBits(GPIOC, GPIO_Pin_13);//低电平 亮
return;
}
void led_off(void)
{
GPIO_SetBits(GPIOC,GPIO_Pin_13);//高电平 灭
return;
}
void my_delay(int ms)
{
int i,j;
for(i=0;i<ms;i++)
for(j=0;j<1000;j++);
return;
}