www.pudn.com > STM32_ucos.rar > main.c, change:2011-12-09,size:4449b


/********************************************** 
File Name: ALIENTEK MINISTM32 实验1 跑马灯(库) 
Revision: 
Corporation: 
Microcontroller Corporation:ST 
Microcontroller name:STM32F103RBT6 ARM 
Compiler: Keil MDK_ARM 4.11 
Author: moweidong 
E-mail: moweidongsabbit@21cn.com 
Date : 2010.12.05 
*********************************************/ 
//仿真仪器设备: 
//ALIENTEK_MiniSTM32_REVB0开发板 
//JLINK V7 
/********************************************* 
//库 
//CMSIS:V1.20 
//STM32F10x_StdPeriph_Driver:V3.1.1 
*********************************************/ 
 
//本程序使用了printf用于在LCD和串口显示数据,因些对Option for Target属性有如下更改 
//Target选项页:勾中Use MicroLIB(使用微库) 
 
//LED0:PA8 
//LED1:PD2 
 
//注意:在禁用JTAG接后后可这样恢复: 
//1.设置KEIL为JTAG或SW下载模式 
//2.给板上电,按下板上的复位按键不放,点击KEIL下的FLASH下载按钮,使JTAG或SW下载工具检测完成接口后立刻放开, 
//此目的在于争取IC在上电的时候有控制权,使在未进入禁用JTAG或SW生效的时候取可控制IC进行烧录 
 
#include "stm32f10x.h" 
#include "LCD.h" 
#include "eval.h" 
#include "SysTickDelay.h" 
#include "UART_INTERFACE.h" 
#include <stdio.h> 
#include "includes.h" 
 
//设置任务堆栈大小 
#define LED_STK_SIZE     64 
#define LED1_STK_SIZE    64 
#define START_STK_SIZE   128 
 
//设置任务优先级 
#define LED_TASK_Prio       9 
#define LED1_TASK_Prio      5 
#define START_TASK_Prio     10 
 
//任务堆栈 
OS_STK  TASK_LED1_STK[LED_STK_SIZE]; 
OS_STK  TASK_LED_STK[LED_STK_SIZE]; 
OS_STK  TASK_START_STK[START_STK_SIZE]; 
//任务申明 
void TaskStart(void *pdata); 
void TaskLed(void *pdata); 
void TaskLed1(void *pdata); 
 
//系统时钟配置函数 
void SysTick_Configuration(void); 
 
 
 
 
//GPIO引脚配置 
void GPIO_Configuration(void) 
{      
	STM_EVAL_LEDInit(LED1); 
	STM_EVAL_LEDInit(LED2); 
} 
 
//系统中断管理 
void NVIC_Configuration(void) 
{  
	//NVIC_InitTypeDef NVIC_InitStructure; 
 	/* Configure the NVIC Preemption Priority Bits */   
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);	//设置优先级分组:先占优先级0位,从优先级4位 
 	//设置向量表的位置和偏移 
	#ifdef  VECT_TAB_RAM   
		/* Set the Vector Table base location at 0x20000000 */  
		NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); 		//向量表位于RAM 
	#else  /* VECT_TAB_FLASH  */ 
		/* Set the Vector Table base location at 0x08000000 */  
		NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);   //向量表位于FLASH 
	#endif 
} 
 
//配置系统时钟,使能各外设时钟 
void RCC_Configuration(void) 
{ 
	SystemInit();		  
}  
//配置所有外设 
void Init_All_Periph(void) 
{	  
	RCC_Configuration();	 
 	NVIC_Configuration(); 
 	GPIO_Configuration(); 
 	USART_Configuration(9600); 
} 
 
//开始任务 
void TaskStart(void * pdata) 
{ 
	pdata = pdata;  
	OS_ENTER_CRITICAL();    
	OSTaskCreate(TaskLed, (void * )0, (OS_STK *)&TASK_LED_STK[LED_STK_SIZE-1], LED_TASK_Prio); 
	OSTaskCreate(TaskLed1, (void * )0, (OS_STK *)&TASK_LED1_STK[LED1_STK_SIZE-1], LED1_TASK_Prio); 
	OSTaskSuspend(START_TASK_Prio);	//suspend but not delete 
	OS_EXIT_CRITICAL(); 
} 
//任务1 
//控制DS0的亮灭. 
void TaskLed(void *pdata) 
{ 
	while(1) 
	{ 
		STM_EVAL_LEDOn(LED1); 
		OSTimeDlyHMSM(0,0,0,500);	 
		STM_EVAL_LEDOff(LED1); 
		OSTimeDlyHMSM(0,0,0,500);	 
	} 
} 
//任务2 
//控制DS1的亮灭. 
void TaskLed1(void *pdata) 
{ 
	while(1) 
	{ 
		STM_EVAL_LEDOn(LED2); 
		OSTimeDlyHMSM(0,0,0,200);	 
		STM_EVAL_LEDOff(LED2); 
		OSTimeDlyHMSM(0,0,0,200);	 
	} 
}	  
  
//系统时钟中断服务函数 
void SysTick_Handler(void) 
{ 
	OS_ENTER_CRITICAL(); /* Tell uC/OS-II that we are starting an ISR  */ 
	OSIntNesting++; 
	OS_EXIT_CRITICAL(); 
	OSTimeTick();        /* Call uC/OS-II's OSTimeTick()               */ 
	OSIntExit();         /* Tell uC/OS-II that we are leaving the ISR  */ 
} 
 
//系统时钟配置,设计1ms产生一次中断 
void SysTick_Configuration(void) 
{ 
 	SysTick->CTRL&=~(1<<2);//SYSTICK使用外部时钟源 
	SysTick->CTRL|=1<<1;   //开启SYSTICK中断 
	SysTick->LOAD=9000;    //产生1ms中断 
	//bit2清空,选择外部时钟  HCLK/8 
 	SysTick->CTRL|=1<<0;   //开启SYSTICK 
} 
 
	     
//主函数 
//正点原子修改. 
//本实验主要将寄存器版本的ucos移植到库函数上,给需要的朋友使用. 
int main(void) 
{   
	Init_All_Periph(); 
	SysTick_Initaize(); 
	SysTick_Configuration();//配置systick时钟,系统滴答时钟为1ms,每秒钟中断次数为1000次 
	OSInit(); 
	OSTaskCreate( TaskStart,	//任务指针 
					(void *)0,	//任务参数 
					(OS_STK *)&TASK_START_STK[START_STK_SIZE-1],	//堆栈栈顶指针 
					START_TASK_Prio );	//任务优先级 
	OSStart(); //开始任务调度 
	return 0;	  
}