stm32学习记录,GPIO输出
7月5日
1.1;学习了GPIO的四种输出模式:通用输出推挽,通用输出开漏,复用输出推挽,复用输出开漏
通用:单片机的cpu直接控制GPIO外设,输出高低电平
复用:cpu通过其他外设间接控制GPIO外设,输出高低电平
推挽:推是指向外输出电流,挽是指外面向内输入电流。工作时N-MOS,和P-MOS交替接通,N接通,P断开,则说明寄存器输出0,引脚输出低电平。P接通,N断开,则说明寄存器输出1,引脚输出高电平。
开漏:N-MOS的漏极一直处于短路状态,即P-MOS一直断开,此时,寄存器输出0,引脚输出低电平,寄存器输出1,引脚悬空,呈现高阻抗状态。
1.2:IO的最大输出速度
IO的最大输出速度:向IO写入0,1,且不失真的最大速度
上升时间:IO口从低电平上升到高电平所需要的时间
下降时间:IO口从高电平下降到低电平所需要的时间
保持时间:IO口在高电平保持的时间
限制最大速度的因素:上升时间和下降时间的长短

1.3LED闪灯实验
有两种接法,推挽,开漏
此次实验是开漏
代码如下
#include "stm32f10x.h"
#include "delay.h"
int main(void)
{
//开启GPIOC接口
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
//初始化IO引脚,PC13通用输出开漏模式,最大输出速度是2MHZ
GPIO_InitTypeDef GPIO_InitStruct={0};
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_13;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_OD;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_2MHz;
GPIO_Init(GPIOC,&(GPIO_InitStruct));
while(1)
{
GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_RESET);//写0,亮
Delay(1000);//延迟100ms
GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_SET);//写1,灭
Delay(1000);
}
}
1.4GPIO4种输入模式
输入上拉:上拉电阻闭合
输入下拉:下拉电阻闭合
输入浮空:上拉,下拉电阻都闭合

1.5按钮实验

代码如下
#include "stm32f10x.h"
#include "delay.h"
int main(void)
{
//开启GPIOC接口
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
//初始化IO引脚,PC13通用输出开漏模式,最大输出速度是2MHZ
GPIO_InitTypeDef GPIO_InitStruct={0};
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_2MHz;
GPIO_Init(GPIOA,&(GPIO_InitStruct));
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_1;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;
GPIO_Init(GPIOA,&(GPIO_InitStruct));
//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);
}
}
}
更多推荐


所有评论(0)