Stm32基础

Posted -wenli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Stm32基础相关的知识,希望对你有一定的参考价值。

Stm32基础

 

初始化gpio函数

作用:初始化一个或者多个io口(同一组)的工作方式和速度
该函数主要是操作GPIO CRL(CRH)寄存器,在上拉或者下拉的时候有设置BSRR或者BRR寄存器

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

注意:外设(包括GPIO)在使用之前,几乎都要先使能对应的时钟

 

参数

第一个参数:

技术图片
GPIOA
GPIOB
GPIOC
GPIOD
GPIOE
GPIOF
GPIOG
可选参数

 

第二个参数为一个结构体,三个变量成员

技术图片

GPIO_Pin

技术图片
GPIO_Pin_0
GPIO_Pin_1
GPIO_Pin_2
GPIO_Pin_3
GPIO_Pin_4
GPIO_Pin_5
GPIO_Pin_6
GPIO_Pin_7
GPIO_Pin_8
GPIO_Pin_9
GPIO_Pin_10
GPIO_Pin_11
GPIO_Pin_12
GPIO_Pin_13
GPIO_Pin_14
GPIO_Pin_15
可选参数

GPIO_Speed

技术图片
GPIO_Speed_10MHz = 1,
GPIO_Speed_2MHz, 
GPIO_Speed_50MHz
可选参数

GPIO_Mode

技术图片
GPIO_Mode_AIN = 0x0,//模拟输入
GPIO_Mode_IN_FLOATING = 0x04,//浮空输入
GPIO_Mode_IPD = 0x28,//下拉输入
GPIO_Mode_IPU = 0x48,//上拉输入
GPIO_Mode_Out_OD = 0x14,//开漏输出
GPIO_Mode_Out_PP = 0x10,//通用推挽输出
GPIO_Mode_AF_OD = 0x1C,//复用开漏输出
GPIO_Mode_AF_PP = 0x18//复用推挽
可选参数

 

 示例

技术图片

 

 

读取输入电平函数

作用:读取某个GPIO的输入电平

实际操作的是GPIOx_IDR寄存器

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 

示例

技术图片

 

 

作用:读取某组GPIO的输入电平

实际操作的是GPIOx_IDR寄存器

uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx); 

示例

 技术图片

 

 

 

读取输出电平函数

作用:读取某个GPIO的输出电平

实际操作的是GPIO_ODR寄存器

uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

示例 

技术图片

 

作用:读取某组GPIO的输出电平

实际操作的是GPIO_ODR寄存器

uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

示例

技术图片

 

 

设置输出电平函数

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);

技术图片

跑马灯实验

led.h

技术图片
#ifndef __LED_H
#define __LED_H
void LED_Init(void);
   
#endif
代码

led.c

技术图片
#include "led.h"
#include "stm32f10x.h"
//在任何地方都要引用头文件stm32f10x.h,使用固件库必须要用到的头文件
void LED_Init(void){
    GPIO_InitTypeDef GPIO_InitStruct;//
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能gpioB的时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);//使能gpioA的时钟
    
    
    //初始化gpio
    GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
    GPIO_InitStruct.GPIO_Pin=GPIO_Pin_5;
    GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOB,&GPIO_InitStruct);//&取地址
    GPIO_SetBits(GPIOB,GPIO_Pin_5);//设置io输出低电平
    
    //初始化gpio
    GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
    GPIO_InitStruct.GPIO_Pin=GPIO_Pin_5;
    GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOE,&GPIO_InitStruct);//&取地址
    GPIO_SetBits(GPIOE,GPIO_Pin_5);//设置io口输出低电平
    
}
代码

main.c

技术图片
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"

int main(void){

//初始延时
delay_init();
LED_Init();
    
    while(1)
    {
    GPIO_SetBits(GPIOB,GPIO_Pin_5);
    GPIO_SetBits(GPIOE,GPIO_Pin_5);
    delay_ms(500);
        
    GPIO_ResetBits(GPIOB,GPIO_Pin_5);
    GPIO_ResetBits(GPIOE,GPIO_Pin_5);
    delay_ms(500);
    }

}
代码

 

  

以上是关于Stm32基础的主要内容,如果未能解决你的问题,请参考以下文章

7-STM32物联网开发WIFI+GPRS基础篇(STM32+Wi-Fi(AT指令)实现MQTT远程通信控制)

STM32代码的启动过程

STM32基础

STM32开发STM32F103 功能应用 —— NTC 温度采集

ARM汇编基础基于Keil创建STM32汇编程序的编写

STM32CUBUMX+LED