历史上的今天
今天是:2024年09月03日(星期二)
2019年09月03日 | STM32快速初始化引脚 一行代码完成引脚初始化
2019-09-03 来源:eefocus
前言
平时开发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的初始化代码一致。
史海拾趣
|
下面是程序: #include \"..\\config.h\" #define LED (1ul << 2)#define LED_INIT() GPIO2DIR |= LED &nb ...… 查看全部问答> |
|
最近要做一个基于Context-M3的无操作系统的项目,其中有一部分功能是要实现软件的在线更新。 我第一次做这方面的功能,没有什么经验,特来请教。 现在通信协议方面已经没有问题了,现在所面对的问题是: 如何将2进制文件写到Flash相应的地址上。 ...… 查看全部问答> |
|
在做PDA应用程序时碰到: D:\\WebService2\\WebService2\\TestWebService\\Form1.cs(26,13): 错误 CS0012: 类型“System.Web.Services.WebService”在未被引用的程序集中定义。必须添加对程序集“System.Web.Services, Version=2.0.0.0, Culture=n ...… 查看全部问答> |
|
BOOL CScanDlg::OnInitDialog() {CDialog::OnInitDialog(); GetDlgItem(IDC_EDIT1)->SetFocus(); } 请问代码有问题吗? 为什么 edit1 就是在运行后得不到焦点呢? 请问有什么办法才能使他得到焦点。… 查看全部问答> |
|
用VHDL语言编写出租车计费器程序 要求:按行驶里程收费。起步价8.00元(含3公里),5公里以内按1.80元/公里,5公里以后按2.20元/公里,5公里以内每0.5公里加价0.9元,5公里以后每0.5公里加价1.1元。车停止每3分钟算0.5公里。 希望高手帮忙!!! ...… 查看全部问答> |
|
原来是用的 62256 28-DIP 本以为可以直接用62512和628128替换了,结果发现管脚不同:( 最好是128K x 8 28-DIP Static RAM管脚要和62256 的一样哦。附上62256的管脚图 找了很久了,有了解的朋友麻烦给说一下 那个型 ...… 查看全部问答> |
|
$(\'swf_dTD\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', encodeURI(\'http://player.youku.com/player.php/sid/XM ...… 查看全部问答> |




