⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 STM32工程模板
💻 C
字号:
//********************************************Caution********************************************//
//a.当要修改芯片型号时,注意修改启动文件和C/C++选项页中的Debug选项,详见ReadMe文件
//b.程序默认使用SWD调试模式
//***********************************************************************************************//
#include "stm32f10x.h"
#include "stm32f10x_it.h"

void RCC_Configuration(void);
void NVIC_Configuration(void);
void GPIO_Configuration(void);

int main()
{
	RCC_Configuration();
	NVIC_Configuration();
	GPIO_Configuration();
	while(1);
}

//时钟配置
void RCC_Configuration(void)
{
	RCC_HSEConfig(RCC_HSE_ON);											//外部高速晶振
	if(RCC_WaitForHSEStartUp()==SUCCESS)
	{
		FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); 			//FLASH预读功能
		FLASH_SetLatency(FLASH_Latency_2);
		
		RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);				//PLL时钟72MHz
		RCC_PLLCmd(ENABLE);
		RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);						//系统时钟
		RCC_HCLKConfig(RCC_SYSCLK_Div1);								//AHB时钟,由系统时钟分频	72MHz
		RCC_PCLK1Config(RCC_HCLK_Div2);									//APB1时钟,由AHB时钟分频	36MHz
		RCC_PCLK2Config(RCC_HCLK_Div1);									//APB2时钟,由AHB时钟分频	72MHz
		while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);				//等待PLL设置成功
		RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);						//选择PLLCLK为SYSCLK时钟源
		while(RCC_GetSYSCLKSource() != 0x08);							//等待PLLCLK真的设置为SYSCLK时钟源

		RCC_AHBPeriphClockCmd(	RCC_AHBPeriph_DMA1
								//|RCC_AHBPeriph_DMA2
								|RCC_AHBPeriph_SRAM
								//|RCC_AHBPeriph_FLITF		//闪存存储器接口
								//|RCC_AHBPeriph_CRC
								,ENABLE);

		RCC_APB1PeriphClockCmd(	RCC_APB1Periph_ALL
								//|RCC_APB1Periph_TIM2
								//|RCC_APB1Periph_TIM3
								//|RCC_APB1Periph_TIM4
								//|RCC_APB1Periph_TIM5
								//|RCC_APB1Periph_TIM6
								//|RCC_APB1Periph_TIM7
								//|RCC_APB1Periph_TIM12
								//|RCC_APB1Periph_TIM13
								//|RCC_APB1Periph_TIM14
								//|RCC_APB1Periph_WWDG
								//|RCC_APB1Periph_SPI2
								//|RCC_APB1Periph_SPI3
								//|RCC_APB1Periph_USART2
								//|RCC_APB1Periph_USART3
								//|RCC_APB1Periph_UART4
								//|RCC_APB1Periph_UART5
								//|RCC_APB1Periph_I2C1
								//|RCC_APB1Periph_I2C2
								//|RCC_APB1Periph_USB
								//|RCC_APB1Periph_CAN1
								//|RCC_APB1Periph_CAN2
								//|RCC_APB1Periph_BKP
								//|RCC_APB1Periph_PWR
								//|RCC_APB1Periph_DAC
								//|RCC_APB1Periph_CEC
								,DISABLE);

		RCC_APB2PeriphClockCmd(	//RCC_APB2Periph_ALL
								RCC_APB2Periph_AFIO	   //引脚重映射
								//|RCC_APB2Periph_GPIOA
								//|RCC_APB2Periph_GPIOB
								//|RCC_APB2Periph_GPIOC
								//|RCC_APB2Periph_GPIOD
								//|RCC_APB2Periph_GPIOE
								//|RCC_APB2Periph_GPIOF
								//|RCC_APB2Periph_GPIOG
								//|RCC_APB2Periph_ADC1
								//|RCC_APB2Periph_ADC2
								//|RCC_APB2Periph_TIM1
								//|RCC_APB2Periph_SPI1
								//|RCC_APB2Periph_TIM8
								//|RCC_APB2Periph_USART1
								//|RCC_APB2Periph_ADC3
								//|RCC_APB2Periph_TIM15
								//|RCC_APB2Periph_TIM16
								//|RCC_APB2Periph_TIM17
								//|RCC_APB2Periph_TIM9
								//|RCC_APB2Periph_TIM10
								//|RCC_APB2Periph_TIM11
								,ENABLE);

		//RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5);				//USB时钟
		//RCC_ADCCLKConfig(RCC_PCLK2_Div4);								//ADC时钟
		//RCC_LSEConfig(RCC_LSE_ON);									//外部低速时钟
		//RCC_LSICmd(DISABLE);											//内部低速时钟
		//RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);						//实时时钟
		//RCC_RTCCLKCmd(ENABLE);
		//RCC_MCOConfig(RCC_MCO_PLLCLK_NoClock);						//MCO引脚输出时钟
	}
}
//中断配置
void NVIC_Configuration(void)
{
	#ifdef  VECT_TAB_RAM  
		/* Set the Vector Table base location at 0x20000000 */ 
		NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); 
	#else  /* VECT_TAB_FLASH  */
		/* Set the Vector Table base location at 0x08000000 */ 
		NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);   
	#endif
	//优先级分配
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);	
	/*						抢占优先级	从优先级
	  NVIC_PriorityGroup_0:		0		   8
	  NVIC_PriorityGroup_1:		1		   7
	  NVIC_PriorityGroup_2:		2		   6
	  NVIC_PriorityGroup_3:		3		   5
	  NVIC_PriorityGroup_4:		4		   4
	*/
}

//IO引脚设置
void GPIO_Configuration(void)
{
	//GPIO_InitTypeDef GPIO_InitStructure;
	//启动SWD调试模式
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);		//调试口引脚重映射
						//GPIO_Remap_SPI1						//SPI1_NSS -> PA15、SPI1_SCK -> PB3、SPI1_MISO -> PB4、SPI1_MOSI -> PC12
						//GPIO_Remap_I2C1						//I2C1_SCL -> PB8、I2C1_SDA -> PB9
						//GPIO_Remap_USART1						//USART1_TX -> PB6、USART_RX -> PB7
						//GPIO_Remap_USART2						//USART2_TX -> PD5、USART2_RX -> PD6、USART2_CK -> PD7、USART2_CTS -> PD3、USART2_RTS -> PD4
						//GPIO_PartialRemap_USART3				//USART3_TX -> PC10、USART3_RX -> PC11、USART3_CK -> PC12、USART3_CTS -> PB13、USART3_RTS -> PB14
						//GPIO_FullRemap_USART3					//USART3_TX -> PD8、USART3_RX -> PD9、USART3_CK -> PD10、USART3_CTS -> PD11、USART3_RTS -> PD12
						//GPIO_PartialRemap_TIM1				//TIM1_ETR -> PA12、TIM1_CH1 -> PA8、TIM1_CH2 -> PA9、TIM1_CH3 -> PA10、TIM1_CH4 -> PA11、TIM1_BKIN -> PA6、TIM1_CH1N -> PA7、TIM1_CH2N -> PB0、TIM1_CH3N -> PB1
						//GPIO_FullRemap_TIM1					//TIM1_ETR -> PE7、TIM1_CH1 -> PE9、TIM1_CH2 -> PE11、TIM1_CH3 -> PE13、TIM1_CH4 -> PE14、TIM1_BKIN -> PE15、TIM1_CH1N -> PE8、TIM1_CH2N -> PE10、TIM1_CH3N -> PE12
						//GPIO_PartialRemap1_TIM2				//TIM2_CH1_ETR -> PA15、TIM2_CH2 -> PB3、TIM2_CH3 -> PA2、TIM2_CH4 -> PA3
						//GPIO_PartialRemap2_TIM2				//TIM2_CH1_ETR -> PA0、TIM2_CH2 -> PA1、TIM2_CH3 -> PB10、TIM2_CH4 -> PB11
						//GPIO_FullRemap_TIM2					//TIM2_CH1_ETR -> PA15、TIM2_CH2 -> PB3、TIM2_CH3 -> PB10、TIM2_CH4 -> PB11
						//GPIO_PartialRemap_TIM3				//TIM3_CH1 -> PB4、TIM3_CH2 -> PB5、TIM3_CH3 -> PB0、TIM3_CH4 -> PB1
						//GPIO_FullRemap_TIM3					//TIM3_CH1 -> PC6、TIM3_CH2 -> PC7、TIM3_CH3 -> PC8、TIM3_CH4 -> PC9
						//GPIO_Remap_TIM4						//TIM4_CH1 -> PD12、TIM4_CH2 -> PD13、TIM4_CH3 -> PD14、TIM4_CH4 -> PD15
						//GPIO_Remap1_CAN1						//CAN1_RX/AN_RX -> PB8、CAN1_TX/AN_TX -> PB9
						//GPIO_Remap2_CAN1						//CAN1_RX/AN_RX -> PD0、CAN1_TX/AN_TX -> PD1
						//GPIO_Remap_PD01						//OSC_IN、OSC_OUT映射为PD0、PD1
						//GPIO_Remap_TIM5CH4_LSI				//TIM5_CH4连接至LSI内部时钟,用于校准(默认TIM5_CH4 -> TIM5_CH4)
						//GPIO_Remap_ADC1_ETRGINJ				//ADC1外部触发注入转换与TIM8_CH4相连(默认EXTI15)	※大容量产品									++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
						//GPIO_Remap_ADC1_ETRGREG				//ADC1外部触发规则转换与TIM8_TRGO相连(默认EXTI11)	※大容量产品
						//GPIO_Remap_ADC2_ETRGINJ				//ADC1外部触发注入转换与TIM8_CH4相连(默认EXTI15)	※大容量产品
						//GPIO_Remap_ADC2_ETRGREG				//ADC1外部触发规则转换与TIM8_TRGO相连(默认EXTI11)	※大容量产品
						//GPIO_Remap_ETH
						//GPIO_Remap_CAN2
						//GPIO_Remap_SWJ_NoJTRST				//SWJ除JTRST外完全使能		(PA13、PA14、PA15、PB3 不可用	PB4可用)
						//GPIO_Remap_SWJ_JTAGDisable			//JTAG失能+SW-DP模式使能	(PA13、PA14 不可用	PA15、PB3、PB4可用)
						//GPIO_Remap_SWJ_Disable				//SWJ完全失能				(PA13、PA14、PA15、PB3、PB4可用)
						//GPIO_Remap_SPI3
						//GPIO_Remap_TIM2ITR1_PTP_SOF
	/*
	//普通I/O配置
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
									//GPIO_Speed_10MHz
									//GPIO_Speed_2MHz
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
									//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_Init(GPIOA,&GPIO_InitStructure);
	//GPIO_ResetBits(GPIOA,GPIO_Pin_10);
	*/
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -