STM32

一、前言

1、STM32芯片组成

        ARM内核+ST设计的外围电路

2、系统结构

3、工程架构 

        

二、GPIO 

1、GPIO简介

1、GPIO通用输入输出口

2、引脚电平:0~3.3V

3、输出模式:输出高低电平、驱动LED、蜂鸣器等

4、输入模式:读取端口电平、ADC电压采集、读取按键输入等

2、GPIO基本结构

GPIO挂载在APB2总线上

3、GPIO八种模式 

4、GPIO程序步骤 

 1、使用RCC开启GPIO的时钟

作用:使能(开启)或失能(关闭)APB2外设时钟

RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
参数 说明 示例
RCC_APB2Periph 指明需要开启的是哪一个APB2外设

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_ADC3,

RCC_APB2Periph_USART1,

RCC_APB2Periph_SPI1,

RCC_APB2Periph_TIM1,
 RCC_APB2Periph_TIM8,
RCC_APB2Periph_TIM15,

RCC_APB2Periph_TIM16,

RCC_APB2Periph_TIM17,
RCC_APB2Periph_TIM9,

RCC_APB2Periph_TIM10, RCC_APB2Periph_TIM11 

NewState NewState:指定外设时钟的新状态 

ENABLE(打开) 

DISABLE(关闭)

2、使用GPIO_Init函数初始化GPIO

作用:根据GPIO_InitStruct中的指定参数初始化GPIOx外设

GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
参数 说明 示例
GPIOx 其中x可以为(A…G)选择GPIO外设。

GPIOA,

GPIOB,
GPIOC,

GPIOD,

GPIOE,

GPIOF,

GPIOG,

GPIO_InitStruct 指向GPIO InitTypeDef结构的指针,该结构包含指定GPIO外设的配置信息。

typedef struct

{
   GPIO_Pin;           
   GPIO_Speed;      
   GPIO_Mode;   
}GPIO_InitTypeDef;

参数说明:

3、使用输出或者输入的函数控制GPIO口

写引脚:

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);    //可以对16个端口同时写入

读引脚:

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);  //读取某一位
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);      //读取整个寄存器

翻转:

if(GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_5)==0)   //读输出引脚
	{
		GPIO_SetBits(GPIOB, GPIO_Pin_5);           //翻转
	}
	else
	{
		GPIO_ResetBits(GPIOB, GPIO_Pin_5);
	}

三、外部中断EXIT

1、中断简介

        主程序运行中,发生中断时,使CPU暂停当前正在运行的程序,转去处理中断程序,处理完后又返回原来被暂停的位置继续运行

        有68个可屏蔽中断源,包括了EXIT、TIM、ADC、USART、SPI、I2C、RTC等多个外设

2、NVIC简介

NVIC:嵌套向量中断控制器。用来管理中断

NVIC基本结构:

NVIC优先级分组:

3、EXIT简介

外部中断,检测GPIO口的电平,当指定的GPIO发生变化,向NVIC发送中断信号,产生中断

触发方式:1、上升沿

                  2、下降沿

                  3、双边沿

                  4、软件触发

支持的GPIO口:所有GPIO口。但不同组的相同Pin不能同时触发。例如:PA0、PB0、PC0等

触发方式:中断响应(触发中断)   /    事件响应(不触发中断,中断信号不传给CPU处理,而是触发其他外设)

4、EXIT基本结构

5、AFIO复用IO口

作用:复用引脚重映射、中断引脚选择 

6、EXIT程序步骤

1、配置RCC,将程序涉及外设的时钟都打开(有GPIO和AFIO)

RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)

2、使用GPIO_Init函数初始化GPIO

GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)

3、配置AFIO

作用:选择硬件所用的那一路GPIO,连接到后面的EXTI作用。

void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)
参数 说明 示例
GPIO_PortSource 选择要用作EXTI线路源的GPIO端口

GPIO_PortSourceGPIOA,

GPIO_PortSourceGPIOB,
GPIO_PortSourceGPIOC,

GPIO_PortSourceGPIOD,

GPIO_PortSourceGPIOE,

GPIO_PortSourceGPIOF,

GPIO_PortSourceGPIOG,

GPIO_PinSource GPIO_PinSource:要配置的EXTI线路

GPIO_PinSource0

GPIO_PinSource1

......

GPIO_PinSource15

4、配置EXTI

作用:1、选择边沿触发方式,比如上升沿、下降沿或者双边沿,还有选择触发响应方式,可以选择中断响应和事件响应

          2、根据EXTI InitStruct中的指定参数初始化EXTI外设

void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct)

参数说明:

参数 说明 示例
EXTI_InitStruct 指向EXTI InitTypeDef结构体的指针包含EXTI外设的配置信息。

typedef struct

{
  EXTI_Line;          
  EXTI_Mode;    
  EXTI_Trigger; 
  EXTI_LineCmd;  
}EXTI_InitTypeDef;

5、配置NVIC

1.1、配置优先级分组,抢占优先级和响应优先级

void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)

参数说明:

参数 说明 示例
NVIC_PriorityGroup 指定优先级分组位长度。

NVIC_PriorityGroup_0(0位抢占,4位响应)

NVIC_PriorityGroup_1(1位抢占,3位响应)

NVIC_PriorityGroup_2(2位抢占,2位响应)

NVIC_PriorityGroup_3(3位抢占,1位响应)

NVIC_PriorityGroup_4(4位抢占,0位响应)

1.2、初始化NVIC

void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct)

参数说明:

6、实现中断函数 

中断向量表:

         根据中断向量表,找到所需中断函数,这里面以IRQHandler结尾的字符串就是中断函数的名字,再根据名字写中断函数。

void EXTI3_IRQHandler(void)
{
    if(EXTI_GetITStatus(uint32_t EXTI_Line)==1)  //判断中断标志位是否设置
    {
        /*
        中断执行的任务
       */
    }
    EXTI_ClearITPendingBit(uint32_t EXTI_Line); //最后要清除中断标志位,结束中断
}

常用的EXIT函数: 

EXTI_GetITStatus(uint32_t EXTI_Line);  //检查指定的外部中断上的中断标志是否被设置。
EXTI_ClearITPendingBit(uint32_t EXTI_Line); //清除中断标志位,结束中断

四、TIM定时中断

1、TIM简介

        STM32的定时器拥有16位计数器、预分频器、自动重装载寄存器的时基单元,在72MHZ计数时钟下可以实现最大59.65s的定时

        不仅具备基本定时中断功能,还包括内外时钟源选择、输入捕获、输出比较、主从触发等模式

        通用、基本、高级定时器基本频率都是72MHZ

  2、定时器类型

 3、定时器中断基本结构

 4、时钟树

 5、定时器中断程序步骤

1.1、定时器内部时钟

1、开启定时器的RCC时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);   //开启TIM2时钟
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值