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

📄 main.c

📁 ucos在STM32F103R8T6移植 智林 stm32开发板
💻 C
字号:
/**
  ******************************************************************************
  * @file    Project/Template/main.c 
  * @author  MCD Application Team
  * @version V3.0.0
  * @date    04/06/2009
  * @brief   Main program body
  ******************************************************************************
  * @copy
  *
  * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  *
  * <h2><center>&copy; COPYRIGHT 2009 STMicroelectronics</center></h2>
  */ 

/* Includes ------------------------------------------------------------------*/
#include "includes.h"
//#include "stm32f10x.h"
//#include "stm32f10x_gpio.h"
//#include "stm32f10x_tim.h"
#include "config.h"
//#include "stm32f10x_flash.h"
#include <stdio.h>
/** @addtogroup Template_Project
  * @{
  */

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_OCInitTypeDef  TIM_OCInitStructure;
ErrorStatus HSEStartUpStatus;

uint8_t  const Button_QueDing[]={
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x01,0x00,0x20,0x00,0x01,0x80,0x00,
0x7D,0xE3,0xFF,0x00,0x01,0x80,0x00,0x12,0x46,0x01,0x00,0x01,0x80,0x00,0x27,0xF0,
0x00,0x00,0x01,0x80,0x00,0x3A,0x93,0xFE,0x00,0x01,0x80,0x00,0x6B,0xF0,0x20,0x00,
0x01,0x80,0x00,0x2A,0x91,0x20,0x00,0x01,0x80,0x00,0x2B,0xF1,0x3E,0x00,0x01,0x80,
0x00,0x3A,0x91,0xA0,0x00,0x01,0x80,0x00,0x2A,0x92,0x60,0x00,0x01,0x80,0x00,0x04,
0xB4,0x1F,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,/*"C:\Documents and Settings\周云龙\桌面\Button_PIC\确认.bmp",0*/
};
uint8_t  const PIC_Test[]={
//**************************************************
//**************************************************
//--------------------------------------------------
//*********************图片信息*********************
//名称:43-2.bmp
//.....大屏LCD横向8点左高位
//字节:128
//高度×宽度(象素):32×32
//黑白分界值:5
//**************************************************
//--------------------------------------------------
//----------------------------
// 43-2.bmp //
0x00,0x7F,0x80,0x00,0x03,0xFF,0xF0,0x00,
0x0F,0xFF,0xFC,0x00,0x1F,0xFF,0xFE,0x00,
0x3F,0xFF,0xFF,0x00,0x3F,0xFF,0xFF,0x80,
0x73,0xFF,0xFF,0xC0,0x47,0xFF,0xFF,0xE0,
0x0F,0x67,0xFF,0xFC,0x1C,0x47,0x83,0xFE,
0x32,0xCC,0x00,0x7B,0x00,0x40,0x00,0xF8,
0x00,0xC0,0x00,0xFC,0x00,0x64,0x00,0xFC,
0x03,0xC0,0x00,0xFC,0x04,0x00,0x00,0xFC,
0x08,0x60,0x00,0xFC,0x08,0x10,0x00,0xFC,
0x08,0x00,0x00,0xF8,0x04,0x60,0x00,0xF8,
0x07,0x80,0x01,0xF0,0x04,0x00,0x01,0xE0,
0x04,0x00,0x03,0xC0,0x02,0x01,0x00,0x80,
0x02,0x01,0x00,0x80,0x01,0x02,0x02,0x60,
0x00,0x84,0x06,0x50,0x00,0x78,0x19,0x28,
0x00,0x1F,0xE3,0x24,0x00,0x00,0x04,0xC4,
0x00,0x00,0x09,0x84,0x00,0x00,0x08,0x84
};


void Delay(__IO uint32_t nCount);
void RCC_Configuration(void);
void GPIO_Configuration(void);
void TIM_Configuration(void);
void CallUART1Handler(u8 Data,u8 Flag);

void Delay(__IO uint32_t nCount)
{
  for(; nCount != 0; nCount--);
}
/**
  * @brief  Configures the different system clocks.
  * @param  None
  * @retval : None
  */
void RCC_Configuration(void)
{
   SystemInit();
 
  /* TIM2 clock enable */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

  /* GPIOA and GPIOB clock enable */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1| RCC_APB2Periph_AFIO, ENABLE);
}

/**
  * @brief  Configure the TIM3 Ouput Channels.
  * @param  None
  * @retval : None
  */
void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
 // GPIO_DeInit( GPIOB);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOA|
                         RCC_APB2Periph_GPIOC, ENABLE);
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure); 
  
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_2;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure); 
    /* Configure USART1 Rx (PA.10) as input floating */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
   /* Configure USART1 Tx (PA.09) as alternate function push-pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  
}

void TIM_Configuration(void){
   /* Time base configuration */
  TIM_TimeBaseStructure.TIM_Period = 999;
  TIM_TimeBaseStructure.TIM_Prescaler = 0;
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
  
  /* PWM1 Mode configuration: Channel1 */
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = 150;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  TIM_OC3Init(TIM2, &TIM_OCInitStructure);
  TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);
  
  TIM_ARRPreloadConfig(TIM2, ENABLE);
   /* TIM3 enable counter */
  TIM_Cmd(TIM2, ENABLE);
}
#define LED             ( 1 << 5 )                // PB5: LED D2
#define  TASK_STK_SIZE                  128      /* Size of each task's stacks (# of WORDs)            */
#define  UART_Buf_Length  20
#define  RANG(i) i= (i) > UART_Buf_Length ? 0 : (i)
OS_STK        Task1Stk[TASK_STK_SIZE];
OS_STK       Task2Stk[TASK_STK_SIZE];
//OS_STK    TaskUARTStk[TASK_STK_SIZE];
u8  RxBuffer[21];
u8  pRxBufferIn = 0;
u8  pRxBufferOut = 0;
u8  pTxBufferOut = 0;
void  Task1 (void *pdata) {
	pdata = pdata;                                         /* Prevent compiler warning                 */
	for(;;) {
    	GPIOB->ODR |=  LED;                           // switch on LED
	   	OSTimeDlyHMSM(0,0,1,0);
    	GPIOB->ODR &= ~LED;                           // switch off LED
	   	OSTimeDlyHMSM(0,0,1,0);
	   	}
	}
void Task2(void *pdata){
  pdata = pdata;
    char s[20];
    u8 GUIx = 1;
    u8 GUIy = 2;
  GUI_Initialize();				// 初始化LCM 
  GUI_SetColor(Red, Blue);				// 设置前景色及背景色
  GUI_Button56x14(50,60,(uint8 *)Button_QueDing);
  GUI_LoadPic(125,95,(uint8 *)PIC_Test,32, 32);	
  OSStatInit();
  for(;;){
    GUI_SetColor(Red, Blue);
    sprintf(s,"CPU Usage: %d %%",OSCPUUsage);  
    GUI_PutString(25,120,s);	
    GUI_PutString(10,119,"  "); 
    GUI_PutString(10,119,"-"); 
    OSTimeDlyHMSM(0,0,1,0);
    GUI_PutString(10,119,"  "); 
    GUI_PutString(10,119,"/"); 
    OSTimeDlyHMSM(0,0,1,0);  
    GUI_PutString(10,119,"  "); 
    GUI_PutString(10,119,"-"); 
    OSTimeDlyHMSM(0,0,1,0);    
    GUI_PutString(10,119,"  "); 
    GUI_PutString(10,119,"|"); 
    OSTimeDlyHMSM(0,0,1,0); 
    GUI_SetColor(White, Blue);
    while(pRxBufferIn != pRxBufferOut){
      GUI_PutChar(GUIx,GUIy,RxBuffer[RANG(pRxBufferOut)]);
      pRxBufferOut++;
      GUIx += 6;
      if(GUIx >= 154){
        GUIx = 0;
        GUIy += 8;
      }
      if(GUIy >=120) GUIy = 0;
    }
    while(pRxBufferIn != pTxBufferOut){
      USART_SendData(USART1,RxBuffer[RANG(pTxBufferOut)]);
      pTxBufferOut++;
      while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
    }
  }
}
void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;

  /* Configure the NVIC Preemption Priority Bits */  
 // NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
  /* Enable the USART1 Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
  
}
void InitUART(void){
  USART_InitTypeDef USART_InitStructure;
  //RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); 
   USART_InitStructure.USART_BaudRate = 9600;
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  USART_InitStructure.USART_Parity = USART_Parity_No;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  /* Configure USART1 */
  USART_Init(USART1, &USART_InitStructure);
   /* Enable USART1 Receive and Transmit interrupts */
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);  
  //USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
   /* Enable the USART1 */
  USART_Cmd(USART1, ENABLE);
}
void CallUART1Handler(u8 Data,u8 Flag){
  if(Flag){ 
    
  }
  else{
    RxBuffer[RANG(pRxBufferIn)] = Data;
    pRxBufferIn++;
  }
}
//void TaskUART(void *pdata){
 // pdata = pdata;

//}
int main(void)
{
  /* Setup STM32 system (clock, PLL and Flash configuration) */
  NVIC_SetVectorTable(NVIC_VectTab_FLASH ,0);
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
  RCC_Configuration();
  NVIC_Configuration();
  GPIO_Configuration();
  TIM_Configuration();
  if(SysTick_Config(9000*20/*SystemFrequency / 1000*/)){
    while(1);
  }
  InitUART();
  /* Add your application code here
     */ 
    OSInit(); 
    OSTaskCreate(Task1, (void *)0, &Task1Stk[TASK_STK_SIZE - 1], 2);
    OSTaskCreate(Task2, (void *)0, &Task2Stk[TASK_STK_SIZE - 1], 3);
  //  OSTaskCreate(TaskUART, (void *)0, &TaskUARTStk[TASK_STK_SIZE - 1], 0);
    OSStart();                                             /* Start multitasking                       */
  for(;;) {
  	}     
  //GUI_Initialize();				// 初始化LCM 
 // GUI_SetColor(Red, Blue);				// 设置前景色及背景色
//  GUI_PutString(10,10,"Hello Word!!"); 
 // GUI_Button56x14(50,60,(uint8 *)Button_QueDing);
 // GUI_LoadPic(125,95,(uint8 *)PIC_Test,32, 32);		
  /* Infinite loop */
}

#ifdef  USE_FULL_ASSERT

/**
  * @brief  Reports the name of the source file and the source line number
  *   where the assert_param error has occurred.
  * @param file: pointer to the source file name
  * @param line: assert_param error line source number
  * @retval : None
  */
void assert_failed(uint8_t* file, uint32_t line)
{ 
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

  /* Infinite loop */
  while (1)
  {
  }
}
#endif

/**
  * @}
  */


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

⌨️ 快捷键说明

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