OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2605|回复: 2

分享个人使用STM32F103管脚配置代码

[复制链接]

17

主题

587

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4467
金钱
4467
注册时间
2013-6-27
在线时间
565 小时
发表于 2017-1-12 08:48:00 | 显示全部楼层 |阅读模式
本帖最后由 DongInker 于 2017-1-12 08:59 编辑

主要用于普通管脚输入输出配置,包含是否初始化管脚(GpioEn),如是输出管脚初始化的电平状态(UpPowVal)。

[mw_shl_code=applescript,true]#define GPIO_ClrBits(m,n) GPIO_ResetBits(m,n)
typedef struct
{
UInt16            GpioFlag;
UInt16            GpioEn;
UInt16            UpPowVal;
GPIO_TypeDef     *GPIO_PRT;
GPIO_InitTypeDef  GPIO_INIT;
}tGPIO_CFG;

enum{
PIN_KEY1,
PIN_KEY2,
PIN_BEEP,
PIN_LAMP,
PIN_315,
PIN_OUT,
};

tGPIO_CFG GpioCfgTable[]={
{PIN_KEY1      ,1  , 0,GPIOA ,GPIO_Pin_0  ,GPIO_Speed_50MHz ,GPIO_Mode_IN_FLOATING},
{PIN_KEY2      ,1  , 0,GPIOA ,GPIO_Pin_1  ,GPIO_Speed_50MHz ,GPIO_Mode_IN_FLOATING},
{PIN_BEEP      ,1  , 0,GPIOA ,GPIO_Pin_13 ,GPIO_Speed_50MHz ,GPIO_Mode_Out_OD     },//神州1号开发板管脚
{PIN_LAMP      ,1  , 0,GPIOB ,GPIO_Pin_2  ,GPIO_Speed_50MHz ,GPIO_Mode_Out_PP         },
{PIN_315       ,1  , 0,GPIOB ,GPIO_Pin_4  ,GPIO_Speed_50MHz ,GPIO_Mode_IN_FLOATING},
{PIN_OUT       ,1  , 0,GPIOA ,GPIO_Pin_7  ,GPIO_Speed_50MHz ,GPIO_Mode_Out_PP            },

{0               ,0  , 0,0     ,0           ,GPIO_Speed_50MHz ,GPIO_Mode_IN_FLOATING}};


static void GpioInit(void)
{        
        int i;
        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
        
#ifdef MCU_STM32F103VE
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
#endif

        AFIO->MAPR = (0x00FFFFFF & AFIO->MAPR)|0x04000000;//关闭JTAG

        for(i=0;GpioCfgTable.GPIO_PRT;i++)
                {
                if(GpioCfgTable.GpioEn)
                        {
                        if((GpioCfgTable.GPIO_INIT.GPIO_Mode == GPIO_Mode_Out_OD) || (GpioCfgTable.GPIO_INIT.GPIO_Mode == GPIO_Mode_Out_PP))
                                {
                                if(GpioCfgTable.UpPowVal)
                                        GPIO_SetBits(GpioCfgTable.GPIO_PRT,GpioCfgTable.GPIO_INIT.GPIO_Pin);
                                else
                                        GPIO_ClrBits(GpioCfgTable.GPIO_PRT,GpioCfgTable.GPIO_INIT.GPIO_Pin);
                                }
                        GPIO_Init(GpioCfgTable.GPIO_PRT, &GpioCfgTable.GPIO_INIT);
                        }
                }
}

/* InPort */
GLOBAL int GetKey1(void)
{
        if(GpioCfgTable[PIN_KEY1].GpioEn)
                {
                if(GPIO_ReadInputDataBit(GpioCfgTable[PIN_KEY1].GPIO_PRT,GpioCfgTable[PIN_KEY1].GPIO_INIT.GPIO_Pin) == 0)        
                  return 1;
                }
        return 0;
}

GLOBAL int GetKey2(void)
{
        if(GpioCfgTable[PIN_KEY2].GpioEn)
                {
                if(GPIO_ReadInputDataBit(GpioCfgTable[PIN_KEY2].GPIO_PRT,GpioCfgTable[PIN_KEY2].GPIO_INIT.GPIO_Pin) == 0)        
                  return 1;
                }
        return 0;
}

/* Out Port*/
GLOBAL void SetBeepIO(int val)
{
        if(GpioCfgTable[PIN_BEEP].GpioEn)
                {
                if(val)
                        GPIO_ClrBits(GpioCfgTable[PIN_BEEP].GPIO_PRT,GpioCfgTable[PIN_BEEP].GPIO_INIT.GPIO_Pin);
                else
                        GPIO_SetBits(GpioCfgTable[PIN_BEEP].GPIO_PRT,GpioCfgTable[PIN_BEEP].GPIO_INIT.GPIO_Pin);
                }
}

GLOBAL void SetLampIO(int val)
{
        if(GpioCfgTable[PIN_LAMP].GpioEn)
                {
                if(val)
                        GPIO_ClrBits(GpioCfgTable[PIN_LAMP].GPIO_PRT,GpioCfgTable[PIN_LAMP].GPIO_INIT.GPIO_Pin);
                else
                        GPIO_SetBits(GpioCfgTable[PIN_LAMP].GPIO_PRT,GpioCfgTable[PIN_LAMP].GPIO_INIT.GPIO_Pin);
                }
}[/mw_shl_code]



让我们的思维驾驭在电的速度之上!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

15

主题

866

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7542
金钱
7542
注册时间
2016-11-30
在线时间
642 小时
发表于 2017-1-12 08:53:33 | 显示全部楼层
回复 支持 反对

使用道具 举报

JL810 该用户已被删除
发表于 2017-1-12 13:43:52 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-30 11:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表