1.每个GPI/O端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器 (GPIOx_IDR和GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存 器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。
2.GPIO口工作模式:
(1)上拉输入:增加高电平的驱动能力;
(2)下拉输入:增加低电平的驱动能力;
(3)模拟输入:检测模拟电压,数据传给ADC做转换(ADC:12位/8位/16位。103用的是12位的);
(4)浮空输入:不具备高低电平驱动能力,直接输入的电压进行转换;
(6)开漏输出:只能输出低电平,输出为1时是高阻态(未知状态,电路上电压由电路来决定);经常应用在总线,需要增加上拉电阻配合使用;具有读取的功能;
(7)复用:把IO用做复用其他外设功能时选择复用模式;
3.TTL肖特基触发器:把高低电平电压值转换位逻辑值
4、寄存器:片上外设存储相应配置数据/状态数据/数据值等的空间
GPIO寄存器:
5.软件编程驱动:(点亮LED1)
(1)提供时钟:RCC APB2外设时钟使能寄存器
(2)配置IO功能(0011)
RCC->APB2ENR |=(0x01<<3);//时钟
GPIOB->CRL &=~(0x0F<<4);
GPIOB->CRL |=(0x03<<4);
代码:
*************led.h*****************************************************
#ifndef LED_H
#define LED_H
#include "stm32f10x.h"
void led1_Config(void);
void led1(uint8_t flag);
#endif
*************led.c************************************************************
#include "led.h"
void led1_Config(void)
{
//1、开时钟
RCC->APB2ENR |=(0x01<<6);//打开时钟
//2、进行配置 0011
GPIOE->CRL &= ~(0xf<<8);//清零 xxxx 0000 xxxx xxxx
GPIOE->CRL |= (0x3<<8);//置1 xxxx 0011 xxxx xxxx
}
void led1(uint8_t flag)
{
if(flag == 1)//开灯
GPIOE->ODR &= ~(0x1<<2);
else if(flag == 0)//关灯
GPIOE->ODR |= (0x1<<2);//置1
}
*********main.c*******************************************
#include"led.h"
int main(void)
{
led1_Config();
led1(1);//开灯
//led1(0);//关灯
while(1)
{
;
}
}