一名物联网创业者的创业笔记-2-打造瑞士军刀-STM32开发调试代码

本项目中采用了STM32F103RCT6,因此,在PCB完成制作之前,有必要把STM32F103RCT6的驱动代码捋一遍,以便后续开发时,不需要在驱动上,太过耗费时间。所以这些驱动工程,就类似于一把把瑞士军刀,可以非常方便地实现各类需要实现的功能。

从箱子中找出来以前使用的开发板。选择这一款开发板的主要原因是,这个开发板和项目的板子上,用了同款MCU。

下面,将MCU上门的主要驱动捋一遍,以便在项目开发上复用。这里代码多源自于开发板,在此仅做梳理,以便后续项目回溯时,汲取一些经验。

延时

延时初始化仅仅需要2行代码,这里定义了fac_us。其中STM32采用8M时钟,系统默认倍频为9倍,因此系统默认时钟为72MHz, 经过Div8, 也就是8分频后,SysTick为9MHz; SystemCoreClock为

fac_us = 9000000/8000000, 为1.125

void delay_init()
{
	SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);	//HCLK/8
	fac_us=SystemCoreClock/8000000;				//SYSTEMCLOCK/8
    fac_ms=(u16)fac_us*1000;					//ms延时时间     
}		

us延时

通过SysTick实现us延时

void delay_us(u32 nus)
{		
	u32 temp;	    	 
	SysTick->LOAD=nus*fac_us; 					//设置SysTick.LOAD为初始值  		 
	SysTick->VAL=0x00;        					//VAL清零
	SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;	//CTRL设置,开始倒计时  
	do
	{
		temp=SysTick->CTRL;
	}while((temp&0x01)&&!(temp&(1<<16)));		//等待时间到达
	SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;	//关闭计数器
	SysTick->VAL =0X00;      					 //清空计数器	 
}

ms延时

void delay_ms(u16 nms)
{	 		  	  
	u32 temp;		   
	SysTick->LOAD=(u32)nms*fac_ms;				//加载延时时间,单位ms
	SysTick->VAL =0x00;							//清空计数器
	SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;	//开始计时
	do
	{
		temp=SysTick->CTRL;
	}while((temp&0x01)&&!(temp&(1<<16)));		//计时时间到  
	SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;	//停止计时
	SysTick->VAL =0X00;       					//清空计数器  
} 

GPIO操作

void GPIO_Init(void)
{
 
 GPIO_InitTypeDef  GPIO_InitStructure;
 	
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE);	 //初始化GPIO对应时钟
	
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;				 //GPIO初始化:pin
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //GPIO初始化:Mode
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //GPIO初始化:Speed
 GPIO_Init(GPIOA, &GPIO_InitStructure);					 //GPIO初始化;
 GPIO_SetBits(GPIOA,GPIO_Pin_8);						 //SetBits

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;	    		 //Pin
 GPIO_Init(GPIOD, &GPIO_InitStructure);	  				 //初始化
 GPIO_SetBits(GPIOD,GPIO_Pin_2); 						 //SetBits
}

猜你喜欢

转载自blog.csdn.net/book_drabit/article/details/83821676