📄 app.c
字号:
/*
*********************************************************************************************************
* EXAMPLE CODE
*
* (c) Copyright 2003-2006; Micrium, Inc.; Weston, FL
*
* All rights reserved. Protected by international copyright laws.
* Knowledge of the source code may NOT be used to develop a similar product.
* Please help us continue to provide the Embedded community with the finest
* software available. Your honesty is greatly appreciated.
*********************************************************************************************************
*/
/*
*********************************************************************************************************
*
* EXAMPLE CODE
*
* ST Microelectronics STM32
* with the
* STM3210B-EVAL Evaluation Board
*
* Filename : app.c
* Version : V1.00
* Programmer(s) : Brian Nagel
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* INCLUDE FILES
*********************************************************************************************************
*/
#include <includes.h>
#include <stdio.h>
#include "..\\uvdebug\\UV_Debug.h"
/*
*********************************************************************************************************
* LOCAL DEFINES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* LOCAL GLOBAL VARIABLES
*********************************************************************************************************
*/
/* ----------------- APPLICATION GLOBALS ------------------ */
static OS_STK AppTaskRangeStk[APP_TASK_RANGE_STK_SIZE];
static OS_STK AppTaskUserIFStk[APP_TASK_USER_IF_STK_SIZE];
//static OS_EVENT *evtUartReceiver;
/*
*********************************************************************************************************
* LOCAL FUNCTION PROTOTYPES
*********************************************************************************************************
*/
static void AppTaskCreate (void);
//static void AppTaskStart (void *p_arg);
static void AppTaskUserIF (void *p_arg);
//static void AppTaskKbd (void *p_arg);
static void AppTaskRange (void* parg);
/*
*********************************************************************************************************
* main()
*
* Description : This is the standard entry point for C code. It is assumed that your code will call
* main() once you have performed all necessary initialization.
*
* Arguments : none
*
* Returns : none
*********************************************************************************************************
*/
int main (void)
{
// CPU_INT08U err;
BSP_IntDisAll(); /* Disable all interrupts until we are ready to accept them */
OSInit(); /* Initialize "uC/OS-II, The Real-Time Kernel" */
BSP_Init(); /* Initialize BSP functions */
#if (OS_TASK_STAT_EN > 0)
OSStatInit(); /* Determine CPU capacity */
#endif
AppTaskCreate(); /* Create application tasks */
#if (OS_TASK_NAME_SIZE > 13)
// OSTaskNameSet(APP_TASK_START_PRIO, "Start Task", &err);
#endif
OSStart(); /* Start multitasking (i.e. give control to uC/OS-II) */
}
/*
*********************************************************************************************************
* CREATE APPLICATION TASKS
*
* Description: This function creates the application tasks.
*
* Arguments : none
*
* Returns : none
*********************************************************************************************************
*/
static void AppTaskCreate (void)
{
CPU_INT08U err;
OSTaskCreateExt(AppTaskUserIF,
(void *)0,
(OS_STK *)&AppTaskUserIFStk[APP_TASK_USER_IF_STK_SIZE - 1],
APP_TASK_USER_IF_PRIO,
APP_TASK_USER_IF_PRIO,
(OS_STK *)&AppTaskUserIFStk[0],
APP_TASK_USER_IF_STK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
#if (OS_TASK_NAME_SIZE > 8)
OSTaskNameSet(APP_TASK_USER_IF_PRIO, "User I/F", &err);
#endif
OSTaskCreateExt(AppTaskRange,
(void *)0,
(OS_STK *)&AppTaskRangeStk[APP_TASK_RANGE_STK_SIZE - 1],
APP_TASK_RANGE_PRIO,
APP_TASK_RANGE_PRIO,
(OS_STK *)&AppTaskRangeStk[0],
APP_TASK_RANGE_STK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
}
/*
*********************************************************************************************************
* USER INTERFACE TASK
*
* Description : This task updates the LCD screen based on messages passed to it by AppTaskKbd().
*
* Arguments : p_arg is the argument passed to 'AppStartUserIF()' by 'OSTaskCreate()'.
*
* Returns : none
*********************************************************************************************************
*/
void USART_RECV_ISR(void)
{
INT16U inChar;
OS_CPU_SR cpu_sr;
OS_ENTER_CRITICAL(); /* Tell uC/OS-II that we are starting an ISR */
OSIntNesting++;
OS_EXIT_CRITICAL();
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
/* Clear the USART2 Receive interrupt */
USART_ClearITPendingBit(USART1, USART_IT_RXNE);
inChar = USART_ReceiveData(USART1);
if (inChar == 0)
return;
// ProcInput((INT8U)inChar);
}
if(USART_GetITStatus(USART1,USART_IT_TC) != RESET)
{
// if(m_tx_header != m_tx_tail)
{
// USART_SendData(USART1,(INT16U)uart_tx_buffer[m_tx_header++]);
// m_tx_header &= 0x7f;
}
USART_ClearITPendingBit(USART1,USART_IT_TC);
}
OSIntExit();
}
static void AppTaskUserIF (void *p_arg)
{
/*
unsigned long* p = (unsigned long*)0x8000;
unsigned long i, j;
FLASH_Unlock();
FLASH_ErasePage(0x8000);
FLASH_ErasePage(0x8400);
FLASH_Unlock();
for (i = 0; i < 2048; i+=4)
{
FLASH_ProgramWord(0x8000+i, 0x12345678);
for (j = 0; j < 1024; j++)
;
}
FLASH_ErasePage(0x8000);
OSTimeDly(100);
//FLASH_Unlock();
//FLASH_ProgramWord(0x8004, 0x56781234);
OSTimeDly(100);
if (*p == 0x12)
return;
while(0)
{
FLASH_Unlock();
FLASH_ErasePage(0x8000);
OSTimeDly(100);
FLASH_Unlock();
FLASH_ProgramWord(0x8000, 0x1234);
FLASH_ProgramWord(0x8004, 0x5678);
OSTimeDly(100);
if (*p == 0x12)
return;
}*/
while(1)
;
}
void AppTaskRange(void* parg)
{
unsigned char i = 0;
unsigned char j = 0;
NVIC_InitTypeDef NVIC_InitStructure;
//串口例程
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure; //定义串口初始化结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
/* 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);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
USART_InitStructure.USART_BaudRate = 115200;
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;
USART_InitStructure.USART_Clock = USART_Clock_Disable;
USART_InitStructure.USART_CPOL = USART_CPOL_Low;
USART_InitStructure.USART_CPHA = USART_CPHA_2Edge;
USART_InitStructure.USART_LastBit = USART_LastBit_Disable;
//最后数据位的时钟脉冲不输出到SCLK引脚
USART_Init(USART1, &USART_InitStructure);//初始化串口1
USART_Cmd(USART1, ENABLE);//串口1使能
//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);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
while(1)
{
OSTimeDly(200);
for (i = 0; i < 100; i++)
{
//ll = USART1->SR;
USART_SendData(USART1, i);
//
while(1)
{
if (USART_GetFlagStatus(USART1, USART_FLAG_TC) == SET)
break;
//ll = USART1->SR;
//if (ll == 0xC0)
// break;
}
}
j++;
if (j == 10)
{
FLASH_Unlock();
FLASH_ErasePage(0x0000FC00);
FLASH_ProgramWord(0x0000FC00, 0);
FLASH_Lock();
}
}
}
/*
*********************************************************************************************************
* APPLICATION-DEFINED HOOKS
*
* Description: These functions are called by the hooks in os_cpu_c.c.
*
* Returns : none
*********************************************************************************************************
*/
#if (OS_APP_HOOKS_EN > 0)
void App_TaskCreateHook (OS_TCB *ptcb)
{
#if (uC_PROBE_OS_PLUGIN > 0) && (OS_PROBE_HOOKS_EN > 0)
OSProbe_TaskCreateHook(ptcb);
#endif
}
void App_TaskDelHook (OS_TCB *ptcb)
{
(void)ptcb;
}
#if OS_VERSION >= 251
void App_TaskIdleHook (void)
{
}
#endif
void App_TaskStatHook (void)
{
}
#if OS_TASK_SW_HOOK_EN > 0
void App_TaskSwHook (void)
{
#if (uC_PROBE_OS_PLUGIN > 0) && (OS_PROBE_HOOKS_EN > 0)
OSProbe_TaskSwHook();
#endif
//进入低功耗模式
}
#endif
#if OS_VERSION >= 204
void App_TCBInitHook (OS_TCB *ptcb)
{
(void)ptcb;
}
#endif
#if OS_TIME_TICK_HOOK_EN > 0
void App_TimeTickHook (void)
{
#if (uC_PROBE_OS_PLUGIN > 0) && (OS_PROBE_HOOKS_EN > 0)
OSProbe_TickHook();
#endif
}
#endif
#endif
void App_Fault_ISR(void)
{
NVIC_GenerateSystemReset();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -