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

📄 target.c

📁 ST32F10xxx+uCOSII2.85在Keil 3.15b下源代码,这个是根据官方源码移植的,去掉了LCD驱动,目录结构简单化了,在ST32F103C8下使用ULINK调试通过(LED闪烁),可
💻 C
字号:
/* Includes ------------------------------------------------------------------*/
#include "config.h"
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
GPIO_InitTypeDef 	GPIO_InitStructure;
USART_InitTypeDef 	USART_InitStructure;
ErrorStatus 		HSEStartUpStatus;
SPI_InitTypeDef 	SPI_InitStructure;

/* Private function prototypes -----------------------------------------------*/
void RCCConfiguration(void);
void NVICConfiguration(void);
void GPIOConfiguration(void);
void SysTickConfiguartion(void);


/***********************************************************************************************
* Name:		void TargetInit(void)
* Input:	
* Output:
* Function:	初始化硬件
* Notes:	
***********************************************************************************************/
void TargetInit(void)
{
	RCCConfiguration();							// 系统时钟初始化 
	NVICConfiguration();						// 可屏蔽中断初始化
	SysTickConfiguartion();						// 系统定时器初始化	
  	GPIOConfiguration();						// IO初始化
}

/***********************************************************************************************
* Name:		void RCCConfiguration(void)
* Input:	
* Output:
* Function:	RCC初始化,配置系统时钟源
* Notes:	如果改变时钟,请同时修改config.h中的时钟定义
***********************************************************************************************/
void RCCConfiguration(void)
{
	/* RCC system reset(for debug purpose) */
	RCC_DeInit();									// RCC配置为默认模式

	/* Enable HSE */
	RCC_HSEConfig(RCC_HSE_ON);					// 允许外部高速时钟

	/* Wait till HSE is ready */
	HSEStartUpStatus = RCC_WaitForHSEStartUp();	// 等待外部时钟正常

	if(HSEStartUpStatus == SUCCESS)
	{
		/* HCLK = SYSCLK */
		RCC_HCLKConfig(RCC_SYSCLK_Div1);		// 系统时钟分频(1,2,4,8-512),1分频
	  
		/* PCLK2 = HCLK */
		RCC_PCLK2Config(RCC_HCLK_Div1);			// APB2分频(1,2,4-16),1分频,最大72MHz
	
		/* PCLK1 = HCLK/2 */
		RCC_PCLK1Config(RCC_HCLK_Div2);			// APB1分频(1,2,4-16),2分频,最大36MHz
	
		/* Flash 2 wait state */
		FLASH_SetLatency(FLASH_Latency_2);		// SYSCLK(系统时钟)周期与闪存访问时间的比例
												// FLASH_Latency_0:零等待状态,当0<SYSCLK≤24MHz
												// FLASH_Latency_1:一个等待状态,当24MHz<SYSCLK≤48MHz
												// FLASH_Latency_2:两个等待状态,当48MHz<SYSCLK≤72MHz
		/* Enable Prefetch Buffer */
		FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);	// 使能闪存预取缓冲区
	
		/* PLLCLK = 8MHz * 9 = 72 MHz */
		RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);	// PLL倍频系数,9倍频
	
		/* Enable PLL */ 
		RCC_PLLCmd(ENABLE);						// 使能PLL
	
		/* Wait till PLL is ready */
		while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET){};	// 等待PLL正常
	
		/* Select PLL as system clock source */
		RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);	// 选择PLL作为系统时钟Fcclk
	
		/* Wait till PLL is used as system clock source */
		while(RCC_GetSYSCLKSource() != 0x08){};	// 等待PLL作为系统时钟正常
	}
   
  	/* Enable GPIOA, GPIOB and AFIO clocks */
  	RCC_APB2PeriphClockCmd(	RCC_APB2Periph_GPIOA
						  |	RCC_APB2Periph_GPIOB
						  |	RCC_APB2Periph_AFIO	// 辅助功能IO(复用功能IO)
						  | RCC_APB2Periph_SPI1
						  | RCC_APB2Periph_USART1, ENABLE);
	/* Enable USART2 clocks */
	//RCC_APB1PeriphClockCmd 	(RCC_APB1Periph_USART2, ENABLE);
	/* Enable USART2 clocks */
//	RCC_APB1PeriphClockCmd 	(RCC_APB1Periph_USART3, ENABLE);
}

/***********************************************************************************************
* Name:		void NVICConfiguration(void)
* Input:	
* Output:
* Function:	可屏蔽中断配置
* Notes:	
***********************************************************************************************/
void NVICConfiguration(void)
{
	NVIC_InitTypeDef NVIC_InitStructure;
	
	// 设置中断向量表空间
#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

	/* Enable the USART1 Interrupt */
	NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStructure);
	
	/* Enable the USART2 Interrupt */
//	NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQChannel;
//	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
//	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
//	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
//	NVIC_Init(&NVIC_InitStructure);

	/* Enable the USART3 Interrupt */
//	NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQChannel;
//	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
//	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
//	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
//	NVIC_Init(&NVIC_InitStructure);
	
	/* Configure and enable SPI1 interrupt -------------------------------------*/
//	NVIC_InitStructure.NVIC_IRQChannel = SPI1_IRQChannel;
//	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
//	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
//	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
//	NVIC_Init(&NVIC_InitStructure);
}

/***********************************************************************************************
* Name:		void GPIOConfiguration(void)
* Input:	
* Output:
* Function:	
* Notes:	
***********************************************************************************************/
void GPIOConfiguration(void){
	GPIO_InitTypeDef gpio_init;

	// LED引脚配置
	gpio_init.GPIO_Pin  = GPIO_LED_LED0;
	gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
	gpio_init.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_Init(GPIO_LED, &gpio_init);
	GPIO_SetBits(GPIO_LED,GPIO_LED_LED0);
	
	// LCD引脚配置
	// LCD控制脚
	gpio_init.GPIO_Pin  = GPIO_LCD_CON_RD + GPIO_LCD_CON_CD + GPIO_LCD_CON_WR + GPIO_LCD_CON_CE;
	gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
	gpio_init.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_Init(GPIO_LCD_CON, &gpio_init);
	GPIO_SetBits(GPIO_LCD_CON,GPIO_LCD_CON_CD);
	GPIO_SetBits(GPIO_LCD_CON,GPIO_LCD_CON_WR);
	GPIO_SetBits(GPIO_LCD_CON,GPIO_LCD_CON_CE);
	GPIO_ResetBits(GPIO_LCD_CON,GPIO_LCD_CON_RD);	// 读始终使能
	// LCD数据脚,先配置成输入脚,在LCD控制中修改引脚配置
	gpio_init.GPIO_Pin  = GPIO_LCD_DATA_DATAS;
	gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
	gpio_init.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_Init(GPIO_LCD_DATA, &gpio_init);
}

/***********************************************************************************************
* Name:		void SysTickConfiguartion(void)
* Input:	
* Output:
* Function:	系统定时器配置
* Notes:	
***********************************************************************************************/
void SysTickConfiguartion(void)
{
	/* SysTick end of count event each 1ms with input clock equal to 9MHz (HCLK/8, default) */
	//SysTick_SetReload(9000*80);
	SysTick_SetReload(9000);					// 设置系统tick工作在1ms((Fcclk/8)/9000(us))
	/* Enable SysTick interrupt */
	SysTick_ITConfig(ENABLE);
	
	/* Enable the SysTick Counter */
	SysTick_CounterCmd(SysTick_Counter_Enable);
}

/******************* (C) COPYRIGHT 2007 STMicroelectronics *****END OF FILE****/

⌨️ 快捷键说明

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