欢迎访问电子工程网!   登录 | 免费注册 ]   

zsz89757的个人空间 http://www.eechina.com/space-uid-25332.html [收藏] [复制] [分享] [RSS]

博客

STM32 IO口常用操作及实例

已有 2887 次阅读2011-1-9 21:06 |个人分类:STM IO

注意:PA13.14.15  PB3.4JTAG口:要用时要先关了JTAG

 

#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时可以直接和期间连接

 


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

回顶部