前言
学习记录
一、什么是GPIO
1、GPIO:general purpose input output(通用输入/输出端口),是一款端口拓展器
2、特点:功耗低、封装小、成本低、布线简单
3、GPIO的工作模式:
上拉输入:增加高电平的驱动能力;
下拉输入:增加低电平的驱动能力;
浮空输入:不具备高低电平驱动能力,直接输入的电压进行转换;
模拟输入:检测模拟电压,数据传给ADC做转换;
(TTL肖特基触发器:把高低电平电压值转换为逻辑值)
推挽输出:直接把逻辑值输出成高低电平;
开漏输出:只能输出低电平,输出为1时是高阻态(未知状态,电路上电压由电路来决定);经常应用在总线,需要增加上拉电阻配合使用;具有读取的功能;
复用推挽输出:
通用开漏输出:
二、寄存器写法配置GPIO口
寄存器:
片上外设存储“相应配置数据/状态数据/数据值”的空间
寄存器分类:
配置寄存器:配置工作模式
数据寄存器:保存发送的数据和接收的数据。
状态寄存器:保存当前设备工作状态
GPIO寄存器:(参考手册)
时钟寄存器
STM32中寄存器一般为32位数据,不同的参数存储在不同的数据位下面,可进行位操作进行处理:
清0: GPIOx_CRL &=~(0x0F<<n);
置1: GPIOx_CRL |=(0x3<<n);
判断某一位是0/1: (GPIOx_IDR &(0x01<<n))
三、实现GPIO点灯
代码如下(示例):
#include "stm32f10x.h"
#define LED_TOGGLE {GPIOA ->ODR ^= GPIO_Pin_4;} //这里是让灯的I/O口反转
#define LED13_TOGGLE {GPIOC ->ODR ^= GPIO_Pin_13;} //这里是让灯的I/O口反转
//定义初始化函数,初始化PA0~PA7
void LED_GPIO_Cofing(void)
{
GPIO_InitTypeDef GPIO_InitStruct; //初始化结构体
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Pin =GPIO_Pin_4 ;
GPIO_Init(GPIOA,&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin =GPIO_Pin_13 ;
GPIO_Init(GPIOC,&GPIO_InitStruct);
//初始关灯
GPIO_SetBits(GPIOA, GPIO_Pin_4 );
// GPIO_SetBits(GPIOC, GPIO_Pin_13 );
}
/*
普通延时法:这个比较简单,让单片机做一些无关紧要的工作来打发时间,经常用循环来实现,不过要做的比较精准还是要下一番功夫。*/
void delay(u16 num)
{
u16 i,j;
for(i=0;i<num;i++)
for(j=0;j<0x800;j++);
}
main:
int main(void)
{
while(1)
{
LED_TOGGLE
LED13_TOGGLE
delay(500);
}
}