前言
平时开发STM32的时候,经常涉及到初始化引脚,便编写了一个快速初始化引脚函数,可分别在F1、F4使用,建议放在sys.c中
硬件准备
STM32开发平台
程序设计
对于STM32F1平台:
//以下宏定义等内容放在sys.h
#define PA RCC_APB2Periph_GPIOA
#define PB RCC_APB2Periph_GPIOB
#define PC RCC_APB2Periph_GPIOC
#define PD RCC_APB2Periph_GPIOD
#define PE RCC_APB2Periph_GPIOE
#define PF RCC_APB2Periph_GPIOF
#define PG RCC_APB2Periph_GPIOG
#define PP 0x10
#define IPD 0x28
#define IPU 0x48
void FAST_INIT(u32 port,u8 pin,u8 mode);
//以下内容放在sys.c
void FAST_INIT(u32 port,u8 pin,u8 mode)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(port, ENABLE); //使能端口时钟
GPIO_InitStructure.GPIO_Pin = 1< GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; switch(port) { case PA:GPIO_Init(GPIOA, &GPIO_InitStructure);break; case PB:GPIO_Init(GPIOB, &GPIO_InitStructure);break; case PC:GPIO_Init(GPIOC, &GPIO_InitStructure);break; case PD:GPIO_Init(GPIOD, &GPIO_InitStructure);break; case PE:GPIO_Init(GPIOE, &GPIO_InitStructure);break; case PF:GPIO_Init(GPIOF, &GPIO_InitStructure);break; case PG:GPIO_Init(GPIOG, &GPIO_InitStructure);break; } } F1使用举例: 比如初始化LED: #include "led.h" void LED_Init(void) { FAST_INIT(PB,5,PP); FAST_INIT(PE,5,PP); PBout(5)=1; PEout(5)=1; } 比如初始化key: #include "stm32f10x.h" #include "key.h" //按键初始化函数 void KEY_Init(void) //IO初始化 { FAST_INIT(PE,3,IPU); FAST_INIT(PE,4,IPU); FAST_INIT(PA,0,IPD); } 对于STM32F4平台: //以下宏定义等内容放在sys.h #define PA RCC_AHB1Periph_GPIOA #define PB RCC_AHB1Periph_GPIOB #define PC RCC_AHB1Periph_GPIOC #define PD RCC_AHB1Periph_GPIOD #define PE RCC_AHB1Periph_GPIOE #define PF RCC_AHB1Periph_GPIOF #define PG RCC_AHB1Periph_GPIOG #define PP 0x10 #define IPD 0x28 #define IPU 0x48 #define NP 0x00 void FAST_INIT(u32 port,u8 pin,u8 mode); //以下内容放在sys.c void FAST_INIT(u32 port,u8 pin,u8 mode) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(port, ENABLE); GPIO_InitStructure.GPIO_Pin = 1< { case PP: { GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式 GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出 }break; case IPU: { GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通输入模式 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉 }break; case IPD: { GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通输入模式 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;//上拉 }break; case NP: { GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通输入模式 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; }break; } switch(port) { case PA:GPIO_Init(GPIOA, &GPIO_InitStructure);break; case PB:GPIO_Init(GPIOB, &GPIO_InitStructure);break; case PC:GPIO_Init(GPIOC, &GPIO_InitStructure);break; case PD:GPIO_Init(GPIOD, &GPIO_InitStructure);break; case PE:GPIO_Init(GPIOE, &GPIO_InitStructure);break; case PF:GPIO_Init(GPIOF, &GPIO_InitStructure);break; case PG:GPIO_Init(GPIOG, &GPIO_InitStructure);break; } } F4使用举例: 比如初始化LED: #include "led.h" void LED_Init(void) { FAST_INIT(PB,5,PP); FAST_INIT(PE,5,PP); PBout(5)=1; PEout(5)=1; } 比如初始化key: #include "stm32f10x.h" #include "key.h" //按键初始化函数 void KEY_Init(void) //IO初始化 { FAST_INIT(PE,3,IPU); FAST_INIT(PE,4,IPU); FAST_INIT(PA,0,IPD); } 总结 虽然程序用case实现的手法并不高端,但是,,,好用啊!并且很大的一个优点是,初始化经过如此二次封装后,大大增加了程序的可移植性。就比如上述两个平台中,大家可以发现LED、KEY的初始化代码一致。
上一篇:STM32F103_GPIO输入输出快速初始化
下一篇:STM32库函数之GPIO初始化代码分析
推荐阅读
史海拾趣
现在想做个MULTI-bin 一步一步的来,先来实现BINFS,但是查来一些资料,看了ms的帮助文档,还是一头雾水。 现在我的板子上是自己写的usbboot。看很多资料都是说什么EBOOT,问下,有是不是要实现BINFS必须要eboot? 有没有哪为大虾不是在 ...… 查看全部问答∨ |
|
可以烧写2812 支持类型可以参考CCS\\\\plugins\\\\Flash28xx\\\\Algorithms\\\\的文件… 查看全部问答∨ |
使用430也有一段时间了,但是关于430的烧熔丝、BSL功能和从JTAG口都flash内容一直没时间接触过,请问大家几个问题: 1. msp430烧熔丝有几种方法?要使用那些对应的工具? 2. 在熔丝不坏的情况下,有几种读flash的方法?BSL功能怎么玩? 3. 现在4 ...… 查看全部问答∨ |
代码如下 voidGPIOPinWrite(unsigned long ulPort, unsigned char ucPins, unsigned char ucVal){ // // Check the arguments. // ASSERT(GPIOBaseValid(ulPort ...… 查看全部问答∨ |
其实包裹打开那天我就装好了,但没装电池,今天有点时间打开把电池装上,又扫了下二维码,装了个TI的手机端软件. 我的经验是电池装上复位一下,就别再动复位啦. 以下是图片 可见温度24湿度56… 查看全部问答∨ |