天天看点

STM32新建模板之寄存器

创建寄存器的项目模板相对比较简单,这里是基于库文件的模板进行更改的,有不明白的小伙伴可以浏览STM32新建模板之库文件。

一、项目文件

  1. 拷贝库文件的工程模板重命名为“stm32f10x_register”
    STM32新建模板之寄存器
  2. 删除STM32F10x_FWLib文件
    STM32新建模板之寄存器
  3. 删除CMSIS中不要的文件,保留startup、core_cm3.h、stm32f10x.h文件
    STM32新建模板之寄存器
  4. 删除USER中不要的文件,保留main.c文件,其余的全部删除,并创建sys.c和sys.h文件
    STM32新建模板之寄存器

二、创建工程项目

  1. 打开Keil软件,创建项目,项目名为STM32F10x_Temp
    STM32新建模板之寄存器
    STM32新建模板之寄存器
    STM32新建模板之寄存器
  2. 添加GROUP,添加两个个GROUP,并改名为startup、USER
    STM32新建模板之寄存器
    STM32新建模板之寄存器
    STM32新建模板之寄存器
  3. 为每个GROUP添加文件
  • startup,将文件startup_stm32f10x_hd.s添加到startup下
    STM32新建模板之寄存器
  • USER,将文件main.c、sys.c文件添加到USER下
    STM32新建模板之寄存器
  • 添加完成后如下图所示:
    STM32新建模板之寄存器
  1. 设置编译文件的输出路径
    STM32新建模板之寄存器
    STM32新建模板之寄存器
    STM32新建模板之寄存器
  2. 设置默认编译版本
    STM32新建模板之寄存器
  3. 设置头文件路径
    STM32新建模板之寄存器

三、程序修改

  1. 修改startup_stm32f10x_hd.s
    STM32新建模板之寄存器
    将图中的内容更改后如下图所示:
    STM32新建模板之寄存器
  2. sys.c文件
#include "stm32f10x.h"

#define uint unsigned int
#define uchar unsigned char

#define CLOCK 72/8 //时钟=72M

/*------------------------------------------------------------
                         us延时函数 
------------------------------------------------------------*/
void delay_us(unsigned int us)
{
	u8 n;		    
	while(us--)for(n=0;n<CLOCK;n++); 	 
}

/*------------------------------------------------------------
                         ms延时函数
------------------------------------------------------------*/
void delay_ms(unsigned int ms)
{
	while(ms--)delay_us(1000);	 
}

/*------------------------------------------------------------
                      把所有时钟寄存器复位
------------------------------------------------------------*/
void RCC_DeInit(void)
{									   
	RCC->APB2RSTR = 0x00000000;//外设复位			 
	RCC->APB1RSTR = 0x00000000;   	  
  	RCC->AHBENR = 0x00000014;  //flash时钟,闪存时钟使能.DMA时钟关闭	  
  	RCC->APB2ENR = 0x00000000; //外设时钟关闭.			   
  	RCC->APB1ENR = 0x00000000;   
	RCC->CR |= 0x00000001;     //使能内部高速时钟HSION	 															 
	RCC->CFGR &= 0xF8FF0000;   //复位SW[1:0],HPRE[3:0],PPRE1[2:0],PPRE2[2:0],ADCPRE[1:0],MCO[2:0]					 
	RCC->CR &= 0xFEF6FFFF;     //复位HSEON,CSSON,PLLON
	RCC->CR &= 0xFFFBFFFF;     //复位HSEBYP	   	  
	RCC->CFGR &= 0xFF80FFFF;   //复位PLLSRC, PLLXTPRE, PLLMUL[3:0] and USBPRE 
	RCC->CIR = 0x00000000;     //关闭所有中断
}


/*------------------------------------------------------------
                  外部8M,则得到72M的系统时钟
------------------------------------------------------------*/	
void Stm32_Clock_Init(void)
{
	unsigned char temp=0;
	u8 timeout=0;
	RCC_DeInit();
	RCC->CR|=0x00010000;  //外部高速时钟使能HSEON

	timeout=0;
	while(!(RCC->CR>>17)&&timeout<200)timeout++;//等待外部时钟就绪	 

	//0-24M 等待0;24-48M 等待1;48-72M等待2;(非常重要!)	   
	FLASH->ACR|=0x32;//FLASH 2个延时周期

	RCC->CFGR|=0X001D2400;//APB1/2=DIV2;AHB=DIV1;PLL=9*CLK;HSE作为PLL时钟源
	RCC->CR|=0x01000000;  //PLLON

	timeout=0;
	while(!(RCC->CR>>25)&&timeout<200)timeout++;//等待PLL锁定

	RCC->CFGR|=0x00000002;//PLL作为系统时钟
	while(temp!=0x02&&timeout<200)     //等待PLL作为系统时钟设置成功
	{   
		temp=RCC->CFGR>>2;
		timeout++;
		temp&=0x03;
	}  
}

           
  1. sys.h文件
#ifndef __SYS_H
#define __SYS_H	   

//us延时函数 
void delay_us(unsigned int us);
//ms延时函数
void delay_ms(unsigned int ms);
//把所有时钟寄存器复位
void RCC_DeInit(void);
//外部8M,则得到72M的系统时钟	
void Stm32_Clock_Init(void);

#endif

           
  1. main.c文件
#include "stm32f10x.h"
#include "sys.h"
	
/*------------------------------------------------------------
                           主函数
------------------------------------------------------------*/
int main()
{
    
	Stm32_Clock_Init();//系统时钟设置
	RCC->APB2ENR |= 0x00000001; //开启afio时钟
        //AFIO->MAPR = (0x00FFFFFF & AFIO->MAPR)|0x04000000;          //关闭JTAG 
				

	RCC->APB2ENR|=0X0000001c;//先使能外设IO PORTa,b,c时钟

	GPIOB->CRH=0X33333333;    //推挽输出
	GPIOB->CRL=0X33333333;    //推挽输出

	while (1)
	{			
		delay_ms(1000);     	 
		GPIOB->ODR=0;	  		 //全部输出0

		delay_ms(1000);
		GPIOB->ODR=0xffffffff;	 //全部输出1 

	  
	}
}

           

四、编译下载

  1. 编译程序
    STM32新建模板之寄存器
  2. 通过isp下载程序
    STM32新建模板之寄存器
  3. 下载完成后,可以看到LED灯会进行闪烁则说明项目创建成功,到此寄存器板的工程模板比库文件的创建简单。

如本博客的内容侵犯了你的权益,请与以下地址联系,本人获知后,马上删除。同时本人深表歉意,并致以崇高的谢意!

[email protected]