STM32单片机初学者编程之常用小程序--GPIO配置&延时函数

声明:本专题系列的博文主要是用于个人学习以及后续查阅调用,由于是这方面的初学者,所以写的比较浅陋,有喜欢的朋友可以一起学习,编程大神们请略过。。。。。。

1、以一个GPIO的初始化程序为例,以下是GPIO的配置:

void GPIO_Init() //端口初始化
{
GPIO_InitTypeDef GPIO_InitStructure;
//声明一个结构体变量,用来初始化GPIO

SystemInit();	//首先进行GPIO模块的时钟初始化
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
 //因为使用的GPIOC端口,所以使能GPIOC端口的时钟
 
/*  配置GPIO的模式和IO口*/
GPIO_InitStructure.GPIO_Pin=LED; 
 //选择你要设置的IO口,这里以一个LED接口为例;这里的“LED”实际上是一个宏定义,在相应头文件中已申明所代表的含义,目的主要是便于后续修改、调整
 
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;	 
//设置推挽输出模式,这里的GPIO模式共有八种,分别是:
GPIO_Mode_AIN模拟输入,GPIO_Mode_IN_FLOATING浮空输入,
GPIO_Mode_IPD下拉输入,GPIO_Mode_IPU上拉输入,
GPIO_Mode_Out_OD开漏输出,GPIO_Mode_Out_PP推挽输出,
GPIO_Mode_AF_OD复用开漏输出,GPIO_Mode_AF_PP复用推挽输出

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;	  
//设置传输速率

GPIO_Init(GPIOC,&GPIO_InitStructure); 
//初始化该IO口所在的GPIO组,并指向该GPIO结构的指针

}

2、延时函数
以下延时函数是常用的一个通过占用CPU来达到延时效果的函数,延时不准确,但对于日常开发,多用于此。

void delay(u32 i)
{
while(i–);
}

函数比较简单,只需要在相应的功能模块的“.C”文件中写好,即可直接调用,如:delay(6000000);//延时约为1s

3、系统定时器延时函数
该函数可精确定时,在一些延时要求精度较高的场合应用。

微秒延时函数:
void delay_us(u32 i)
{
u32 temp;
SysTick->LOAD=9i;
//设置重装数值,72MHz时;这里之所以“9
i”,是因为系统时钟在这里经过了8分频,这里是9MHz,即换算为时间就是约为1us,所以后续想要延时多少us,就直接给“i”赋值

SysTick->CTRL=0X01;	//CTRL是该定时器的控制和状态寄存器,需要先使能,即就是将该寄存器最低位置1使能
	
SysTick->VAL=0;	   //VAL是当前值寄存器,需要先清零计数器
do
{
	temp=SysTick->CTRL;		   //读取当前倒计数值
}
while((temp&0x01)&&(!(temp&(1<<16))));	 //等待时间到达,若当前值计数减到0的时候,CTRL寄存器的第16位(标志位)则会置1,此时则跳出循环,该次延时完毕

SysTick->CTRL=0;	//关闭计数器
SysTick->VAL=0;		//清空计数器

}

毫秒延时函数:
void delay_ms(u32 i)
{
u32 temp;
SysTick->LOAD=9000*i;
//设置重装数值,72MHz时;

SysTick->CTRL=0X01;	//使能,减到0是无动作,采用外部时钟源
	
SysTick->VAL=0;	   //清零计数器
do
{
	temp=SysTick->CTRL;		   //读取当前倒计数值
}
while((temp&0x01)&&(!(temp&(1<<16))));	 //等待时间到达
SysTick->CTRL=0;	//关闭计数器
SysTick->VAL=0;		//清空计数器

}

同样调用的时候比较简单,直接:
delay_ms(1000); //精确延时1s

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流年過客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值