stm32 day2:

一个技巧:使用函数时,若不清楚参数,可以先编译,然后“go to 。。。definition”找到它在头文件里面的位置,里面就会有详细的参数说明了
以下相关内容还要配合新建工程模板–基于寄存器这一章节来看

推挽输出可以输出强高低电平,连接数字器件

一、首先,

操作IO口必须引入源文件和头文件
源文件:stm32f10x_gpio.c
头文件:stm32f10x_gpio.h

CPIO库 重要函数:

1个初始化函数:

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
初始化一个或者多个IO口(同一组)的工作方式和速度。该函数主要是操作GPIO_CRL(CRH)寄存器,在上拉或者下拉的时候有设置BSRR或者BRR寄存器

首先,GPIO_InitTypeDef* GPIO_InitStruct的定义如下:

 typedef struct
   {
    uint16_t GPIO_Pin;            //指定要初始化的IO口
             
    GPIOSpeed_TypeDef GPIO_Speed; //设置IO口输出速度
    
    GPIOMode_TypeDef GPIO_Mode;   //设置工作模式:8种中的一个
   }GPIO_InitTypeDef;

使用示例:

 GPIO_InitTypeDef  GPIO_InitStructure;
	
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; 			//LED0-->PB.5 端口配置
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 	//IO口速度为50MHz
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  	//推挽输出
 
 GPIO_Init(GPIOB, &GPIO_InitStructure);	 			//根据设定参数初始化GPIOB.5

其中,
GPIO_PIN_x 中的 IO口x 预定义的有0~15和ALL。GPIOx对应的是Px端口
GPIO_SPEED_x 中的 速度x 预定义有10、20、50MHz
GPIO_Mode_x 中的 模式x 预定义有8种:
AIN:模拟输入 0x00
IN_FLOATING:浮空输入 0x04
IPD:下拉 0x28
IPU:上拉 0x48
OUT_OD: 0x14
OUT_PP:推挽输出 0x10
AF_OD: 0x1C
AF_PP: 0x18


2个读取输入电平函数:

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);

例如:

  GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5);//读取GPIOA.5的输入电平

2个读取输出电平函数:

uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);


4个设置输出电平函数:(重点:SetBits,ResetBits)

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
(操作BSRR寄存器,16位)
作用:设置某个IO口输出为高电平(1)。实际操作BSRR寄存器

void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
(操作BRR寄存器,16位)
作用:设置某个IO口输出为低电平(0)。实际操作的BRR寄存器。

void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

二、使用

使用之前要先使能(enable,允许)时钟

调用函数RCC_APB2PeriphColckCmd(RCC_APB2Periph_x);
mini板初始化的是PA5和PD2端口的时钟

如果想要一个一个功能函数地去用,那就应该这样(类似于C)
例如:想要建立一个初始化LED的函数LED_Init(),让他可以直接在main函数里面使用

首先应该建立一个头文件led.h
led.h

#ifndef __LED_H
#define __LED_H			//这两个和C的宏定义同理,
						//__LED_H这个名字随便改都行,不一定要和文件名字一样
void LED_Init(void);	//要自定义的函数

#endif

led.c

#include "led.h"
#include "stm32f10x.h"

void LED_Init(void){
//这里写函数的具体内容
}

主函数main.c

#include "stm32f10x.h"
#include "led.h"

int main(void){
//主函数其他内容
LED_Init();
//主函数其他内容
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值