1. 程式人生 > >一名物聯網創業者的創業筆記-2-打造瑞士軍刀-STM32開發除錯程式碼

一名物聯網創業者的創業筆記-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
}