由于CPU只能进行运算,功能实现部分需要各个模块之间的配合,例如:GPIO TIM I2C等等。
1.GPIO工作模式(8种)
1.1输出(4种)
1.1.1输出模式
通用推挽式输出
“推”与P-MOS相关,将其抽象为一个开关,当外部引脚与P-MOS相接通时, Vdd为高电平,电流由Vdd流向引脚,此为“推”。
“挽”与N-MOS相关,当外部引脚与N-MOS相接通时,Vss为低电平,电流由 引脚流向Vss,即为“挽”。
输入 0 时引脚部分为低电压;输入 1 时引脚部分为高电压
注:推挽 交替导通工作,不可同时导通。
通用开漏式输出
开漏,即漏极开路,具体为P-MOS保持断开,N-MOS漏极为开路;当数据寄 存器输入 0 时,引脚部分为低电平;输入为 1 时,引脚部分为高阻态
复用推挽式输出
复用开漏式输出
1.1.2I/O最大输出速度
向I/O交替写入0/1不失真的最大速度
1.2输入(4种)
上拉输入
下拉输入
浮空输入
模拟模式(多用于ADC)
I/O端口的基本结构
2.如何在工程中使用
简单的调用程序
#include "stm32f10x.h" int main(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitTypeDef GPIO_SYH={0}; GPIO_SYH.GPIO_Pin=GPIO_Pin_0; GPIO_SYH.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_SYH.GPIO_Speed=GPIO_Speed_2MHz; GPIO_Init(GPIOA,&GPIO_SYH); GPIO_SYH.GPIO_Pin=GPIO_Pin_1; GPIO_SYH.GPIO_Mode=GPIO_Mode_IPU; GPIO_Init(GPIOA,&GPIO_SYH); // GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET); while(1) { if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==Bit_RESET) { GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET); } else { GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET); } } }通过读取PA1的电平状态,使用循环函数点亮、熄灭PA0控制的LED
实现功能:当按钮按下时,LED亮起,松手时LED熄灭
实验电路原理图
实验接线图