注意:PA13.14.15 PB3.4为JTAG口:要用时要先关了JTAG<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
#include "STM32f10x_LIB.H"//把库包含进去
GPIO_InitTypeDef GPIO_InitStructure; //GPIO初始化结构体
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);//失能JTAG+SW+DP
端口的位初始化:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能GPIOA时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; //选择引脚0,1 (选择相应的管脚)
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出频率最大50M(设置输出的频率)
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //带上拉输出 (设置为何种输出或何种输入)
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA0,1引脚
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//使能GPIOA时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //选择引脚3
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮点输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输入频率最大50M
GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化PB3引脚
整个端口的初始化:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能GPIOA时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; //选择A口的所以管脚 (选择相应的管脚)
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出频率最大50M(设置输出的频率)
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //带上拉输出 (设置为何种输出或何种输入)
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA口
端口的位操作:
GPIO_SetBits(GPIOA, GPIO_Pin_1);//PA1=1 给PA1口写1
GPIO_ResetBits(GPIOA, GPIO_Pin_1);//PA1=0给PA1口写0
a=GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)//读PA1口的值赋给a
端口操作:
GPIO_Write(GPIOA, 0x0001);//给PA口写值;
a = GPIO_ReadInputData(GPIOA); //读PA口的值赋给a
设置为外部中断的输入
GPIO_EXTILineConfig(GPIO_PortSource_GPIOB, GPIO_PinSource8);//PB8位外部中断第八线路
//注意要先把相应的口设为输出
注意:当JRAG的5个口当普通口用时要先禁止JTAG
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB , ENABLE); //要先打开相应的时钟才可以失能JTAG+SW+DP
GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);//失能JTAG+SW+DP
例子1(有键盘检测的)
#include "STM32f10x_LIB.H"//把库包含进去
GPIO_InitTypeDef GPIO_InitStructure; //GPIO初始化结构体
void delay(vu32 z) //延时函数
{
vu32 x,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);
}
int main(void)
{
unsigned char a="0";
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能GPIOA时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; //选择引脚0,1 (选择相应的管脚)
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出频率最大50M(设置输出的频率)
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //带上拉输出 (设置为何种输出或何种输入)
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA0,1引脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //选择引脚3
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ; //上拉输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输入频率最大50M
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA3引脚
while(1)
{
if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3))//检测按键按下
{
delay(2000);
if(!GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3))
a+=1;
if(a==2)
a=0;
}
if(a==1)
{
GPIO_SetBits(GPIOA, GPIO_Pin_0);//PA0=1
GPIO_ResetBits(GPIOA, GPIO_Pin_1);//PA1=0
}
if(a==0)
{
GPIO_SetBits(GPIOA, GPIO_Pin_1);//PA1=1
GPIO_ResetBits(GPIOA, GPIO_Pin_0);//PA0=0
}
}
}
例子2
#include "STM32f10x_LIB.H"//把库包含进去
GPIO_InitTypeDef GPIO_InitStructure; //GPIO初始化结构体
void Delay(vu32 z) //延时函数
{
vu32 x,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);
}
int main(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能GPIOA时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; //选择引脚0,1 (选择相应的管脚)
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出频率最大50M(设置输出的频率)
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //带上拉输出 (设置为何种输出或何种输入)
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA0,1引脚
while(1)
{
GPIO_SetBits(GPIOA, GPIO_Pin_0);//PA0=1
GPIO_SetBits(GPIOA, GPIO_Pin_1);//PA1=1
Delay(5000); //延时
GPIO_ResetBits(GPIOA, GPIO_Pin_0);//PA0=0
GPIO_ResetBits(GPIOA, GPIO_Pin_1);//PA1=0
Delay(5000); //延时
}
}
一:
当器件的高电平检测大于3.6V时要用5V加电阻来上拉
1:输出时:用上拉电阻,并设置为开漏输出。
2:做输入时:可以直接连接。
3:做复用时:用开漏复用加上拉.
二:
当器件检测的电平可以小于3.6V时可以直接和期间连接
文章评论(0条评论)
登录后参与讨论