原创 IO口常用操作

2009-11-24 16:27 4403 6 6 分类: MCU/ 嵌入式

       注意:PA13.14.15  PB3.4JTAG口:要用时要先关了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=0PA1口写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位外部中断第八线路


                                                                                                                       //注意要先把相应的口设为输出


注意:JRAG5个口当普通口用时要先禁止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时可以直接和期间连接


 
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条