📄 main.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>© 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 + -