码迷,mamicode.com
首页 > 其他好文 > 详细

Stm32基础

时间:2019-03-26 13:39:26      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:http   ini   cloc   ext   mamicode   enable   center   延时   ble   

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基础

标签:http   ini   cloc   ext   mamicode   enable   center   延时   ble   

原文地址:https://www.cnblogs.com/-wenli/p/10599293.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!